From fe22062490fbcdb29f840a465a4a0bb5f31d3d1e Mon Sep 17 00:00:00 2001
From: Snehil Kishore
Auth0 is an easy to implement, adaptable authentication and authorization platform. To learn more checkout Why Auth0?
+Auth0 is an easy to implement, adaptable authentication and authorization platform. To learn more checkout Why Auth0
-This project is licensed under the MIT license. See the LICENSE file for more info.
\ No newline at end of file +This project is licensed under the MIT license. See the LICENSE file for more info + diff --git a/V4_MIGRATION_GUIDE.md b/V4_MIGRATION_GUIDE.md deleted file mode 100644 index 77f4b3b3..00000000 --- a/V4_MIGRATION_GUIDE.md +++ /dev/null @@ -1,77 +0,0 @@ -# V4 Migration Guide - -Guide to migrating from `3.x` to `4.x` - -- [Python <3.7 is no longer supported](#python-37-is-no-longer-supported) -- [The `v3` subfolder has been removed](#the-v3-subfolder-has-been-removed) -- [Client ID and client secret are now specified in the constructor for authentication clients](#client-id-and-client-secret-are-now-specified-in-the-constructor-for-authentication-clients) -- [AuthorizeClient and Logout have been removed](#authorizeclient-and-logout-have-been-removed) -- [Methods that call deprecated endpoints have been removed](#methods-that-call-deprecated-endpoints-have-been-removed) - -## Python <3.7 is no longer supported - -Python <=3.6 and Python 2 are EOL and are no longer supported. - -Also note the new Python [Support Policy](https://github.com/auth0/auth0-python#support-policy) - -## The `v3` subfolder has been removed - -Versioning the import paths was not necessary and made major upgrades unnecessarily complex, so this has been removed and all files have been moved up a directory. - -### Before - -```python -from auth0.v3.management import Auth0 - -auth0 = Auth0(domain, mgmt_api_token) -``` - -### After - -```python -from auth0.management import Auth0 - -auth0 = Auth0(domain, mgmt_api_token) -``` - -## Client ID and client secret are now specified in the constructor for authentication clients - -### Before - -```py -from auth0.authentication import GetToken - -get_token = GetToken('my-domain.us.auth0.com') - -get_token.client_credentials('my-client-id', 'my-client-secret', 'my-api') -``` - -### After - -```py -from auth0.authentication import GetToken - -# `client_secret` is optional (you can now use `client_assertion_signing_key` as an alternative) -get_token = GetToken('my-domain.us.auth0.com', 'my-client-id', client_secret='my-client-secret') - -get_token.client_credentials('my-api') -``` - -## AuthorizeClient and Logout have been removed - -The authorize and logout requests need to be done in a user agent, so it didn't make sense to include them in a REST client. - -## Methods that call deprecated endpoints have been removed - -The following methods have been removed: - -### Authentication - -- `database.login` - Use `get_token.login` -- `passwordless.sms_login` - Use `get_token.passwordless_login` -- `users.tokeninfo` - `users.userinfo` - -### Management - -- `users.delete_all_users` - Use `users.delete` -- `jobs.get_results` - Use `jobs.get` diff --git a/auth0/__init__.py b/auth0/__init__.py deleted file mode 100644 index 584a20d1..00000000 --- a/auth0/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# This value is updated by `poetry_dynamic_versioning` during build time from the latest git tag -__version__ = "0.0.0" - -from auth0.exceptions import Auth0Error, RateLimitError, TokenValidationError - -__all__ = ("Auth0Error", "RateLimitError", "TokenValidationError") diff --git a/auth0/asyncify.py b/auth0/asyncify.py deleted file mode 100644 index fb884249..00000000 --- a/auth0/asyncify.py +++ /dev/null @@ -1,115 +0,0 @@ -import aiohttp - -from auth0.authentication import Users -from auth0.authentication.base import AuthenticationBase -from auth0.rest import RestClientOptions -from auth0.rest_async import AsyncRestClient - - -def _gen_async(client, method): - m = getattr(client, method) - - async def closure(*args, **kwargs): - return await m(*args, **kwargs) - - return closure - - -def asyncify(cls): - methods = [ - func - for func in dir(cls) - if callable(getattr(cls, func)) and not func.startswith("_") - ] - - class UsersAsyncClient(cls): - def __init__( - self, - domain, - telemetry=True, - timeout=5.0, - protocol="https", - ): - super().__init__(domain, telemetry, timeout, protocol) - self.client = AsyncRestClient(None, telemetry=telemetry, timeout=timeout) - - class AsyncManagementClient(cls): - def __init__( - self, - domain, - token, - telemetry=True, - timeout=5.0, - protocol="https", - rest_options=None, - ): - super().__init__(domain, token, telemetry, timeout, protocol, rest_options) - self.client = AsyncRestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - class AsyncAuthenticationClient(cls): - def __init__( - self, - domain, - client_id, - client_secret=None, - client_assertion_signing_key=None, - client_assertion_signing_alg=None, - telemetry=True, - timeout=5.0, - protocol="https", - ): - super().__init__( - domain, - client_id, - client_secret, - client_assertion_signing_key, - client_assertion_signing_alg, - telemetry, - timeout, - protocol, - ) - self.client = AsyncRestClient( - None, - options=RestClientOptions( - telemetry=telemetry, timeout=timeout, retries=0 - ), - ) - - class Wrapper(cls): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - if cls == Users: - self._async_client = UsersAsyncClient(*args, **kwargs) - elif AuthenticationBase in cls.__bases__: - self._async_client = AsyncAuthenticationClient(*args, **kwargs) - else: - self._async_client = AsyncManagementClient(*args, **kwargs) - for method in methods: - setattr( - self, - f"{method}_async", - _gen_async(self._async_client, method), - ) - - def set_session(self, session): - """Set Client Session to improve performance by reusing session. - - Args: - session (aiohttp.ClientSession): The client session which should be closed - manually or within context manager. - """ - self._session = session - self._async_client.client.set_session(self._session) - - async def __aenter__(self): - """Automatically create and set session within context manager.""" - self.set_session(aiohttp.ClientSession()) - return self - - async def __aexit__(self, exc_type, exc_val, exc_tb): - """Automatically close session within context manager.""" - await self._session.close() - - return Wrapper diff --git a/auth0/management/__init__.py b/auth0/management/__init__.py deleted file mode 100644 index 761446b6..00000000 --- a/auth0/management/__init__.py +++ /dev/null @@ -1,72 +0,0 @@ -from ..utils import is_async_available -from .actions import Actions -from .attack_protection import AttackProtection -from .blacklists import Blacklists -from .branding import Branding -from .client_credentials import ClientCredentials -from .client_grants import ClientGrants -from .clients import Clients -from .connections import Connections -from .custom_domains import CustomDomains -from .device_credentials import DeviceCredentials -from .email_templates import EmailTemplates -from .emails import Emails -from .grants import Grants -from .guardian import Guardian -from .hooks import Hooks -from .jobs import Jobs -from .log_streams import LogStreams -from .logs import Logs -from .network_acls import NetworkAcls -from .organizations import Organizations -from .resource_servers import ResourceServers -from .roles import Roles -from .rules import Rules -from .rules_configs import RulesConfigs -from .self_service_profiles import SelfServiceProfiles -from .stats import Stats -from .tenants import Tenants -from .tickets import Tickets -from .user_blocks import UserBlocks -from .users import Users -from .users_by_email import UsersByEmail - -if is_async_available(): - from .async_auth0 import AsyncAuth0 as Auth0 -else: # pragma: no cover - from .auth0 import Auth0 # type: ignore[assignment] - -__all__ = ( - "Auth0", - "Actions", - "AttackProtection", - "Blacklists", - "Branding", - "ClientCredentials", - "ClientGrants", - "Clients", - "Connections", - "CustomDomains", - "DeviceCredentials", - "EmailTemplates", - "Emails", - "Grants", - "Guardian", - "Hooks", - "Jobs", - "LogStreams", - "Logs", - "NetworkAcls" - "Organizations", - "ResourceServers", - "Roles", - "RulesConfigs", - "Rules", - "SelfServiceProfiles", - "Stats", - "Tenants", - "Tickets", - "UserBlocks", - "UsersByEmail", - "Users", -) diff --git a/auth0/management/actions.py b/auth0/management/actions.py deleted file mode 100644 index bae07f96..00000000 --- a/auth0/management/actions.py +++ /dev/null @@ -1,264 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Actions: - """Auth0 Actions endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions, optional): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, *args: str | None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/actions" - for p in args: - if p is not None: - url = f"{url}/{p}" - return url - - def get_actions( - self, - trigger_id: str | None = None, - action_name: str | None = None, - deployed: bool | None = None, - installed: bool = False, - page: int | None = None, - per_page: int | None = None, - ) -> Any: - """Get all actions. - - Args: - trigger_id (str, optional): Filter the results to only actions associated - with this trigger ID. - - action_name (str, optional): Filter the results to only actions with this name. - - deployed (bool, optional): True to filter the results to only deployed actions. - Defaults to False. - - installed (bool, optional): True to filter the results to only installed actions. - Defaults to False. - - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - See: https://auth0.com/docs/api/management/v2#!/Actions/get_actions - """ - - deployed_str = str(deployed).lower() if deployed is not None else None - - params = { - "triggerId": trigger_id, - "actionName": action_name, - "deployed": deployed_str, - "installed": str(installed).lower(), - "page": page, - "per_page": per_page, - } - - return self.client.get(self._url("actions"), params=params) - - def create_action(self, body: dict[str, Any]) -> dict[str, Any]: - """Create a new action. - - Args: - body (dict): Attributes for the new action. - - See: https://auth0.com/docs/api/management/v2#!/Actions/post_action - """ - - return self.client.post(self._url("actions"), data=body) - - def update_action(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Updates an action. - - Args: - id (str): the ID of the action. - - body (dict): Attributes to modify. - - See: https://auth0.com/docs/api/management/v2#!/Actions/patch_action - """ - - return self.client.patch(self._url("actions", id), data=body) - - def get_action(self, id: str) -> dict[str, Any]: - """Retrieves an action by its ID. - - Args: - id (str): Id of action to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/Actions/get_action - """ - params = {} - - return self.client.get(self._url("actions", id), params=params) - - def delete_action(self, id: str, force: bool = False) -> Any: - """Deletes an action and all of its associated versions. - - Args: - id (str): ID of the action to delete. - - force (bool, optional): True to force action deletion detaching bindings, - False otherwise. Defaults to False. - - See: https://auth0.com/docs/api/management/v2#!/Actions/delete_action - """ - params = {"force": str(force).lower()} - - return self.client.delete(self._url("actions", id), params=params) - - def get_triggers(self) -> dict[str, Any]: - """Retrieve the set of triggers currently available within actions. - - See: https://auth0.com/docs/api/management/v2#!/Actions/get_triggers - """ - params = {} - - return self.client.get(self._url("triggers"), params=params) - - def get_execution(self, id: str) -> dict[str, Any]: - """Get information about a specific execution of a trigger. - - Args: - id (str): The ID of the execution to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/Actions/get_execution - """ - params = {} - - return self.client.get(self._url("executions", id), params=params) - - def get_action_versions( - self, id: str, page: int | None = None, per_page: int | None = None - ) -> dict[str, Any]: - """Get all of an action's versions. - - Args: - id (str): The ID of the action. - - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - See: https://auth0.com/docs/api/management/v2#!/Actions/get_action_versions - """ - params = {"page": page, "per_page": per_page} - - return self.client.get(self._url("actions", id, "versions"), params=params) - - def get_trigger_bindings( - self, id: str, page: int | None = None, per_page: int | None = None - ) -> dict[str, Any]: - """Get the actions that are bound to a trigger. - - Args: - id (str): The trigger ID. - - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - See: https://auth0.com/docs/api/management/v2#!/Actions/get_bindings - """ - params = {"page": page, "per_page": per_page} - return self.client.get(self._url("triggers", id, "bindings"), params=params) - - def get_action_version(self, action_id: str, version_id: str) -> dict[str, Any]: - """Retrieve a specific version of an action. - - Args: - action_id (str): The ID of the action. - - version_id (str): The ID of the version to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/Actions/get_action_version - """ - params = {} - - return self.client.get( - self._url("actions", action_id, "versions", version_id), params=params - ) - - def deploy_action(self, id: str) -> dict[str, Any]: - """Deploy an action. - - Args: - id (str): The ID of the action to deploy. - - See: https://auth0.com/docs/api/management/v2#!/Actions/post_deploy_action - """ - return self.client.post(self._url("actions", id, "deploy")) - - def rollback_action_version( - self, action_id: str, version_id: str - ) -> dict[str, Any]: - """Roll back to a previous version of an action. - - Args: - action_id (str): The ID of the action. - - version_id (str): The ID of the version. - - See: https://auth0.com/docs/api/management/v2#!/Actions/post_deploy_draft_version - """ - return self.client.post( - self._url("actions", action_id, "versions", version_id, "deploy"), data={} - ) - - def update_trigger_bindings(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Update a trigger's bindings. - - Args: - id (str): The ID of the trigger to update. - - body (dict): Attributes for the updated trigger binding. - - See: https://auth0.com/docs/api/management/v2#!/Actions/patch_bindings - """ - return self.client.patch(self._url("triggers", id, "bindings"), data=body) diff --git a/auth0/management/async_auth0.py b/auth0/management/async_auth0.py deleted file mode 100644 index 1b7e5943..00000000 --- a/auth0/management/async_auth0.py +++ /dev/null @@ -1,67 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -import aiohttp - -from ..asyncify import asyncify -from .auth0 import Auth0 - -if TYPE_CHECKING: - from types import TracebackType - - from auth0.rest import RestClientOptions - - -class AsyncAuth0: - """Provides easy access to all endpoint classes - - Args: - domain (str): Your Auth0 domain, for example 'username.auth0.com' - - token (str): Management API v2 Token - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, domain: str, token: str, rest_options: RestClientOptions | None = None - ) -> None: - self._services = [] - for name, attr in vars(Auth0(domain, token, rest_options=rest_options)).items(): - cls = asyncify(attr.__class__) - service = cls(domain=domain, token=token, rest_options=rest_options) - self._services.append(service) - setattr( - self, - name, - service, - ) - - def set_session(self, session: aiohttp.ClientSession) -> None: - """Set Client Session to improve performance by reusing session. - - Args: - session (aiohttp.ClientSession): The client session which should be closed - manually or within context manager. - """ - self._session = session - for service in self._services: - service.set_session(self._session) - - async def __aenter__(self) -> AsyncAuth0: - """Automatically create and set session within context manager.""" - self.set_session(aiohttp.ClientSession()) - return self - - async def __aexit__( - self, - exc_type: type[BaseException] | None, - exc_val: BaseException | None, - exc_tb: TracebackType | None, - ) -> None: - """Automatically close session within context manager.""" - await self._session.close() diff --git a/auth0/management/attack_protection.py b/auth0/management/attack_protection.py deleted file mode 100644 index 0d47cf0b..00000000 --- a/auth0/management/attack_protection.py +++ /dev/null @@ -1,126 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class AttackProtection: - """Auth0 attack protection endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, component: str) -> str: - return "{}://{}/api/v2/attack-protection/{}".format( - self.protocol, self.domain, component - ) - - def get_breached_password_detection(self) -> dict[str, Any]: - """Get breached password detection settings. - - Returns the breached password detection settings. - - See: https://auth0.com/docs/api/management/v2#!/Attack_Protection/get_breached_password_detection - """ - url = self._url("breached-password-detection") - return self.client.get(url) - - def update_breached_password_detection( - self, body: dict[str, Any] - ) -> dict[str, Any]: - """Update breached password detection settings. - - Returns the breached password detection settings. - - Args: - - body (dict): breached password detection settings. - - See: https://auth0.com/docs/api/management/v2#!/Attack_Protection/patch_breached_password_detection - """ - url = self._url("breached-password-detection") - return self.client.patch(url, data=body) - - def get_brute_force_protection(self) -> dict[str, Any]: - """Get the brute force configuration. - - Returns the brute force configuration. - - See: https://auth0.com/docs/api/management/v2#!/Attack_Protection/get_brute_force_protection - """ - url = self._url("brute-force-protection") - return self.client.get(url) - - def update_brute_force_protection(self, body: dict[str, Any]) -> dict[str, Any]: - """Update the brute force configuration. - - Returns the brute force configuration. - - Args: - - body (dict): updates of the brute force configuration. - - See: https://auth0.com/docs/api/management/v2#!/Attack_Protection/patch_brute_force_protection - """ - url = self._url("brute-force-protection") - return self.client.patch(url, data=body) - - def get_suspicious_ip_throttling(self) -> dict[str, Any]: - """Get the suspicious IP throttling configuration. - - Returns the suspicious IP throttling configuration. - - See: https://auth0.com/docs/api/management/v2#!/Attack_Protection/get_suspicious_ip_throttling - """ - url = self._url("suspicious-ip-throttling") - return self.client.get(url) - - def update_suspicious_ip_throttling(self, body: dict[str, Any]) -> dict[str, Any]: - """Update the suspicious IP throttling configuration. - - Returns the suspicious IP throttling configuration. - - Args: - - body (dict): updates of the suspicious IP throttling configuration. - - See: https://auth0.com/docs/api/management/v2#!/Attack_Protection/patch_suspicious_ip_throttling - """ - url = self._url("suspicious-ip-throttling") - return self.client.patch(url, data=body) diff --git a/auth0/management/auth0.py b/auth0/management/auth0.py deleted file mode 100644 index 4edf4c31..00000000 --- a/auth0/management/auth0.py +++ /dev/null @@ -1,100 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -from .actions import Actions -from .attack_protection import AttackProtection -from .blacklists import Blacklists -from .branding import Branding -from .client_credentials import ClientCredentials -from .client_grants import ClientGrants -from .clients import Clients -from .connections import Connections -from .custom_domains import CustomDomains -from .device_credentials import DeviceCredentials -from .email_templates import EmailTemplates -from .emails import Emails -from .grants import Grants -from .guardian import Guardian -from .hooks import Hooks -from .jobs import Jobs -from .log_streams import LogStreams -from .logs import Logs -from .network_acls import NetworkAcls -from .organizations import Organizations -from .prompts import Prompts -from .resource_servers import ResourceServers -from .roles import Roles -from .rules import Rules -from .rules_configs import RulesConfigs -from .self_service_profiles import SelfServiceProfiles -from .stats import Stats -from .tenants import Tenants -from .tickets import Tickets -from .user_blocks import UserBlocks -from .users import Users -from .users_by_email import UsersByEmail - -if TYPE_CHECKING: - from auth0.rest import RestClientOptions - - -class Auth0: - """Provides easy access to all endpoint classes - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, domain: str, token: str, rest_options: RestClientOptions | None = None - ): - self.actions = Actions(domain, token, rest_options=rest_options) - self.attack_protection = AttackProtection( - domain, token, rest_options=rest_options - ) - self.blacklists = Blacklists(domain, token, rest_options=rest_options) - self.branding = Branding(domain, token, rest_options=rest_options) - self.client_credentials = ClientCredentials( - domain, token, rest_options=rest_options - ) - self.client_grants = ClientGrants(domain, token, rest_options=rest_options) - self.clients = Clients(domain, token, rest_options=rest_options) - self.connections = Connections(domain, token, rest_options=rest_options) - self.custom_domains = CustomDomains(domain, token, rest_options=rest_options) - self.device_credentials = DeviceCredentials( - domain, token, rest_options=rest_options - ) - self.email_templates = EmailTemplates(domain, token, rest_options=rest_options) - self.emails = Emails(domain, token, rest_options=rest_options) - self.grants = Grants(domain, token, rest_options=rest_options) - self.guardian = Guardian(domain, token, rest_options=rest_options) - self.hooks = Hooks(domain, token, rest_options=rest_options) - self.jobs = Jobs(domain, token, rest_options=rest_options) - self.log_streams = LogStreams(domain, token, rest_options=rest_options) - self.logs = Logs(domain, token, rest_options=rest_options) - self.network_acls = NetworkAcls(domain, token, rest_options=rest_options) - self.organizations = Organizations(domain, token, rest_options=rest_options) - self.prompts = Prompts(domain, token, rest_options=rest_options) - self.resource_servers = ResourceServers( - domain, token, rest_options=rest_options - ) - self.roles = Roles(domain, token, rest_options=rest_options) - self.rules_configs = RulesConfigs(domain, token, rest_options=rest_options) - self.rules = Rules(domain, token, rest_options=rest_options) - self.self_service_profiles = SelfServiceProfiles( - domain, token, rest_options=rest_options - ) - self.stats = Stats(domain, token, rest_options=rest_options) - self.tenants = Tenants(domain, token, rest_options=rest_options) - self.tickets = Tickets(domain, token, rest_options=rest_options) - self.user_blocks = UserBlocks(domain, token, rest_options=rest_options) - self.users_by_email = UsersByEmail(domain, token, rest_options=rest_options) - self.users = Users(domain, token, rest_options=rest_options) diff --git a/auth0/management/blacklists.py b/auth0/management/blacklists.py deleted file mode 100644 index 233369a1..00000000 --- a/auth0/management/blacklists.py +++ /dev/null @@ -1,79 +0,0 @@ -from __future__ import annotations - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Blacklists: - """Auth0 blacklists endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.url = f"{protocol}://{domain}/api/v2/blacklists/tokens" - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def get(self, aud: str | None = None) -> list[dict[str, str]]: - """Retrieves the jti and aud of all tokens in the blacklist. - - Args: - aud (str, optional): The JWT's aud claim. The client_id of the - application for which it was issued. - - - See: https://auth0.com/docs/api/management/v2#!/Blacklists/get_tokens - """ - - params = {"aud": aud} - - return self.client.get(self.url, params=params) - - def create(self, jti: str, aud: str | None = None) -> dict[str, str]: - """Adds a token to the blacklist. - - Args: - jti (str): the jti of the JWT to blacklist. - - aud (str, optional): The JWT's aud claim. The client_id of the - application for which it was issued. - - See: https://auth0.com/docs/api/management/v2#!/Blacklists/post_tokens - """ - body = { - "jti": jti, - } - - if aud: - body.update({"aud": aud}) - - return self.client.post(self.url, data=body) diff --git a/auth0/management/branding.py b/auth0/management/branding.py deleted file mode 100644 index 89cead77..00000000 --- a/auth0/management/branding.py +++ /dev/null @@ -1,158 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Branding: - """Auth0 Branding endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, *args: str) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/branding" - for p in args: - if p is not None: - url = f"{url}/{p}" - return url - - def get(self) -> dict[str, Any]: - """Retrieve branding settings. Requires "read:branding" scope. - - See: https://auth0.com/docs/api/management/v2#!/Branding/get_branding - """ - - return self.client.get(self._url()) - - def update(self, body: dict[str, Any]) -> dict[str, Any]: - """Update branding settings. Requires "update:branding" scope. - - Args: - body (dict): Attributes for the updated trigger binding. - - See: https://auth0.com/docs/api/management/v2#!/Branding/patch_branding - """ - - return self.client.patch(self._url(), data=body) - - def get_template_universal_login(self) -> dict[str, Any]: - """Get template for New Universal Login Experience. Requires "read:branding" scope. - - See: https://auth0.com/docs/api/management/v2#!/Branding/get_universal_login - """ - - return self.client.get(self._url("templates", "universal-login")) - - def delete_template_universal_login(self) -> Any: - """Delete template for New Universal Login Experience. Requires "delete:branding" scope. - - See: https://auth0.com/docs/api/management/v2#!/Branding/delete_universal_login - """ - - return self.client.delete(self._url("templates", "universal-login")) - - def update_template_universal_login(self, body: dict[str, Any]) -> dict[str, Any]: - """Update template for New Universal Login Experience. Requires "update:branding" scope. - - Args: - body (str): Complete HTML content to assign to the template. See linked API documentation for example. - - See: https://auth0.com/docs/api/management/v2#!/Branding/put_universal_login - """ - - return self.client.put( - self._url("templates", "universal-login"), - data={"template": body}, - ) - - def get_default_branding_theme(self) -> dict[str, Any]: - """Retrieve default branding theme. - - See: https://auth0.com/docs/api/management/v2#!/Branding/get_default_branding_theme - """ - - return self.client.get(self._url("themes", "default")) - - def get_branding_theme(self, theme_id: str) -> dict[str, Any]: - """Retrieve branding theme. - - Args: - theme_id (str): The theme_id to retrieve branding theme for. - - See: https://auth0.com/docs/api/management/v2#!/Branding/get_branding_theme - """ - - return self.client.get(self._url("themes", theme_id)) - - def delete_branding_theme(self, theme_id: str) -> Any: - """Delete branding theme. - - Args: - theme_id (str): The theme_id to delete branding theme for. - - See: https://auth0.com/docs/api/management/v2#!/Branding/delete_branding_theme - """ - - return self.client.delete(self._url("themes", theme_id)) - - def update_branding_theme( - self, theme_id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Update branding theme. - - Args: - theme_id (str): The theme_id to update branding theme for. - body (dict): The attributes to set on the theme. - - See: https://auth0.com/docs/api/management/v2#!/Branding/patch_branding_theme - """ - - return self.client.patch(self._url("themes", theme_id), data=body) - - def create_branding_theme(self, body: dict[str, Any]) -> dict[str, Any]: - """Create branding theme. - - Args: - body (dict): The attributes to set on the theme. - - See: https://auth0.com/docs/api/management/v2#!/Branding/post_branding_theme - """ - - return self.client.post(self._url("themes"), data=body) diff --git a/auth0/management/client_credentials.py b/auth0/management/client_credentials.py deleted file mode 100644 index 0acfc684..00000000 --- a/auth0/management/client_credentials.py +++ /dev/null @@ -1,98 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class ClientCredentials: - """Auth0 client credentials endpoints. - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, client_id: str, id: str | None = None) -> str: - url = "{}://{}/api/v2/clients/{}/credentials".format( - self.protocol, self.domain, client_id - ) - if id is not None: - return f"{url}/{id}" - return url - - def all(self, client_id: str) -> list[dict[str, Any]]: - """Get a list of credentials associated with a client. - - Args: - client_id (string): The id of a client that owns the credentials. - - See: https://auth0.com/docs/api/management/v2#!/Client_Credentials/get_client_credentials - """ - return self.client.get(self._url(client_id)) - - def get(self, client_id: str, id: str) -> dict[str, Any]: - """Retrieve a specified client credential. - - Args: - client_id (string): The id of a client that owns the credential. - - id (string): The id of the credential. - - See: https://auth0.com/docs/api/management/v2#!/Client_Credentials/get_client_credentials_by_id - """ - return self.client.get(self._url(client_id, id)) - - def create(self, client_id: str, body: dict[str, Any]) -> dict[str, Any]: - """Create a credential on a client. - - Args: - client_id (string): The id of a client to create the credential for. - - See: https://auth0.com/docs/api/management/v2#!/Client_Credentials/post_client_credentials - """ - return self.client.post(self._url(client_id), data=body) - - def delete(self, client_id: str, id: str) -> dict[str, Any]: - """Delete a client's credential. - - Args: - id (str): The id of credential to delete. - - See: https://auth0.com/docs/api/management/v2#!/Client_Credentials/delete_client_credentials_by_id - """ - - return self.client.delete(self._url(client_id, id)) diff --git a/auth0/management/client_grants.py b/auth0/management/client_grants.py deleted file mode 100644 index 46b2d9d9..00000000 --- a/auth0/management/client_grants.py +++ /dev/null @@ -1,170 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class ClientGrants: - """Auth0 client grants endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/client-grants" - if id is not None: - return f"{url}/{id}" - return url - - def all( - self, - audience: str | None = None, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - client_id: str | None = None, - allow_any_organization: bool | None = None, - ): - """Retrieves all client grants. - - Args: - audience (str, optional): URL encoded audience of a Resource Server - to filter. - - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to False. - - client_id (string, optional): The id of a client to filter. - - allow_any_organization (bool, optional): Optional filter on allow_any_organization. - - See: https://auth0.com/docs/api/management/v2#!/Client_Grants/get_client_grants - """ - - params = { - "audience": audience, - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - "client_id": client_id, - "allow_any_organization": allow_any_organization, - } - - return self.client.get(self._url(), params=params) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Creates a client grant. - - Args: - body (dict): Attributes for the new client grant. - - See: https://auth0.com/docs/api/management/v2#!/Client_Grants/post_client_grants - """ - - return self.client.post(self._url(), data=body) - - def delete(self, id: str) -> Any: - """Deletes a client grant. - - Args: - id (str): Id of client grant to delete. - - See: https://auth0.com/docs/api/management/v2#!/Client_Grants/delete_client_grants_by_id - """ - - return self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Modifies a client grant. - - Args: - id (str): The id of the client grant to modify. - - body (dict): Attributes to update. - - See: https://auth0.com/docs/api/management/v2#!/Client_Grants/patch_client_grants_by_id - """ - - return self.client.patch(self._url(id), data=body) - - def get_organizations( - self, - id: str, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - from_param: str | None = None, - take: int | None = None, - ): - """Get the organizations associated to a client grant. - - Args: - id (str): Id of client grant. - - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to False. - - from_param (str, optional): Id to start retrieving entries. You can - limit the amount of entries using the take parameter. - - take (int, optional): The total amount of entries to retrieve when - using the from parameter. When not set, the default value is up to the server. - """ - - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - "from": from_param, - "take": take, - } - - return self.client.get(self._url(f"{id}/organizations"), params=params) diff --git a/auth0/management/clients.py b/auth0/management/clients.py deleted file mode 100644 index d7cb6b59..00000000 --- a/auth0/management/clients.py +++ /dev/null @@ -1,174 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Clients: - """Auth0 applications endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/clients" - if id is not None: - return f"{url}/{id}" - return url - - def all( - self, - fields: list[str] | None = None, - include_fields: bool = True, - page: int | None = None, - per_page: int | None = None, - extra_params: dict[str, Any] | None = None, - ) -> list[dict[str, Any]]: - """Retrieves a list of all the applications. - - Important: The client_secret and encryption_key attributes can only be - retrieved with the read:client_keys scope. - - Args: - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - extra_params (dictionary, optional): The extra parameters to add to - the request. The fields, include_fields, page and per_page values - specified as parameters take precedence over the ones defined here. - - See: https://auth0.com/docs/api/management/v2#!/Clients/get_clients - """ - params = extra_params or {} - params["fields"] = fields and ",".join(fields) or None - params["include_fields"] = str(include_fields).lower() - params["page"] = page - params["per_page"] = per_page - - return self.client.get(self._url(), params=params) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Create a new application. - - Args: - body (dict): Attributes for the new application. - - See: https://auth0.com/docs/api/v2#!/Clients/post_clients - """ - - return self.client.post(self._url(), data=body) - - def get( - self, id: str, fields: list[str] | None = None, include_fields: bool = True - ) -> dict[str, Any]: - """Retrieves an application by its id. - - Important: The client_secret, encryption_key and signing_keys - attributes can only be retrieved with the read:client_keys scope. - - Args: - id (str): Id of the application to get. - - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2#!/Clients/get_clients_by_id - """ - - params = { - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - } - - return self.client.get(self._url(id), params=params) - - def delete(self, id: str) -> Any: - """Deletes an application and all its related assets. - - Args: - id (str): Id of application to delete. - - See: https://auth0.com/docs/api/management/v2#!/Clients/delete_clients_by_id - """ - - return self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Modifies an application. - - Important: The client_secret, encryption_key and signing_keys - attributes can only be updated with the update:client_keys scope. - - Args: - id (str): Client ID of the application. - - body (dict): Attributes to modify. - - See: https://auth0.com/docs/api/management/v2#!/Clients/patch_clients_by_id - """ - - return self.client.patch(self._url(id), data=body) - - def rotate_secret(self, id: str) -> dict[str, Any]: - """Rotate a client secret. The generated secret is NOT base64 encoded. - - Args: - id (str): Client ID of the application. - - See: https://auth0.com/docs/api/management/v2#!/Clients/post_rotate_secret - """ - - data = {"id": id} - - url = self._url("%s/rotate-secret" % id) - return self.client.post(url, data=data) diff --git a/auth0/management/connections.py b/auth0/management/connections.py deleted file mode 100644 index 0460d951..00000000 --- a/auth0/management/connections.py +++ /dev/null @@ -1,189 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Connections: - """Auth0 connection endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/connections" - if id is not None: - return f"{url}/{id}" - return url - - def all( - self, - strategy: str | None = None, - fields: list[str] | None = None, - include_fields: bool = True, - page: int | None = None, - per_page: int | None = None, - extra_params: dict[str, Any] | None = None, - name: str | None = None, - ) -> list[dict[str, Any]]: - """Retrieves all connections. - - Args: - strategy (str, optional): Only retrieve connections of - this strategy type. (e.g: strategy='amazon') - - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. By default, all the fields will be retrieved. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - page (int): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - extra_params (dictionary, optional): The extra parameters to add to - the request. The fields, include_fields, page and per_page values - specified as parameters take precedence over the ones defined here. - - name (str): Provide the name of the connection to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/Connections/get_connections - - Returns: - A list of connection objects. - """ - - params = extra_params or {} - params["strategy"] = strategy or None - params["fields"] = fields and ",".join(fields) or None - params["include_fields"] = str(include_fields).lower() - params["page"] = page - params["per_page"] = per_page - params["name"] = name - - return self.client.get(self._url(), params=params) - - def get( - self, id: str, fields: list[str] | None = None, include_fields: bool = True - ) -> dict[str, Any]: - """Retrieve connection by id. - - Args: - id (str): Id of the connection to get. - - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. By default, all the fields will be retrieved. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2#!/Connections/get_connections_by_id - - Returns: - A connection object. - """ - - params = { - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - } - - return self.client.get(self._url(id), params=params) - - def delete(self, id: str) -> Any: - """Deletes a connection and all its users. - - Args: - id: Id of the connection to delete. - - See: https://auth0.com/docs/api/management/v2#!/Connections/delete_connections_by_id - - Returns: - An empty dict. - """ - - return self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Modifies a connection. - - Args: - id: Id of the connection. - - body (dict): Specifies which fields are to be modified, and to what values. - - See: https://auth0.com/docs/api/management/v2#!/Connections/patch_connections_by_id - - Returns: - The modified connection object. - """ - - return self.client.patch(self._url(id), data=body) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Creates a new connection. - - Args: - body (dict): Attributes used to create the connection. Mandatory - attributes are: 'name' and 'strategy'. - - See: https://auth0.com/docs/api/management/v2#!/Connections/post_connections - """ - - return self.client.post(self._url(), data=body) - - def delete_user_by_email(self, id: str, email: str) -> Any: - """Deletes a specified connection user by its email. - - Args: - id (str): The id of the connection (must be a database connection). - - email (str): The email of the user to delete. - - See: https://auth0.com/docs/api/management/v2#!/Connections/delete_users_by_email - - Returns: - An empty dict. - """ - return self.client.delete(self._url(id) + "/users", params={"email": email}) diff --git a/auth0/management/custom_domains.py b/auth0/management/custom_domains.py deleted file mode 100644 index c0d9e1c0..00000000 --- a/auth0/management/custom_domains.py +++ /dev/null @@ -1,100 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class CustomDomains: - """Auth0 custom domains endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/custom-domains" - if id is not None: - return url + "/" + id - return url - - def all(self) -> list[dict[str, Any]]: - """Retrieves all custom domains. - - See: https://auth0.com/docs/api/management/v2#!/Custom_Domains/get_custom_domains - """ - return self.client.get(self._url()) - - def get(self, id: str) -> dict[str, Any]: - """Retrieves custom domain. - - See: https://auth0.com/docs/api/management/v2#!/Custom_Domains/get_custom_domains_by_id - """ - url = self._url("%s" % (id)) - return self.client.get(url) - - def delete(self, id: str) -> Any: - """Deletes a grant. - - Args: - id (str): The id of the custom domain to delete. - - See: https://auth0.com/docs/api/management/v2#!/Custom_Domains/delete_custom_domains_by_id - """ - url = self._url("%s" % (id)) - return self.client.delete(url) - - def create_new(self, body: dict[str, Any]) -> dict[str, Any]: - """Configure a new custom domain. - - Args: - body (str): The domain, tye and verification method in json. - - See: https://auth0.com/docs/api/management/v2#!/Custom_Domains/post_custom_domains - """ - return self.client.post(self._url(), data=body) - - def verify(self, id: str) -> dict[str, Any]: - """Verify a custom domain. - - Args: - id (str): The id of the custom domain to delete. - - See: https://auth0.com/docs/api/management/v2#!/Custom_Domains/post_verify - """ - url = self._url("%s/verify" % (id)) - return self.client.post(url) diff --git a/auth0/management/device_credentials.py b/auth0/management/device_credentials.py deleted file mode 100644 index e289cf49..00000000 --- a/auth0/management/device_credentials.py +++ /dev/null @@ -1,124 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class DeviceCredentials: - """Auth0 connection endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/device-credentials" - if id is not None: - return f"{url}/{id}" - return url - - def get( - self, - user_id: str, - client_id: str, - type: str, - fields: list[str] | None = None, - include_fields: bool = True, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - ): - """List device credentials. - - Args: - user_id (str): The user_id of the devices to retrieve. - - client_id (str): The client_id of the devices to retrieve. - - type (str): The type of credentials (public_key, refresh_token). - - fields (list, optional): A list of fields to include or exclude - (depending on include_fields) from the result. Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - page (int, optional): Page index of the results to return. First page is 0. - - per_page (int, optional): Number of results per page. - - include_totals (bool, optional): True to return results inside an object - that contains the total result count (True) or as a direct array of - results (False, default). - - See: https://auth0.com/docs/api/management/v2#!/Device_Credentials/get_device_credentials - """ - - params = { - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - "user_id": user_id, - "client_id": client_id, - "type": type, - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - } - return self.client.get(self._url(), params=params) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Create a device public key. - - Args: - body (dict): parameters for creating the public key (e.g: type, - device_name, client_id, etc). - - See: https://auth0.com/docs/api/v2#!/Device_Credentials/post_device_credentials - """ - return self.client.post(self._url(), data=body) - - def delete(self, id: str) -> Any: - """Delete credential. - - Args: - id (str): The id of the credential to delete. - - See: https://auth0.com/docs/api/management/v2#!/Device_Credentials/delete_device_credentials_by_id - """ - return self.client.delete(self._url(id)) diff --git a/auth0/management/email_templates.py b/auth0/management/email_templates.py deleted file mode 100644 index 64ccfc23..00000000 --- a/auth0/management/email_templates.py +++ /dev/null @@ -1,94 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class EmailTemplates: - """Auth0 email templates endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/email-templates" - if id is not None: - return f"{url}/{id}" - return url - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Create a new email template. - - Args: - body (dict): Attributes for the new email template. - - See: https://auth0.com/docs/api/management/v2#!/Email_Templates/post_email_templates - """ - - return self.client.post(self._url(), data=body) - - def get(self, template_name: str) -> dict[str, Any]: - """Retrieves an email template by its name. - - Args: - template_name (str): Name of the email template to get. - Must be one of: 'verify_email', 'reset_email', 'welcome_email', - 'blocked_account', 'stolen_credentials', 'enrollment_email', - 'change_password', 'password_reset', 'mfa_oob_code'. - - See: https://auth0.com/docs/api/management/v2#!/Email_Templates/get_email_templates_by_templateName - """ - - return self.client.get(self._url(template_name)) - - def update(self, template_name: str, body: dict[str, Any]) -> dict[str, Any]: - """Update an existing email template. - - Args: - template_name (str): Name of the email template to update. - Must be one of: 'verify_email', 'reset_email', 'welcome_email', - 'blocked_account', 'stolen_credentials', 'enrollment_email', - 'change_password', 'password_reset', 'mfa_oob_code'. - - body (dict): Attributes to update on the email template. - - See: https://auth0.com/docs/api/management/v2#!/Email_Templates/patch_email_templates_by_templateName - """ - - return self.client.patch(self._url(template_name), data=body) diff --git a/auth0/management/emails.py b/auth0/management/emails.py deleted file mode 100644 index 5a833b91..00000000 --- a/auth0/management/emails.py +++ /dev/null @@ -1,102 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Emails: - """Auth0 email endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/emails/provider" - if id is not None: - return f"{url}/{id}" - return url - - def get( - self, fields: list[str] | None = None, include_fields: bool = True - ) -> dict[str, Any]: - """Get the email provider. - - Args: - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2#!/Emails/get_provider - """ - params = { - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - } - - return self.client.get(self._url(), params=params) - - def config(self, body: dict[str, Any]) -> dict[str, Any]: - """Configure the email provider. - - Args: - body (dict): attributes of the created email provider. - - See: https://auth0.com/docs/api/v2#!/Emails/post_provider - """ - return self.client.post(self._url(), data=body) - - def delete(self) -> Any: - """Delete the email provider. (USE WITH CAUTION) - - See: https://auth0.com/docs/api/management/v2#!/Emails/delete_provider - """ - return self.client.delete(self._url()) - - def update(self, body: dict[str, Any]) -> dict[str, Any]: - """Update the email provider. - - Args: - body (dict): attributes to update on the email provider - - See: https://auth0.com/docs/api/v2#!/Emails/patch_provider - """ - return self.client.patch(self._url(), data=body) diff --git a/auth0/management/grants.py b/auth0/management/grants.py deleted file mode 100644 index a95d0def..00000000 --- a/auth0/management/grants.py +++ /dev/null @@ -1,100 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Grants: - """Auth0 grants endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/grants" - if id is not None: - return url + "/" + id - return url - - def all( - self, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - extra_params: dict[str, Any] | None = None, - ): - """Retrieves all grants. - - Args: - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to False. - - extra_params (dictionary, optional): The extra parameters to add to - the request. The page, per_page, and include_totals values - specified as parameters take precedence over the ones defined here. - - See: https://auth0.com/docs/api/management/v2#!/Grants/get_grants - """ - params = extra_params or {} - params.update( - { - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - } - ) - - return self.client.get(self._url(), params=params) - - def delete(self, id: str) -> Any: - """Deletes a grant. - - Args: - id (str): The id of the grant to delete. - - See: https://auth0.com/docs/api/management/v2#!/Grants/delete_grants_by_id - """ - url = self._url("%s" % (id)) - return self.client.delete(url) diff --git a/auth0/management/guardian.py b/auth0/management/guardian.py deleted file mode 100644 index 71c016ab..00000000 --- a/auth0/management/guardian.py +++ /dev/null @@ -1,173 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Guardian: - """Auth0 guardian endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/guardian" - if id is not None: - return f"{url}/{id}" - return url - - def all_factors(self) -> list[dict[str, Any]]: - """Retrieves all factors. Useful to check factor enablement and - trial status. - - See: https://auth0.com/docs/api/management/v2#!/Guardian/get_factors - """ - - return self.client.get(self._url("factors")) - - def update_factor(self, name: str, body: dict[str, Any]) -> dict[str, Any]: - """Update Guardian factor. - Useful to enable / disable factor. - - Args: - name (str): Either push-notification or sms. - - body (dict): Attributes to modify. - - See: https://auth0.com/docs/api/management/v2#!/Guardian/put_factors_by_name - """ - url = self._url(f"factors/{name}") - return self.client.put(url, data=body) - - def update_templates(self, body: dict[str, Any]) -> dict[str, Any]: - """Update enrollment and verification SMS templates. - - Useful to send custom messages on sms enrollment and verification. - - Args: - body (dict): Attributes to modify. - - See: https://auth0.com/docs/api/management/v2#!/Guardian/put_templates - """ - - return self.client.put(self._url("factors/sms/templates"), data=body) - - def get_templates(self) -> dict[str, Any]: - """Get enrollment and verification templates. - - Retrieve both templates. Useful to check if a different template than - default was set. - - See: https://auth0.com/docs/api/management/v2#!/Guardian/get_templates - """ - - return self.client.get(self._url("factors/sms/templates")) - - def get_enrollment(self, id: str) -> dict[str, Any]: - """Retrieves an enrollment. - Useful to check its type and related metadata. - - Args: - id (str): The id of the device account to update. - - See: https://auth0.com/docs/api/management/v2#!/Guardian/get_enrollments_by_id - """ - url = self._url(f"enrollments/{id}") - return self.client.get(url) - - def delete_enrollment(self, id: str) -> Any: - """Deletes an enrollment. - - Useful when you want to force re-enroll. - - Args: - id (str): The id of the device account to update. - - See: https://auth0.com/docs/api/management/v2#!/Guardian/delete_enrollments_by_id - """ - url = self._url(f"enrollments/{id}") - return self.client.delete(url) - - def create_enrollment_ticket(self, body: dict[str, Any]) -> dict[str, Any]: - """Creates an enrollment ticket for user_id - - A useful way to send an email to a user, with a link that lead to - start the enrollment process. - - Args: - body (dict): Details of the user to send the ticket to. - - See: https://auth0.com/docs/api/management/v2#!/Guardian/post_ticket - """ - return self.client.post(self._url("enrollments/ticket"), data=body) - - def get_factor_providers(self, factor_name: str, name: str) -> dict[str, Any]: - """Get Guardian SNS or SMS factor providers. - - Returns provider configuration. - - Args: - factor_name (str): Either push-notification or sms. - - name (str): Name of the provider. - - See: https://auth0.com/docs/api/management/v2#!/Guardian/get_sns - https://auth0.com/docs/api/management/v2#!/Guardian/get_twilio - """ - url = self._url(f"factors/{factor_name}/providers/{name}") - return self.client.get(url) - - def update_factor_providers( - self, factor_name: str, name: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Get Guardian factor providers. - - Returns provider configuration. - - Args: - factor_name (str): Either push-notification or sms. - - name (str): Name of the provider. - - body (dict): Details of the factor provider. - - See: https://auth0.com/docs/api/management/v2#!/Guardian/put_twilio - """ - url = self._url(f"factors/{factor_name}/providers/{name}") - return self.client.put(url, data=body) diff --git a/auth0/management/hooks.py b/auth0/management/hooks.py deleted file mode 100644 index 3c03aa5b..00000000 --- a/auth0/management/hooks.py +++ /dev/null @@ -1,196 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Hooks: - - """Hooks endpoint implementation. - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/hooks" - if id is not None: - return f"{url}/{id}" - return url - - def all( - self, - enabled: bool = True, - fields: list[str] | None = None, - include_fields: bool = True, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - ): - """Retrieves a list of all hooks. - - Args: - enabled (bool, optional): If provided, retrieves hooks that match - the value, otherwise all hooks are retrieved. - - fields (list, optional): A list of fields to include or exclude - (depending on include_fields) from the result, empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise - (defaults to true). - - page (int, optional): The result's page number (zero based). - - per_page (int, optional): The amount of entries per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. - - See: https://auth0.com/docs/api/management/v2#!/Hooks/get_hooks - """ - - params = { - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - } - - # since the default is True, this is here to disable the filter - if enabled is not None: - params["enabled"] = str(enabled).lower() - - return self.client.get(self._url(), params=params) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Creates a new Hook. - - Args: - body (dict): Attributes for the newly created hook, - See: https://auth0.com/docs/api/v2#!/Hooks/post_hooks - """ - return self.client.post(self._url(), data=body) - - def get(self, id: str, fields: list[str] | None = None) -> dict[str, Any]: - """Retrieves a hook by its ID. - - Args: - id (str): The id of the hook to retrieve. - - fields (list, optional): A list of fields to include or exclude - (depending on include_fields) from the result, empty to - retrieve all fields. - - See: https://auth0.com/docs/api/management/v2#!/Hooks/get_hooks_by_id - """ - params = { - "fields": fields and ",".join(fields) or None, - } - return self.client.get(self._url(id), params=params) - - def delete(self, id: str) -> Any: - """Deletes a hook. - - Args: - id (str): The id of the hook to delete. - - See: https://auth0.com/docs/api/management/v2#!/Hooks/delete_hooks_by_id - """ - return self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Updates an existing hook. - - Args: - id (str): The id of the hook to modify. - - body (dict): Attributes to modify. - - See: https://auth0.com/docs/api/v2#!/Hooks/patch_hooks_by_id - """ - return self.client.patch(self._url(id), data=body) - - def get_secrets(self, id: str) -> dict[str, Any]: - """Retrieves a hook's secrets. - - Args: - id (str): The id of the hook to retrieve secrets from. - - See: https://auth0.com/docs/api/management/v2#!/Hooks/get_secrets - """ - - return self.client.get(self._url("%s/secrets" % id)) - - def add_secrets(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Add one or more secrets for an existing hook. - - Args: - id (str): The id of the hook to add secrets to. - - body (dict): Dict of key-value pairs where the value must be a string. - - See: https://auth0.com/docs/api/management/v2#!/Hooks/post_secrets - """ - return self.client.post(self._url("%s/secrets" % id), data=body) - - def delete_secrets(self, id: str, body: list[str]) -> Any: - """Delete one or more existing secrets for an existing hook. - - Args: - id (str): The id of the hook to add secrets to. - - body (list): List of secret names to delete. - - See: https://auth0.com/docs/api/management/v2#!/Hooks/delete_secrets - """ - return self.client.delete(self._url("%s/secrets" % id), data=body) - - def update_secrets(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Update one or more existing secrets for an existing hook. - - Args: - id (str): The id of the hook to add secrets to. - - body (dict): Dict of key-value pairs where the value must be a string. - - See: https://auth0.com/docs/api/management/v2#!/Hooks/patch_secrets - """ - return self.client.patch(self._url("%s/secrets" % id), data=body) diff --git a/auth0/management/jobs.py b/auth0/management/jobs.py deleted file mode 100644 index 50f8975e..00000000 --- a/auth0/management/jobs.py +++ /dev/null @@ -1,141 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Jobs: - """Auth0 jobs endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, path: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/jobs" - if path is not None: - return f"{url}/{path}" - return url - - def get(self, id: str) -> dict[str, Any]: - """Retrieves a job. Useful to check its status. - - Args: - id (str): The id of the job. - - See: https://auth0.com/docs/api/management/v2#!/Jobs/get_jobs_by_id - """ - return self.client.get(self._url(id)) - - def get_failed_job(self, id: str) -> dict[str, Any]: - """Get failed job error details. - - Args: - id (str): The id of the job. - - See: https://auth0.com/docs/api/management/v2#!/Jobs/get_errors - """ - url = self._url(f"{id}/errors") - return self.client.get(url) - - def export_users(self, body: dict[str, Any]): - """Export all users to a file using a long running job. - - Check job status with get(). URL pointing to the export file will be - included in the status once the job is complete. - - Args: - body (dict): The details of the export users request. - - See: https://auth0.com/docs/api/management/v2#!/Jobs/post_users_exports - """ - return self.client.post(self._url("users-exports"), data=body) - - def import_users( - self, - connection_id: str, - file_obj: Any, - upsert: bool = False, - send_completion_email: bool = True, - external_id: str | None = None, - ) -> dict[str, Any]: - """Imports users to a connection from a file. - - Args: - connection_id (str): The connection id of the connection to which - users will be inserted. - - file_obj (file): A file-like object to upload. The format for - this file is explained in: https://auth0.com/docs/bulk-import. - - upsert (bool, optional): When set to False, pre-existing users that match on email address, user ID, or username - will fail. When set to True, pre-existing users that match on any of these fields will be updated, but - only with upsertable attributes. Defaults to False. - For a list of user profile fields that can be upserted during import, see the following article - https://auth0.com/docs/users/references/user-profile-structure#user-profile-attributes. - - send_completion_email (bool, optional): When set to True, an email will be sent to notify the completion of this job. - When set to False, no email will be sent. Defaults to True. - - external_id (str, optional): Customer-defined ID. - - See: https://auth0.com/docs/api/management/v2#!/Jobs/post_users_imports - """ - return self.client.file_post( - self._url("users-imports"), - data={ - "connection_id": connection_id, - "upsert": str(upsert).lower(), - "send_completion_email": str(send_completion_email).lower(), - "external_id": external_id, - }, - files={"users": file_obj}, - ) - - def send_verification_email(self, body: dict[str, Any]) -> dict[str, Any]: - """Send verification email. - - Send an email to the specified user that asks them to click a link to - verify their email address. - - Args: - body (dict): Details of verification email request. - - See: https://auth0.com/docs/api/v2#!/Jobs/post_verification_email - """ - return self.client.post(self._url("verification-email"), data=body) diff --git a/auth0/management/log_streams.py b/auth0/management/log_streams.py deleted file mode 100644 index 62a7b7e7..00000000 --- a/auth0/management/log_streams.py +++ /dev/null @@ -1,105 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class LogStreams: - """Auth0 log streams endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/log-streams" - if id is not None: - return f"{url}/{id}" - return url - - def list(self) -> list[dict[str, Any]]: - """Search log events. - - Args: - See: https://auth0.com/docs/api/management/v2/#!/Log_Streams/get_log_streams - """ - - return self.client.get(self._url()) - - def get(self, id: str) -> dict[str, Any]: - """Retrieves the data related to the log stream entry identified by id. - - Args: - id (str): The id of the log stream to retrieve. - - See: https://auth0.com/docs/api/management/v2/#!/Log_Streams/get_log_streams_by_id - """ - - return self.client.get(self._url(id)) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Creates a new log stream. - - Args: - body (dict): the attributes for the role to create. - - See: https://auth0.com/docs/api/management/v2/#!/Log_Streams/post_log_streams - """ - return self.client.post(self._url(), data=body) - - def delete(self, id: str) -> dict[str, Any]: - """Delete a log stream. - - Args: - id (str): The id of the log ste to delete. - - See: https://auth0.com/docs/api/management/v2/#!/Log_Streams/delete_log_streams_by_id - """ - return self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Update a log stream with the attributes passed in 'body' - - Args: - id (str): The id of the log stream to update. - - body (dict): the attributes to update on the log stream. - - See: https://auth0.com/docs/api/management/v2/#!/Log_Streams/patch_log_streams_by_id - """ - return self.client.patch(self._url(id), data=body) diff --git a/auth0/management/logs.py b/auth0/management/logs.py deleted file mode 100644 index 54164652..00000000 --- a/auth0/management/logs.py +++ /dev/null @@ -1,122 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Logs: - """Auth0 logs endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/logs" - if id is not None: - return f"{url}/{id}" - return url - - def search( - self, - page: int = 0, - per_page: int = 50, - sort: str | None = None, - q: str | None = None, - include_totals: bool = True, - fields: list[str] | None = None, - from_param: str | None = None, - take: int | None = None, - include_fields: bool = True, - ): - """Search log events. - - Args: - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 50 results per page. - - sort (str, optional): The field to use for sorting. - 1 == ascending and -1 == descending. (e.g: date:1) - When not set, the default value is up to the server. - - q (str, optional): Query in Lucene query string syntax. - - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - from_param (str, optional): Log Event Id to start retrieving logs. You can - limit the amount of logs using the take parameter. - - take (int, optional): The total amount of entries to retrieve when - using the from parameter. When not set, the default value is up to the server. - - See: https://auth0.com/docs/api/management/v2#!/Logs/get_logs - """ - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - "sort": sort, - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - "q": q, - "from": from_param, - "take": take, - } - return self.client.get(self._url(), params=params) - - def get(self, id: str) -> dict[str, Any]: - """Retrieves the data related to the log entry identified by id. - - Args: - id (str): The log_id of the log to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/Logs/get_logs_by_id - """ - - return self.client.get(self._url(id)) diff --git a/auth0/management/network_acls.py b/auth0/management/network_acls.py deleted file mode 100644 index ccc74589..00000000 --- a/auth0/management/network_acls.py +++ /dev/null @@ -1,138 +0,0 @@ -from __future__ import annotations - -from typing import Any, List # List is being used as list is already a method. - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class NetworkAcls: - """Auth0 Netwrok Acls endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/network-acls" - if id is not None: - return f"{url}/{id}" - return url - - def all( - self, - page: int = 0, - per_page: int = 25, - include_totals: bool = True, - ) -> List[dict[str, Any]]: - """List self-service profiles. - - Args: - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2/network-acls/get-network-acls - """ - - params = { - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - } - - return self.client.get(self._url(), params=params) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Create a new self-service profile. - - Args: - body (dict): Attributes for the new access control list. - - See: https://auth0.com/docs/api/management/v2/network-acls/post-network-acls - """ - - return self.client.post(self._url(), data=body) - - def get(self, id: str) -> dict[str, Any]: - """Get a self-service profile. - - Args: - id (str): The id of the access control list to retrieve. - - See: https://auth0.com/docs/api/management/v2/network-acls/get-network-acls-by-id - """ - - return self.client.get(self._url(id)) - - def delete(self, id: str) -> None: - """Delete a self-service profile. - - Args: - id (str): The id of the access control list to delete. - - See: https://auth0.com/docs/api/management/v2/network-acls/delete-network-acls-by-id - """ - - self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Update a access control list. - - Args: - id (str): The id of the access control list to update. - - body (dict): Attributes of the access control list to modify. - - See: https://auth0.com/docs/api/management/v2/network-acls/put-network-acls-by-id - """ - - return self.client.put(self._url(id), data=body) - - def update_partial(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Update partially the access control list. - - See: https://auth0.com/docs/api/management/v2/network-acls/patch-network-acls-by-id - """ - - return self.client.patch(self._url(id), data=body) - - \ No newline at end of file diff --git a/auth0/management/organizations.py b/auth0/management/organizations.py deleted file mode 100644 index 8da4f4c0..00000000 --- a/auth0/management/organizations.py +++ /dev/null @@ -1,532 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Organizations: - """Auth0 organizations endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, *args: str | None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/organizations" - for p in args: - if p is not None: - url = f"{url}/{p}" - return url - - # Organizations - def all_organizations( - self, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = True, - from_param: str | None = None, - take: int | None = None, - ): - """Retrieves a list of all the organizations. - - Args: - page (int): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - from_param (str, optional): Checkpoint Id from which to begin retrieving results. - You can limit the number of entries using the take parameter. - - take (int, optional): The total amount of entries to retrieve when - using the from parameter. When not set, the default value is up to the server. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/get_organizations - """ - - params = { - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - "from": from_param, - "take": take, - } - - return self.client.get(self._url(), params=params) - - def get_organization_by_name(self, name: str | None = None) -> dict[str, Any]: - """Retrieves an organization given its name. - - Args: - name (str): The name of the organization to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/get_name_by_name - """ - params = {} - - return self.client.get(self._url("name", name), params=params) - - def get_organization(self, id: str) -> dict[str, Any]: - """Retrieves an organization by its ID. - - Args: - id (str): Id of organization to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/get_organizations_by_id - """ - params = {} - - return self.client.get(self._url(id), params=params) - - def create_organization(self, body: dict[str, Any]) -> dict[str, Any]: - """Create a new organization. - - Args: - body (dict): Attributes for the new organization. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/post_organizations - """ - - return self.client.post(self._url(), data=body) - - def update_organization(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Modifies an organization. - - Args: - id (str): the ID of the organization. - - body (dict): Attributes to modify. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/patch_organizations_by_id - """ - - return self.client.patch(self._url(id), data=body) - - def delete_organization(self, id: str) -> Any: - """Deletes an organization and all its related assets. - - Args: - id (str): Id of organization to delete. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/delete_organizations_by_id - """ - - return self.client.delete(self._url(id)) - - # Organization Connections - def all_organization_connections( - self, id: str, page: int | None = None, per_page: int | None = None - ) -> list[dict[str, Any]]: - """Retrieves a list of all the organization connections. - - Args: - id (str): the ID of the organization. - - page (int): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/get_enabled_connections - """ - params = {"page": page, "per_page": per_page} - return self.client.get(self._url(id, "enabled_connections"), params=params) - - def get_organization_connection( - self, id: str, connection_id: str - ) -> dict[str, Any]: - """Retrieves an organization connection by its ID. - - Args: - id (str): the ID of the organization. - - connection_id (str): the ID of the connection. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/get_enabled_connections_by_connectionId - """ - params = {} - - return self.client.get( - self._url(id, "enabled_connections", connection_id), params=params - ) - - def create_organization_connection( - self, id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Adds a connection to an organization. - - Args: - id (str): the ID of the organization. - - body (dict): Attributes for the connection to add. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/post_enabled_connections - """ - - return self.client.post(self._url(id, "enabled_connections"), data=body) - - def update_organization_connection( - self, id: str, connection_id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Modifies an organization. - - Args: - id (str): the ID of the organization. - - connection_id (str): the ID of the connection to update. - - body (dict): Attributes to modify. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/patch_enabled_connections_by_connectionId - """ - - return self.client.patch( - self._url(id, "enabled_connections", connection_id), data=body - ) - - def delete_organization_connection(self, id: str, connection_id: str) -> Any: - """Deletes a connection from the given organization. - - Args: - id (str): Id of organization. - - connection_id (str): the ID of the connection to delete. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/delete_enabled_connections_by_connectionId - """ - - return self.client.delete(self._url(id, "enabled_connections", connection_id)) - - # Organization Members - def all_organization_members( - self, - id: str, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = True, - from_param: str | None = None, - take: int | None = None, - fields: list[str] | None = None, - include_fields: bool = True, - ): - """Retrieves a list of all the organization members. - - Member roles are not sent by default. Use `fields=roles` to retrieve the roles assigned to each listed member. - To use this parameter, you must include the `read:organization_member_roles scope` in the token. - - Args: - id (str): the ID of the organization. - - page (int): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - from_param (str, optional): Checkpoint Id from which to begin retrieving results. - You can limit the number of entries using the take parameter. - - take (int, optional): The total amount of entries to retrieve when - using the from parameter. When not set, the default value is up to the server. - - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). If fields is left blank, - all fields (except roles) are returned. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2/organizations/get-members - """ - - params = { - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - "from": from_param, - "take": take, - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - } - - return self.client.get(self._url(id, "members"), params=params) - - def create_organization_members( - self, id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Adds members to an organization. - - Args: - id (str): the ID of the organization. - - body (dict): Attributes from the members to add. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/post_members - """ - - return self.client.post(self._url(id, "members"), data=body) - - def delete_organization_members(self, id: str, body: dict[str, Any]) -> Any: - """Deletes members from the given organization. - - Args: - id (str): Id of organization. - - body (dict): Attributes from the members to delete - - See: https://auth0.com/docs/api/management/v2#!/Organizations/delete_members - """ - - return self.client.delete(self._url(id, "members"), data=body) - - # Organization Member Roles - def all_organization_member_roles( - self, - id: str, - user_id: str, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - ) -> list[dict[str, Any]]: - """Retrieves a list of all the roles from the given organization member. - - Args: - id (str): the ID of the organization. - - user_id (str): the ID of the user member of the organization. - - page (int): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to False. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/get_organization_member_roles - """ - params = { - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower() - } - return self.client.get( - self._url(id, "members", user_id, "roles"), params=params - ) - - def create_organization_member_roles( - self, id: str, user_id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Adds roles to a member of an organization. - - Args: - id (str): the ID of the organization. - - user_id (str): the ID of the user member of the organization. - - body (dict): Attributes from the members to add. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/post_organization_member_roles - """ - - return self.client.post(self._url(id, "members", user_id, "roles"), data=body) - - def delete_organization_member_roles( - self, id: str, user_id: str, body: dict[str, Any] - ) -> Any: - """Deletes roles from a member of an organization. - - Args: - id (str): Id of organization. - - user_id (str): the ID of the user member of the organization. - - body (dict): Attributes from the members to delete - - See: https://auth0.com/docs/api/management/v2#!/Organizations/delete_organization_member_roles - """ - - return self.client.delete(self._url(id, "members", user_id, "roles"), data=body) - - # Organization Invitations - def all_organization_invitations( - self, - id: str, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - ): - """Retrieves a list of all the organization invitations. - - Args: - id (str): the ID of the organization. - - page (int): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to False. - NOTE: returns start and limit, total count is not yet supported - - See: https://auth0.com/docs/api/management/v2#!/Organizations/get_invitations - """ - params = { - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - } - - return self.client.get(self._url(id, "invitations"), params=params) - - def get_organization_invitation(self, id: str, invitaton_id: str) -> dict[str, Any]: - """Retrieves an organization invitation by its ID. - - Args: - id (str): the ID of the organization. - - invitaton_id (str): the ID of the invitation. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/get_invitations_by_invitation_id - """ - params = {} - - return self.client.get( - self._url(id, "invitations", invitaton_id), params=params - ) - - def create_organization_invitation( - self, id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Create an invitation to an organization. - - Args: - id (str): the ID of the organization. - - body (dict): Attributes for the invitation to create. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/post_invitations - """ - - return self.client.post(self._url(id, "invitations"), data=body) - - def delete_organization_invitation(self, id: str, invitation_id: str) -> Any: - """Deletes an invitation from the given organization. - - Args: - id (str): Id of organization. - - invitation_id (str): the ID of the invitation to delete. - - See: https://auth0.com/docs/api/management/v2#!/Organizations/delete_invitations_by_invitation_id - """ - - return self.client.delete(self._url(id, "invitations", invitation_id)) - - def get_client_grants( - self, - id: str, - audience: str | None = None, - client_id: str | None = None, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - ): - """Get client grants associated to an organization. - - Args: - id (str): Id of organization. - - audience (str, optional): URL encoded audience of a Resource Server - to filter. - - client_id (string, optional): The id of a client to filter. - - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to False. - """ - params = { - "audience": audience, - "client_id": client_id, - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - } - - return self.client.get(self._url(id, "client-grants"), params=params) - - def add_client_grant(self, id: str, grant_id: str) -> dict[str, Any]: - """Associate a client grant with an organization. - - Args: - id (str): the ID of the organization. - - grant_id (string) A Client Grant ID to add to the organization. - """ - - return self.client.post( - self._url(id, "client-grants"), data={"grant_id": grant_id} - ) - - def delete_client_grant(self, id: str, grant_id: str) -> dict[str, Any]: - """Remove a client grant from an organization. - - Args: - id (str): the ID of the organization. - - grant_id (string) A Client Grant ID to remove from the organization. - """ - - return self.client.delete(self._url(id, "client-grants", grant_id)) diff --git a/auth0/management/prompts.py b/auth0/management/prompts.py deleted file mode 100644 index 29fa07be..00000000 --- a/auth0/management/prompts.py +++ /dev/null @@ -1,99 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Prompts: - """Auth0 prompts endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, prompt: str | None = None, language: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/prompts" - if prompt is not None and language is not None: - return f"{url}/{prompt}/custom-text/{language}" - return url - - def get(self) -> dict[str, Any]: - """Retrieves prompts settings. - - See: https://auth0.com/docs/api/management/v2#!/Prompts/get_prompts - """ - - return self.client.get(self._url()) - - def update(self, body: dict[str, Any]) -> dict[str, Any]: - """Updates prompts settings. - - See: https://auth0.com/docs/api/management/v2#!/Prompts/patch_prompts - """ - - return self.client.patch(self._url(), data=body) - - def get_custom_text(self, prompt: str, language: str): - """Retrieves custom text for a prompt in a specific language. - - Args: - prompt (str): Name of the prompt. - - language (str): Language to update. - - See: https://auth0.com/docs/api/management/v2#!/Prompts/get_custom_text_by_language - """ - - return self.client.get(self._url(prompt, language)) - - def update_custom_text( - self, prompt: str, language: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Updates custom text for a prompt in a specific language. - - Args: - prompt (str): Name of the prompt. - - language (str): Language to update. - - body (dict): An object containing custom dictionaries for a group of screens. - - See: https://auth0.com/docs/api/management/v2#!/Prompts/put_custom_text_by_language - """ - - return self.client.put(self._url(prompt, language), data=body) diff --git a/auth0/management/resource_servers.py b/auth0/management/resource_servers.py deleted file mode 100644 index a71d1378..00000000 --- a/auth0/management/resource_servers.py +++ /dev/null @@ -1,131 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class ResourceServers: - """Auth0 resource servers endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/resource-servers" - if id is not None: - return f"{url}/{id}" - return url - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Create a new resource server. - - Args: - body (dict): Attributes for the new resource Server. - - See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/post_resource_servers - """ - - return self.client.post(self._url(), data=body) - - def get_all( - self, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - ): - """Retrieves all resource servers - - Args: - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to False. - - - See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/get_resource_servers - """ - - params = { - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - } - - return self.client.get(self._url(), params=params) - - def get(self, id: str) -> dict[str, Any]: - """Retrieves a resource server by its id. - - Args: - id (str): id of the resource server to get. - - - See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/get_resource_servers_by_id - """ - - return self.client.get(self._url(id)) - - def delete(self, id: str) -> Any: - """Deletes a resource server. - - Args: - id (str): Id of resource server to delete. - - - See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/delete_resource_servers_by_id - """ - - return self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Modifies a resource server. - - Args: - id (str): The id of the resource server to update. - - body (dict): Attributes to modify. - - See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/patch_resource_servers_by_id - """ - - return self.client.patch(self._url(id), data=body) diff --git a/auth0/management/roles.py b/auth0/management/roles.py deleted file mode 100644 index ca33430c..00000000 --- a/auth0/management/roles.py +++ /dev/null @@ -1,240 +0,0 @@ -from __future__ import annotations - -from typing import Any, List # List is being used as list is already a method. - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Roles: - """Auth0 roles endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/roles" - if id is not None: - return f"{url}/{id}" - return url - - def list( - self, - page: int = 0, - per_page: int = 25, - include_totals: bool = True, - name_filter: str | None = None, - ): - """List or search roles. - - Args: - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - name_filter (str, optional): A case-insensitive filter to apply - to search for roles by name. - - See: https://auth0.com/docs/api/management/v2#!/Roles/get_roles - """ - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - "name_filter": name_filter, - } - return self.client.get(self._url(), params=params) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Creates a new role. - - Args: - body (dict): the attributes for the role to create. - - See: https://auth0.com/docs/api/v2#!/Roles/post_roles - """ - return self.client.post(self._url(), data=body) - - def get(self, id: str) -> dict[str, Any]: - """Get a role. - - Args: - id (str): The id of the role to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/Roles/get_roles_by_id - """ - - return self.client.get(self._url(id)) - - def delete(self, id: str) -> Any: - """Delete a role. - - Args: - id (str): The id of the role to delete. - - See: https://auth0.com/docs/api/management/v2#!/Roles/delete_roles_by_id - """ - return self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Update a role with the attributes passed in 'body' - - Args: - id (str): The id of the role to update. - - body (dict): the attributes to update on the role. - - See: https://auth0.com/docs/api/management/v2#!/Roles/patch_roles_by_id - """ - return self.client.patch(self._url(id), data=body) - - def list_users( - self, - id: str, - page: int = 0, - per_page: int = 25, - include_totals: bool = True, - from_param: str | None = None, - take: int | None = None, - ): - """List the users that have been associated with a given role. - - Args: - id (str): The role's id. - - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - from_param (str, optional): Checkpoint Id from which to begin retrieving results. - You can limit the number of entries using the take parameter. - - take (int, optional): The total amount of entries to retrieve when - using the from parameter. When not set, the default value is up to the server. - - See https://auth0.com/docs/api/management/v2#!/Roles/get_role_user - """ - - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - "from": from_param, - "take": take, - } - - url = self._url(f"{id}/users") - return self.client.get(url, params=params) - - def add_users(self, id: str, users: List[str]) -> dict[str, Any]: - """Assign users to a role. - - Args: - id (str): The role's id. - - users (list of str): A list of users ids to add to this role. - - See https://auth0.com/docs/api/management/v2#!/Roles/post_role_users - """ - url = self._url(f"{id}/users") - body = {"users": users} - return self.client.post(url, data=body) - - def list_permissions( - self, id: str, page: int = 0, per_page: int = 25, include_totals: bool = True - ): - """List the permissions associated to a role. - - Args: - id (str): The role's id. - - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - See https://auth0.com/docs/api/management/v2#!/Roles/get_role_permission - """ - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - } - url = self._url(f"{id}/permissions") - return self.client.get(url, params=params) - - def remove_permissions(self, id: str, permissions: List[dict[str, str]]) -> Any: - """Unassociates permissions from a role. - - Args: - id (str): The role's id. - - permissions (list of str): A list of permission ids to unassociate from the role. - - See https://auth0.com/docs/api/management/v2#!/Roles/delete_role_permission_assignment - """ - url = self._url(f"{id}/permissions") - body = {"permissions": permissions} - return self.client.delete(url, data=body) - - def add_permissions(self, id: str, permissions: List[dict[str, str]]) -> dict[str, Any]: - """Associates permissions with a role. - - Args: - id (str): The role's id. - - permissions (list of str): A list of permission ids to associate to the role. - - See https://auth0.com/docs/api/management/v2#!/Roles/post_role_permission_assignment - """ - url = self._url(f"{id}/permissions") - body = {"permissions": permissions} - return self.client.post(url, data=body) diff --git a/auth0/management/rules.py b/auth0/management/rules.py deleted file mode 100644 index 9b0b5d14..00000000 --- a/auth0/management/rules.py +++ /dev/null @@ -1,161 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Rules: - """Rules endpoint implementation. - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/rules" - if id is not None: - return f"{url}/{id}" - return url - - def all( - self, - stage: str = "login_success", - enabled: bool = True, - fields: list[str] | None = None, - include_fields: bool = True, - page: int | None = None, - per_page: int | None = None, - include_totals: bool = False, - ): - """Retrieves a list of all rules. - - Args: - stage (str, optional): Retrieves rules that match the execution stage. - Defaults to login_success. - - enabled (bool, optional): If provided, retrieves rules that match - the value, otherwise all rules are retrieved. - - fields (list, optional): A list of fields to include or exclude - (depending on include_fields) from the result. Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - page (int, optional): The result's page number (zero based). When not set, - the default value is up to the server. - - per_page (int, optional): The amount of entries per page. When not set, - the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to False. - - See: https://auth0.com/docs/api/management/v2#!/Rules/get_rules - """ - - params = { - "stage": stage, - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - } - - # since the default is True, this is here to disable the filter - if enabled is not None: - params["enabled"] = str(enabled).lower() - - return self.client.get(self._url(), params=params) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Creates a new rule. - - Args: - body (dict): Attributes for the newly created rule. - - See: https://auth0.com/docs/api/v2#!/Rules/post_rules - """ - return self.client.post(self._url(), data=body) - - def get( - self, id: str, fields: list[str] | None = None, include_fields: bool = True - ) -> dict[str, Any]: - """Retrieves a rule by its ID. - - Args: - id (str): The id of the rule to retrieve. - - fields (list, optional): A list of fields to include or exclude - (depending on include_fields) from the result. Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2#!/Rules/get_rules_by_id - """ - params = { - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - } - return self.client.get(self._url(id), params=params) - - def delete(self, id: str) -> Any: - """Delete a rule. - - Args: - id (str): The id of the rule to delete. - - See: https://auth0.com/docs/api/management/v2#!/Rules/delete_rules_by_id - """ - return self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Update an existing rule - - Args: - id (str): The id of the rule to modify. - - body (dict): Attributes to modify. - - See: https://auth0.com/docs/api/v2#!/Rules/patch_rules_by_id - """ - return self.client.patch(self._url(id), data=body) diff --git a/auth0/management/rules_configs.py b/auth0/management/rules_configs.py deleted file mode 100644 index 669f62aa..00000000 --- a/auth0/management/rules_configs.py +++ /dev/null @@ -1,84 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class RulesConfigs: - """RulesConfig endpoint implementation. - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/rules-configs" - if id is not None: - return url + "/" + id - return url - - def all(self) -> list[dict[str, Any]]: - """Lists the config variable keys for rules. - - See: https://auth0.com/docs/api/management/v2#!/Rules_Configs/get_rules_configs - """ - return self.client.get(self._url()) - - def unset(self, key: str) -> Any: - """Removes the rules config for a given key. - - Args: - key (str): rules config key to remove. - - See: https://auth0.com/docs/api/management/v2#!/Rules_Configs/delete_rules_configs_by_key - """ - return self.client.delete(self._url(key)) - - def set(self, key: str, value: str) -> dict[str, Any]: - """Sets the rules config for a given key. - - Args: - key (str): rules config key to set. - - value (str): value to set for the rules config key. - - See: https://auth0.com/docs/api/management/v2#!/Rules_Configs/put_rules_configs_by_key - """ - url = self._url(f"{key}") - body = {"value": value} - return self.client.put(url, data=body) diff --git a/auth0/management/self_service_profiles.py b/auth0/management/self_service_profiles.py deleted file mode 100644 index a9a52610..00000000 --- a/auth0/management/self_service_profiles.py +++ /dev/null @@ -1,180 +0,0 @@ -from __future__ import annotations - -from typing import Any, List # List is being used as list is already a method. - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class SelfServiceProfiles: - """Auth0 Self Service Profiles endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, profile_id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/self-service-profiles" - if profile_id is not None: - return f"{url}/{profile_id}" - return url - - def all( - self, - page: int = 0, - per_page: int = 25, - include_totals: bool = True, - ) -> List[dict[str, Any]]: - """List self-service profiles. - - Args: - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2/self-service-profiles/get-self-service-profiles - """ - - params = { - "page": page, - "per_page": per_page, - "include_totals": str(include_totals).lower(), - } - - return self.client.get(self._url(), params=params) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Create a new self-service profile. - - Args: - body (dict): Attributes for the new self-service profile. - - See: https://auth0.com/docs/api/management/v2/self-service-profiles/post-self-service-profiles - """ - - return self.client.post(self._url(), data=body) - - def get(self, profile_id: str) -> dict[str, Any]: - """Get a self-service profile. - - Args: - id (str): The id of the self-service profile to retrieve. - - See: https://auth0.com/docs/api/management/v2/self-service-profiles/get-self-service-profiles-by-id - """ - - return self.client.get(self._url(profile_id)) - - def delete(self, profile_id: str) -> None: - """Delete a self-service profile. - - Args: - id (str): The id of the self-service profile to delete. - - See: https://auth0.com/docs/api/management/v2/self-service-profiles/delete-self-service-profiles-by-id - """ - - self.client.delete(self._url(profile_id)) - - def update(self, profile_id: str, body: dict[str, Any]) -> dict[str, Any]: - """Update a self-service profile. - - Args: - id (str): The id of the self-service profile to update. - - body (dict): Attributes of the self-service profile to modify. - - See: https://auth0.com/docs/api/management/v2/self-service-profiles/patch-self-service-profiles-by-id - """ - - return self.client.patch(self._url(profile_id), data=body) - - def get_custom_text( - self, profile_id: str, language: str, page: str - ) -> dict[str, Any]: - """Get the custom text for a self-service profile. - - See: https://auth0.com/docs/api/management/v2/self-service-profiles/get-self-service-profile-custom-text - """ - - url = self._url(f"{profile_id}/custom-text/{language}/{page}") - return self.client.get(url) - - def update_custom_text( - self, profile_id: str, language: str, page: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Update the custom text for a self-service profile. - - See: https://auth0.com/docs/api/management/v2/self-service-profiles/put-self-service-profile-custom-text - """ - - url = self._url(f"{profile_id}/custom-text/{language}/{page}") - return self.client.put(url, data=body) - - def create_sso_ticket( - self, profile_id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Create a single sign-on ticket for a self-service profile. - - Args: - id (str): The id of the self-service profile to create the ticket for. - - body (dict): Attributes for the single sign-on ticket. - - See: https://auth0.com/docs/api/management/v2/self-service-profiles/post-sso-ticket - """ - - url = self._url(f"{profile_id}/sso-ticket") - return self.client.post(url, data=body) - - def revoke_sso_ticket(self, profile_id: str, ticket_id: str) -> None: - """Revoke a single sign-on ticket for a self-service profile. - - Args: - id (str): The id of the self-service profile to revoke the ticket from. - - ticket (str): The ticket to revoke. - - See: https://auth0.com/docs/api/management/v2/self-service-profiles/post-revoke - """ - - url = self._url(f"{profile_id}/sso-ticket/{ticket_id}/revoke") - self.client.post(url) \ No newline at end of file diff --git a/auth0/management/stats.py b/auth0/management/stats.py deleted file mode 100644 index 486f4408..00000000 --- a/auth0/management/stats.py +++ /dev/null @@ -1,79 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Stats: - """Auth0 stats endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, action: str) -> str: - return f"{self.protocol}://{self.domain}/api/v2/stats/{action}" - - def active_users(self) -> int: - """Gets the active users count (logged in during the last 30 days). - - Returns: An integer. - - See: https://auth0.com/docs/api/management/v2#!/Stats/get_active_users - """ - - return self.client.get(self._url("active-users")) - - def daily_stats( - self, from_date: str | None = None, to_date: str | None = None - ) -> list[dict[str, Any]]: - """Gets the daily stats for a particular period. - - Args: - from_date (str, optional): The first day of the period (inclusive) in - YYYYMMDD format. - - to_date (str, optional): The last day of the period (inclusive) in - YYYYMMDD format. - - See: https://auth0.com/docs/api/management/v2#!/Stats/get_daily - """ - - return self.client.get( - self._url("daily"), params={"from": from_date, "to": to_date} - ) diff --git a/auth0/management/tenants.py b/auth0/management/tenants.py deleted file mode 100644 index b2f39867..00000000 --- a/auth0/management/tenants.py +++ /dev/null @@ -1,83 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Tenants: - """Auth0 tenants endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self) -> str: - return f"{self.protocol}://{self.domain}/api/v2/tenants/settings" - - def get( - self, fields: list[str] | None = None, include_fields: bool = True - ) -> dict[str, Any]: - """Get tenant settings. - - Args: - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2#!/Tenants/get_settings - """ - - params = { - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - } - - return self.client.get(self._url(), params=params) - - def update(self, body: dict[str, Any]) -> dict[str, Any]: - """Update tenant settings. - - Args: - body (dict): the attributes to update in the tenant. - - See: https://auth0.com/docs/api/v2#!/Tenants/patch_settings - """ - return self.client.patch(self._url(), data=body) diff --git a/auth0/management/tickets.py b/auth0/management/tickets.py deleted file mode 100644 index f44e44e0..00000000 --- a/auth0/management/tickets.py +++ /dev/null @@ -1,70 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Tickets: - """Auth0 tickets endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, action: str) -> str: - return f"{self.protocol}://{self.domain}/api/v2/tickets/{action}" - - def create_email_verification(self, body: dict[str, Any]) -> dict[str, Any]: - """Create an email verification ticket. - - Args: - body (dict): attributes to set on the email verification request. - - See: https://auth0.com/docs/api/v2#!/Tickets/post_email_verification - """ - return self.client.post(self._url("email-verification"), data=body) - - def create_pswd_change(self, body: dict[str, Any]) -> dict[str, Any]: - """Create password change ticket. - - Args: - body (dict): attributes to set on the password change request. - - See: https://auth0.com/docs/api/v2#!/Tickets/post_password_change - """ - return self.client.post(self._url("password-change"), data=body) diff --git a/auth0/management/user_blocks.py b/auth0/management/user_blocks.py deleted file mode 100644 index 279dc5d9..00000000 --- a/auth0/management/user_blocks.py +++ /dev/null @@ -1,101 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class UserBlocks: - """Auth0 user blocks endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/user-blocks" - if id is not None: - return f"{url}/{id}" - return url - - def get_by_identifier(self, identifier: str) -> dict[str, Any]: - """Gets blocks by identifier - - Args: - identifier (str): Should be any of: username, phone_number, email. - - See: https://auth0.com/docs/api/management/v2#!/User_Blocks/get_user_blocks - """ - - params = {"identifier": identifier} - - return self.client.get(self._url(), params=params) - - def unblock_by_identifier(self, identifier: dict[str, Any]) -> Any: - """Unblocks by identifier - - Args: - identifier (str): Should be any of: username, phone_number, email. - - See: https://auth0.com/docs/api/management/v2#!/User_Blocks/delete_user_blocks - """ - - params = {"identifier": identifier} - - return self.client.delete(self._url(), params=params) - - def get(self, id: str) -> dict[str, Any]: - """Get a user's blocks - - Args: - id (str): The user_id of the user to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/User_Blocks/get_user_blocks_by_id - """ - - return self.client.get(self._url(id)) - - def unblock(self, id: str) -> Any: - """Unblock a user - - Args: - id (str): The user_id of the user to update. - - See: https://auth0.com/docs/api/management/v2#!/User_Blocks/delete_user_blocks_by_id - """ - - return self.client.delete(self._url(id)) diff --git a/auth0/management/users.py b/auth0/management/users.py deleted file mode 100644 index 2fd9a46a..00000000 --- a/auth0/management/users.py +++ /dev/null @@ -1,583 +0,0 @@ -from __future__ import annotations - -from typing import Any, List # List is being used as list is already a method. - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class Users: - """Auth0 users endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self, id: str | None = None) -> str: - url = f"{self.protocol}://{self.domain}/api/v2/users" - if id is not None: - return f"{url}/{id}" - return url - - def list( - self, - page: int = 0, - per_page: int = 25, - sort: str | None = None, - connection: str | None = None, - q: str | None = None, - search_engine: str | None = None, - include_totals: bool = True, - fields: List[str] | None = None, - include_fields: bool = True, - ): - """List or search users. - - Args: - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - sort (str, optional): The field to use for sorting. - 1 == ascending and -1 == descending. (e.g: email:1) - When not set, the default value is up to the server. - - connection (str, optional): Connection filter. - - q (str, optional): Query in Lucene query string syntax. Only fields - in app_metadata, user_metadata or the normalized user profile - are searchable. - - search_engine (str, optional): The version of the search_engine to use - when querying for users. Will default to the latest version available. - See: https://auth0.com/docs/users/search. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be include in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2#!/Users/get_users - """ - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - "sort": sort, - "connection": connection, - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - "q": q, - "search_engine": search_engine, - } - return self.client.get(self._url(), params=params) - - def create(self, body: dict[str, Any]) -> dict[str, Any]: - """Creates a new user. - - Args: - body (dict): the attributes to set on the user to create. - - See: https://auth0.com/docs/api/v2#!/Users/post_users - """ - return self.client.post(self._url(), data=body) - - def get( - self, id: str, fields: List[str] | None = None, include_fields: bool = True - ) -> dict[str, Any]: - """Get a user. - - Args: - id (str): The user_id of the user to retrieve. - - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be included in the result, False otherwise. Defaults to True. - - See: https://auth0.com/docs/api/management/v2#!/Users/get_users_by_id - """ - params = { - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - } - - return self.client.get(self._url(id), params=params) - - def delete(self, id: str) -> Any: - """Delete a user. - - Args: - id (str): The user_id of the user to delete. - - See: https://auth0.com/docs/api/management/v2#!/Users/delete_users_by_id - """ - return self.client.delete(self._url(id)) - - def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]: - """Update a user with the attributes passed in 'body' - - Args: - id (str): The user_id of the user to update. - - body (dict): The attributes of the user to update. - - See: https://auth0.com/docs/api/v2#!/Users/patch_users_by_id - """ - return self.client.patch(self._url(id), data=body) - - def list_organizations( - self, id: str, page: int = 0, per_page: int = 25, include_totals: bool = True - ): - """List the organizations that the user is member of. - - Args: - id (str): The user's id. - - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - See https://auth0.com/docs/api/management/v2#!/Users/get_organizations - """ - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - } - - url = self._url(f"{id}/organizations") - return self.client.get(url, params=params) - - def list_roles( - self, id: str, page: int = 0, per_page: int = 25, include_totals: bool = True - ): - """List the roles associated with a user. - - Args: - id (str): The user's id. - - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - See https://auth0.com/docs/api/management/v2#!/Users/get_user_roles - """ - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - } - - url = self._url(f"{id}/roles") - return self.client.get(url, params=params) - - def remove_roles(self, id: str, roles: List[str]) -> Any: - """Removes an array of roles from a user. - - Args: - id (str): The user's id. - - roles (list of str): A list of roles ids to unassociate from the user. - - See https://auth0.com/docs/api/management/v2#!/Users/delete_user_roles - """ - url = self._url(f"{id}/roles") - body = {"roles": roles} - return self.client.delete(url, data=body) - - def add_roles(self, id: str, roles: List[str]) -> dict[str, Any]: - """Associate an array of roles with a user. - - Args: - id (str): The user's id. - - roles (list of str): A list of roles ids to associated with the user. - - See https://auth0.com/docs/api/management/v2#!/Users/post_user_roles - """ - url = self._url(f"{id}/roles") - body = {"roles": roles} - return self.client.post(url, data=body) - - def list_permissions( - self, id: str, page: int = 0, per_page: int = 25, include_totals: bool = True - ): - """List the permissions associated to the user. - - Args: - id (str): The user's id. - - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - See https://auth0.com/docs/api/management/v2#!/Users/get_permissions - """ - - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - } - url = self._url(f"{id}/permissions") - return self.client.get(url, params=params) - - def remove_permissions(self, id: str, permissions: List[str]) -> Any: - """Removes permissions from a user. - - Args: - id (str): The user's id. - - permissions (list of str): A list of permission ids to unassociate from the user. - - See https://auth0.com/docs/api/management/v2#!/Users/delete_permissions - """ - url = self._url(f"{id}/permissions") - body = {"permissions": permissions} - return self.client.delete(url, data=body) - - def add_permissions(self, id: str, permissions: List[str]) -> dict[str, Any]: - """Assign permissions to a user. - - Args: - id (str): The user's id. - - permissions (list of str): A list of permission ids to associated with the user. - - See https://auth0.com/docs/api/management/v2#!/Users/post_permissions - """ - url = self._url(f"{id}/permissions") - body = {"permissions": permissions} - return self.client.post(url, data=body) - - def delete_multifactor(self, id: str, provider: str) -> Any: - """Delete a user's multifactor provider. - - Args: - id (str): The user's id. - - provider (str): The multifactor provider. Supported values 'duo' - or 'google-authenticator'. - - See: https://auth0.com/docs/api/management/v2#!/Users/delete_multifactor_by_provider - """ - url = self._url(f"{id}/multifactor/{provider}") - return self.client.delete(url) - - def delete_authenticators(self, id: str) -> Any: - """Delete a user's MFA enrollments. - - Args: - id (str): The user's id. - - See: https://auth0.com/docs/api/management/v2#!/Users/delete_authenticators - """ - url = self._url(f"{id}/authenticators") - return self.client.delete(url) - - def unlink_user_account(self, id: str, provider: str, user_id: str) -> Any: - """Unlink a user account - - Args: - id (str): The user_id of the user identity. - - provider (str): The type of identity provider (e.g: facebook). - - user_id (str): The unique identifier for the user for the identity. - - See: https://auth0.com/docs/api/management/v2#!/Users/delete_user_identity_by_user_id - """ - url = self._url(f"{id}/identities/{provider}/{user_id}") - return self.client.delete(url) - - def link_user_account(self, user_id: str, body: dict[str, Any]) -> list[dict[str, Any]]: - """Link user accounts. - - Links the account specified in the body (secondary account) to the - account specified by the id param of the URL (primary account). - - Args: - id (str): The user_id of the primary identity where you are linking - the secondary account to. - - body (dict): the attributes to send as part of this request. - - See: https://auth0.com/docs/api/v2#!/Users/post_identities - """ - url = self._url(f"{user_id}/identities") - return self.client.post(url, data=body) - - def regenerate_recovery_code(self, user_id: str) -> dict[str, Any]: - """Removes the current recovery token, generates and returns a new one - - Args: - user_id (str): The user_id of the user identity. - - See: https://auth0.com/docs/api/management/v2#!/Users/post_recovery_code_regeneration - """ - url = self._url(f"{user_id}/recovery-code-regeneration") - return self.client.post(url) - - def get_guardian_enrollments(self, user_id: str) -> dict[str, Any]: - """Retrieve the first confirmed Guardian enrollment for a user. - - Args: - user_id (str): The user_id of the user to retrieve. - - See: https://auth0.com/docs/api/management/v2#!/Users/get_enrollments - """ - url = self._url(f"{user_id}/enrollments") - return self.client.get(url) - - def get_log_events( - self, - user_id: str, - page: int = 0, - per_page: int = 50, - sort: str | None = None, - include_totals: bool = False, - ): - """Retrieve every log event for a specific user id. - - Args: - user_id (str): The user_id of the logs to retrieve. - - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 50 results per page. - - sort (str, optional): The field to use for sorting. Use field:order - where order is 1 for ascending and -1 for descending. - For example date:-1 - When not set, the default value is up to the server. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to False. - - See: https://auth0.com/docs/api/management/v2#!/Users/get_logs_by_user - """ - - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - "sort": sort, - } - - url = self._url(f"{user_id}/logs") - return self.client.get(url, params=params) - - def invalidate_remembered_browsers(self, user_id: str) -> dict[str, Any]: - """Invalidate all remembered browsers across all authentication factors for a user. - - Args: - user_id (str): The user_id to invalidate remembered browsers for. - - See: https://auth0.com/docs/api/management/v2#!/Users/post_invalidate_remember_browser - """ - - url = self._url(f"{user_id}/multifactor/actions/invalidate-remember-browser") - return self.client.post(url) - - def get_authentication_methods(self, user_id: str) -> dict[str, Any]: - """Gets a list of authentication methods - - Args: - user_id (str): The user_id to get a list of authentication methods for. - - See: https://auth0.com/docs/api/management/v2#!/Users/get_authentication_methods - """ - - url = self._url(f"{user_id}/authentication-methods") - return self.client.get(url) - - def get_authentication_method_by_id( - self, user_id: str, authentication_method_id: str - ) -> dict[str, Any]: - """Gets an authentication method by ID. - - Args: - user_id (str): The user_id to get an authentication method by ID for. - authentication_method_id (str): The authentication_method_id to get an authentication method by ID for. - - See: https://auth0.com/docs/api/management/v2#!/Users/get_authentication_methods_by_authentication_method_id - """ - - url = self._url(f"{user_id}/authentication-methods/{authentication_method_id}") - return self.client.get(url) - - def create_authentication_method( - self, user_id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Creates an authentication method for a given user. - - Args: - user_id (str): The user_id to create an authentication method for a given user. - body (dict): the request body to create an authentication method for a given user. - - See: https://auth0.com/docs/api/management/v2#!/Users/post_authentication_methods - """ - - url = self._url(f"{user_id}/authentication-methods") - return self.client.post(url, data=body) - - def update_authentication_methods( - self, user_id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Updates all authentication methods for a user by replacing them with the given ones. - - Args: - user_id (str): The user_id to update all authentication methods for. - body (dict): the request body to update all authentication methods with. - - See: https://auth0.com/docs/api/management/v2#!/Users/put_authentication_methods - """ - - url = self._url(f"{user_id}/authentication-methods") - return self.client.put(url, data=body) - - def update_authentication_method_by_id( - self, user_id: str, authentication_method_id: str, body: dict[str, Any] - ) -> dict[str, Any]: - """Updates an authentication method. - - Args: - user_id (str): The user_id to update an authentication method. - authentication_method_id (str): The authentication_method_id to update an authentication method for. - body (dict): the request body to update an authentication method. - - See: https://auth0.com/docs/api/management/v2#!/Users/patch_authentication_methods_by_authentication_method_id - """ - - url = self._url(f"{user_id}/authentication-methods/{authentication_method_id}") - return self.client.patch(url, data=body) - - def delete_authentication_methods(self, user_id: str) -> Any: - """Deletes all authentication methods for the given user. - - Args: - user_id (str): The user_id to delete all authentication methods for the given user for. - - See: https://auth0.com/docs/api/management/v2#!/Users/delete_authentication_methods - """ - - url = self._url(f"{user_id}/authentication-methods") - return self.client.delete(url) - - def delete_authentication_method_by_id( - self, user_id: str, authentication_method_id: str - ) -> Any: - """Deletes an authentication method by ID. - - Args: - user_id (str): The user_id to delete an authentication method by ID for. - authentication_method_id (str): The authentication_method_id to delete an authentication method by ID for. - - See: https://auth0.com/docs/api/management/v2#!/Users/delete_authentication_methods_by_authentication_method_id - """ - - url = self._url(f"{user_id}/authentication-methods/{authentication_method_id}") - return self.client.delete(url) - - def list_tokensets( - self, id: str, page: int = 0, per_page: int = 25, include_totals: bool = True - ): - """List all the tokenset(s) associated to the user. - - Args: - id (str): The user's id. - - page (int, optional): The result's page number (zero based). By default, - retrieves the first page of results. - - per_page (int, optional): The amount of entries per page. By default, - retrieves 25 results per page. - - include_totals (bool, optional): True if the query summary is - to be included in the result, False otherwise. Defaults to True. - - See https://auth0.com/docs/api/management/v2#!/Users/get_tokensets - """ - - params = { - "per_page": per_page, - "page": page, - "include_totals": str(include_totals).lower(), - } - url = self._url(f"{id}/federated-connections-tokensets") - return self.client.get(url, params=params) - - def delete_tokenset_by_id( - self, user_id: str, tokenset_id: str - ) -> Any: - """Deletes an tokenset by ID. - - Args: - user_id (str): The user_id to delete an authentication method by ID for. - tokenset_id (str): The tokenset_id to delete an tokenset by ID for. - - See: https://auth0.com/docs/api/management/v2#!/Users/delete_tokenset_by_id - """ - - url = self._url(f"{user_id}/federated-connections-tokensets/{tokenset_id}") - return self.client.delete(url) \ No newline at end of file diff --git a/auth0/management/users_by_email.py b/auth0/management/users_by_email.py deleted file mode 100644 index 009ca8aa..00000000 --- a/auth0/management/users_by_email.py +++ /dev/null @@ -1,75 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from ..rest import RestClient, RestClientOptions -from ..types import TimeoutType - - -class UsersByEmail: - """Auth0 users by email endpoints - - Args: - domain (str): Your Auth0 domain, e.g: 'username.auth0.com' - - token (str): Management API v2 Token - - telemetry (bool, optional): Enable or disable Telemetry - (defaults to True) - - timeout (float or tuple, optional): Change the requests - connect and read timeout. Pass a tuple to specify - both values separately or a float to set both to it. - (defaults to 5.0 for both) - - protocol (str, optional): Protocol to use when making requests. - (defaults to "https") - - rest_options (RestClientOptions): Pass an instance of - RestClientOptions to configure additional RestClient - options, such as rate-limit retries. - (defaults to None) - """ - - def __init__( - self, - domain: str, - token: str, - telemetry: bool = True, - timeout: TimeoutType = 5.0, - protocol: str = "https", - rest_options: RestClientOptions | None = None, - ) -> None: - self.domain = domain - self.protocol = protocol - self.client = RestClient( - jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options - ) - - def _url(self) -> str: - return f"{self.protocol}://{self.domain}/api/v2/users-by-email" - - def search_users_by_email( - self, email: str, fields: list[str] | None = None, include_fields: bool = True - ) -> list[dict[str, Any]]: - """List or search users. - - Args: - - email: Email to search. - - fields (list of str, optional): A list of fields to include or - exclude from the result (depending on include_fields). Leave empty to - retrieve all fields. - - include_fields (bool, optional): True if the fields specified are - to be include in the result, False otherwise. - - See: https://auth0.com/docs/api/management/v2#!/Users_By_Email/get_users_by_email - """ - params = { - "email": email, - "fields": fields and ",".join(fields) or None, - "include_fields": str(include_fields).lower(), - } - return self.client.get(self._url(), params=params) diff --git a/auth0/test/conftest.py b/auth0/test/conftest.py deleted file mode 100644 index 1247142f..00000000 --- a/auth0/test/conftest.py +++ /dev/null @@ -1,7 +0,0 @@ -import pytest -import random - -@pytest.fixture(autouse=True) -def set_random_seed(): - random.seed(42) - print("Random seeded to 42") \ No newline at end of file diff --git a/auth0/test/management/test_actions.py b/auth0/test/management/test_actions.py deleted file mode 100644 index c66babc4..00000000 --- a/auth0/test/management/test_actions.py +++ /dev/null @@ -1,249 +0,0 @@ -import unittest -from unittest import mock - -from ...management.actions import Actions - - -class TestActions(unittest.TestCase): - def test_init_with_optionals(self): - t = Actions(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.actions.RestClient") - def test_get_actions(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - - c.get_actions() - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/actions/actions", args[0]) - self.assertEqual( - kwargs["params"], - { - "triggerId": None, - "actionName": None, - "deployed": None, - "installed": "false", - "page": None, - "per_page": None, - }, - ) - - c.get_actions("trigger-id", "action-name", True, True, 0, 5) - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/actions/actions", args[0]) - self.assertEqual( - kwargs["params"], - { - "triggerId": "trigger-id", - "actionName": "action-name", - "deployed": "true", - "installed": "true", - "page": 0, - "per_page": 5, - }, - ) - - c.get_actions("trigger-id", "action-name", False, True, 0, 5) - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/actions/actions", args[0]) - self.assertEqual( - kwargs["params"], - { - "triggerId": "trigger-id", - "actionName": "action-name", - "deployed": "false", - "installed": "true", - "page": 0, - "per_page": 5, - }, - ) - - @mock.patch("auth0.management.actions.RestClient") - def test_create_action(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.create_action({"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/actions/actions", data={"a": "b", "c": "d"} - ) - - @mock.patch("auth0.management.actions.RestClient") - def test_update_action(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.update_action("action-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/actions/actions/action-id", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.actions.RestClient") - def test_get_action(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.get_action("action-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/actions/actions/action-id", args[0]) - self.assertEqual(kwargs["params"], {}) - - @mock.patch("auth0.management.actions.RestClient") - def test_get_triggers(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.get_triggers() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/actions/triggers", args[0]) - self.assertEqual(kwargs["params"], {}) - - @mock.patch("auth0.management.actions.RestClient") - def test_delete_action(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.delete_action("action-id") - - args, kwargs = mock_instance.delete.call_args - - self.assertEqual("https://domain/api/v2/actions/actions/action-id", args[0]) - self.assertEqual(kwargs["params"], {"force": "false"}) - - c.delete_action("action-id", True) - - args, kwargs = mock_instance.delete.call_args - - self.assertEqual("https://domain/api/v2/actions/actions/action-id", args[0]) - self.assertEqual(kwargs["params"], {"force": "true"}) - - @mock.patch("auth0.management.actions.RestClient") - def test_get_execution(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.get_execution("execution-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/actions/executions/execution-id", args[0] - ) - self.assertEqual(kwargs["params"], {}) - - @mock.patch("auth0.management.actions.RestClient") - def test_get_action_versions(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.get_action_versions("action-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/actions/actions/action-id/versions", args[0] - ) - self.assertEqual(kwargs["params"], {"page": None, "per_page": None}) - - c.get_action_versions("action-id", 0, 5) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/actions/actions/action-id/versions", args[0] - ) - self.assertEqual(kwargs["params"], {"page": 0, "per_page": 5}) - - @mock.patch("auth0.management.actions.RestClient") - def test_get_trigger_bindings(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.get_trigger_bindings("trigger-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/actions/triggers/trigger-id/bindings", args[0] - ) - self.assertEqual(kwargs["params"], {"page": None, "per_page": None}) - - c.get_trigger_bindings("trigger-id", 0, 5) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/actions/triggers/trigger-id/bindings", args[0] - ) - self.assertEqual(kwargs["params"], {"page": 0, "per_page": 5}) - - @mock.patch("auth0.management.actions.RestClient") - def test_get_action_version(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.get_action_version("action-id", "version-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/actions/actions/action-id/versions/version-id", - args[0], - ) - self.assertEqual(kwargs["params"], {}) - - @mock.patch("auth0.management.actions.RestClient") - def test_deploy_action(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.deploy_action("action-id") - - args, kwargs = mock_instance.post.call_args - - self.assertEqual( - "https://domain/api/v2/actions/actions/action-id/deploy", args[0] - ) - - @mock.patch("auth0.management.actions.RestClient") - def test_rollback_action(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.rollback_action_version("action-id", "version-id") - - args, kwargs = mock_instance.post.call_args - - self.assertEqual( - "https://domain/api/v2/actions/actions/action-id/versions/version-id/deploy", - args[0], - ) - self.assertEqual(kwargs["data"], {}) - - @mock.patch("auth0.management.actions.RestClient") - def test_update_trigger_bindings(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Actions(domain="domain", token="jwttoken") - c.update_trigger_bindings("trigger-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual( - "https://domain/api/v2/actions/triggers/trigger-id/bindings", args[0] - ) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) diff --git a/auth0/test/management/test_atack_protection.py b/auth0/test/management/test_atack_protection.py deleted file mode 100644 index 58a50d55..00000000 --- a/auth0/test/management/test_atack_protection.py +++ /dev/null @@ -1,96 +0,0 @@ -import unittest -from unittest import mock - -from ...management.attack_protection import AttackProtection - - -class TestAttackProtection(unittest.TestCase): - def test_init_with_optionals(self): - t = AttackProtection( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.attack_protection.RestClient") - def test_get_breached_password_detection(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.get.return_value = {} - - ap = AttackProtection(domain="domain", token="jwttoken") - ap.get_breached_password_detection() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/attack-protection/breached-password-detection", - args[0], - ) - - @mock.patch("auth0.management.attack_protection.RestClient") - def test_update_breached_password_detection(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.patch.return_value = {} - - c = AttackProtection(domain="domain", token="jwttoken") - c.update_breached_password_detection({"a": "b", "c": "d"}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/attack-protection/breached-password-detection", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.attack_protection.RestClient") - def test_get_brute_force_protection(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.get.return_value = {} - - ap = AttackProtection(domain="domain", token="jwttoken") - ap.get_brute_force_protection() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/attack-protection/brute-force-protection", args[0] - ) - - @mock.patch("auth0.management.attack_protection.RestClient") - def test_update_brute_force_protection(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.patch.return_value = {} - - c = AttackProtection(domain="domain", token="jwttoken") - c.update_brute_force_protection({"a": "b", "c": "d"}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/attack-protection/brute-force-protection", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.attack_protection.RestClient") - def test_get_suspicious_ip_throttling(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.get.return_value = {} - - ap = AttackProtection(domain="domain", token="jwttoken") - ap.get_suspicious_ip_throttling() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/attack-protection/suspicious-ip-throttling", args[0] - ) - - @mock.patch("auth0.management.attack_protection.RestClient") - def test_update_suspicious_ip_throttling(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.patch.return_value = {} - - c = AttackProtection(domain="domain", token="jwttoken") - c.update_suspicious_ip_throttling({"a": "b", "c": "d"}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/attack-protection/suspicious-ip-throttling", - data={"a": "b", "c": "d"}, - ) diff --git a/auth0/test/management/test_auth0.py b/auth0/test/management/test_auth0.py deleted file mode 100644 index 4a4c9859..00000000 --- a/auth0/test/management/test_auth0.py +++ /dev/null @@ -1,136 +0,0 @@ -import unittest - -from ...management.actions import Actions -from ...management.attack_protection import AttackProtection -from ...management.auth0 import Auth0 -from ...management.blacklists import Blacklists -from ...management.client_credentials import ClientCredentials -from ...management.client_grants import ClientGrants -from ...management.clients import Clients -from ...management.connections import Connections -from ...management.custom_domains import CustomDomains -from ...management.device_credentials import DeviceCredentials -from ...management.email_templates import EmailTemplates -from ...management.emails import Emails -from ...management.grants import Grants -from ...management.guardian import Guardian -from ...management.hooks import Hooks -from ...management.jobs import Jobs -from ...management.log_streams import LogStreams -from ...management.logs import Logs -from ...management.network_acls import NetworkAcls -from ...management.organizations import Organizations -from ...management.prompts import Prompts -from ...management.resource_servers import ResourceServers -from ...management.roles import Roles -from ...management.rules import Rules -from ...management.rules_configs import RulesConfigs -from ...management.stats import Stats -from ...management.tenants import Tenants -from ...management.tickets import Tickets -from ...management.user_blocks import UserBlocks -from ...management.users import Users -from ...management.users_by_email import UsersByEmail -from ...rest import RestClientOptions - - -class TestAuth0(unittest.TestCase): - def setUp(self): - self.domain = "user.some.domain" - self.token = "a-token" - self.a0 = Auth0(self.domain, self.token) - - def test_actions(self): - self.assertIsInstance(self.a0.actions, Actions) - - def test_attack_protection(self): - self.assertIsInstance(self.a0.attack_protection, AttackProtection) - - def test_blacklists(self): - self.assertIsInstance(self.a0.blacklists, Blacklists) - - def test_client_credentials(self): - self.assertIsInstance(self.a0.client_credentials, ClientCredentials) - - def test_client_grants(self): - self.assertIsInstance(self.a0.client_grants, ClientGrants) - - def test_clients(self): - self.assertIsInstance(self.a0.clients, Clients) - - def test_connections(self): - self.assertIsInstance(self.a0.connections, Connections) - - def test_custom_domains(self): - self.assertIsInstance(self.a0.custom_domains, CustomDomains) - - def test_device_credentials(self): - self.assertIsInstance(self.a0.device_credentials, DeviceCredentials) - - def test_email_templates(self): - self.assertIsInstance(self.a0.email_templates, EmailTemplates) - - def test_emails(self): - self.assertIsInstance(self.a0.emails, Emails) - - def test_grants(self): - self.assertIsInstance(self.a0.grants, Grants) - - def test_guardian(self): - self.assertIsInstance(self.a0.guardian, Guardian) - - def test_hooks(self): - self.assertIsInstance(self.a0.hooks, Hooks) - - def test_jobs(self): - self.assertIsInstance(self.a0.jobs, Jobs) - - def test_log_streams(self): - self.assertIsInstance(self.a0.log_streams, LogStreams) - - def test_logs(self): - self.assertIsInstance(self.a0.logs, Logs) - - def test_network_acls(self): - self.assertIsInstance(self.a0.network_acls, NetworkAcls) - - def test_organizations(self): - self.assertIsInstance(self.a0.organizations, Organizations) - - def test_prompts(self): - self.assertIsInstance(self.a0.prompts, Prompts) - - def test_resource_servers(self): - self.assertIsInstance(self.a0.resource_servers, ResourceServers) - - def test_roles(self): - self.assertIsInstance(self.a0.roles, Roles) - - def test_rules_configs(self): - self.assertIsInstance(self.a0.rules_configs, RulesConfigs) - - def test_rules(self): - self.assertIsInstance(self.a0.rules, Rules) - - def test_stats(self): - self.assertIsInstance(self.a0.stats, Stats) - - def test_tenants(self): - self.assertIsInstance(self.a0.tenants, Tenants) - - def test_tickets(self): - self.assertIsInstance(self.a0.tickets, Tickets) - - def test_user_blocks(self): - self.assertIsInstance(self.a0.user_blocks, UserBlocks) - - def test_users_by_email(self): - self.assertIsInstance(self.a0.users_by_email, UsersByEmail) - - def test_users(self): - self.assertIsInstance(self.a0.users, Users) - - def test_args(self): - rest_options = RestClientOptions(retries=99) - auth0 = Auth0(self.domain, self.token, rest_options=rest_options) - self.assertEqual(auth0.users.client.options.retries, 99) diff --git a/auth0/test/management/test_blacklists.py b/auth0/test/management/test_blacklists.py deleted file mode 100644 index aff79203..00000000 --- a/auth0/test/management/test_blacklists.py +++ /dev/null @@ -1,47 +0,0 @@ -import unittest -from unittest import mock - -from ...management.blacklists import Blacklists - - -class TestBlacklists(unittest.TestCase): - def test_init_with_optionals(self): - t = Blacklists( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.blacklists.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - t = Blacklists(domain="domain", token="jwttoken") - t.get(aud="an-id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/blacklists/tokens", params={"aud": "an-id"} - ) - - @mock.patch("auth0.management.blacklists.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - t = Blacklists(domain="domain", token="jwttoken") - - # create without audience - t.create(jti="the-jti") - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/blacklists/tokens", args[0]) - self.assertEqual(kwargs["data"], {"jti": "the-jti"}) - - # create with audience - t.create(jti="the-jti", aud="the-aud") - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/blacklists/tokens", args[0]) - self.assertEqual(kwargs["data"], {"jti": "the-jti", "aud": "the-aud"}) diff --git a/auth0/test/management/test_branding.py b/auth0/test/management/test_branding.py deleted file mode 100644 index daf2ac75..00000000 --- a/auth0/test/management/test_branding.py +++ /dev/null @@ -1,138 +0,0 @@ -import unittest -from unittest import mock - -from ...management.branding import Branding - - -class TestBranding(unittest.TestCase): - def test_init_with_optionals(self): - branding = Branding( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(branding.client.options.timeout, (10, 2)) - - telemetry = branding.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry, None) - - @mock.patch("auth0.management.branding.RestClient") - def test_get(self, mock_rc): - api = mock_rc.return_value - - branding = Branding(domain="domain", token="jwttoken") - branding.get() - - api.get.assert_called_with( - "https://domain/api/v2/branding", - ) - - @mock.patch("auth0.management.branding.RestClient") - def test_update(self, mock_rc): - api = mock_rc.return_value - api.patch.return_value = {} - - branding = Branding(domain="domain", token="jwttoken") - branding.update({"a": "b", "c": "d"}) - - api.patch.assert_called_with( - "https://domain/api/v2/branding", data={"a": "b", "c": "d"} - ) - - @mock.patch("auth0.management.branding.RestClient") - def test_get_template_universal_login(self, mock_rc): - api = mock_rc.return_value - - branding = Branding(domain="domain", token="jwttoken") - branding.get_template_universal_login() - - api.get.assert_called_with( - "https://domain/api/v2/branding/templates/universal-login", - ) - - @mock.patch("auth0.management.branding.RestClient") - def test_delete_template_universal_login(self, mock_rc): - api = mock_rc.return_value - - branding = Branding(domain="domain", token="jwttoken") - branding.delete_template_universal_login() - - api.delete.assert_called_with( - "https://domain/api/v2/branding/templates/universal-login", - ) - - @mock.patch("auth0.rest.requests.request") - def test_update_template_universal_login(self, mock_rc): - mock_rc.return_value.status_code = 200 - mock_rc.return_value.text = "{}" - - branding = Branding(domain="domain", token="jwttoken") - branding.update_template_universal_login({"a": "b", "c": "d"}) - - mock_rc.assert_called_with( - "PUT", - "https://domain/api/v2/branding/templates/universal-login", - json={"template": {"a": "b", "c": "d"}}, - headers=mock.ANY, - timeout=5.0, - ) - - @mock.patch("auth0.management.branding.RestClient") - def test_get_default_branding_theme(self, mock_rc): - api = mock_rc.return_value - api.get.return_value = {} - - branding = Branding(domain="domain", token="jwttoken") - branding.get_default_branding_theme() - - api.get.assert_called_with( - "https://domain/api/v2/branding/themes/default", - ) - - @mock.patch("auth0.management.branding.RestClient") - def test_get_branding_theme(self, mock_rc): - api = mock_rc.return_value - api.get.return_value = {} - - branding = Branding(domain="domain", token="jwttoken") - branding.get_branding_theme("theme_id") - - api.get.assert_called_with( - "https://domain/api/v2/branding/themes/theme_id", - ) - - @mock.patch("auth0.management.branding.RestClient") - def test_delete_branding_theme(self, mock_rc): - api = mock_rc.return_value - api.delete.return_value = {} - - branding = Branding(domain="domain", token="jwttoken") - branding.delete_branding_theme("theme_id") - - api.delete.assert_called_with( - "https://domain/api/v2/branding/themes/theme_id", - ) - - @mock.patch("auth0.management.branding.RestClient") - def test_update_branding_theme(self, mock_rc): - api = mock_rc.return_value - api.patch.return_value = {} - - branding = Branding(domain="domain", token="jwttoken") - branding.update_branding_theme("theme_id", {}) - - api.patch.assert_called_with( - "https://domain/api/v2/branding/themes/theme_id", - data={}, - ) - - @mock.patch("auth0.management.branding.RestClient") - def test_create_branding_theme(self, mock_rc): - api = mock_rc.return_value - api.post.return_value = {} - - branding = Branding(domain="domain", token="jwttoken") - branding.create_branding_theme({}) - - api.post.assert_called_with( - "https://domain/api/v2/branding/themes", - data={}, - ) diff --git a/auth0/test/management/test_client_credentials.py b/auth0/test/management/test_client_credentials.py deleted file mode 100644 index 97db0e1b..00000000 --- a/auth0/test/management/test_client_credentials.py +++ /dev/null @@ -1,50 +0,0 @@ -import unittest -from unittest import mock - -from ...management.client_credentials import ClientCredentials - - -class TestClientCredentials(unittest.TestCase): - def test_init_with_optionals(self): - t = ClientCredentials( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.client_credentials.RestClient") - def test_all(self, mock_rc): - mock_instance = mock_rc.return_value - c = ClientCredentials(domain="domain", token="jwttoken") - c.all("cid") - mock_instance.get.assert_called_with( - "https://domain/api/v2/clients/cid/credentials" - ) - - @mock.patch("auth0.management.client_credentials.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - c = ClientCredentials(domain="domain", token="jwttoken") - c.get("cid", "this-id") - mock_instance.get.assert_called_with( - "https://domain/api/v2/clients/cid/credentials/this-id" - ) - - @mock.patch("auth0.management.client_credentials.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - c = ClientCredentials(domain="domain", token="jwttoken") - c.create("cid", {"a": "b", "c": "d"}) - mock_instance.post.assert_called_with( - "https://domain/api/v2/clients/cid/credentials", data={"a": "b", "c": "d"} - ) - - @mock.patch("auth0.management.client_credentials.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - c = ClientCredentials(domain="domain", token="jwttoken") - c.delete("cid", "this-id") - mock_instance.delete.assert_called_with( - "https://domain/api/v2/clients/cid/credentials/this-id" - ) diff --git a/auth0/test/management/test_client_grants.py b/auth0/test/management/test_client_grants.py deleted file mode 100644 index eeef4f7b..00000000 --- a/auth0/test/management/test_client_grants.py +++ /dev/null @@ -1,167 +0,0 @@ -import unittest -from unittest import mock - -from ...management.client_grants import ClientGrants - - -class TestClientGrants(unittest.TestCase): - def test_init_with_optionals(self): - t = ClientGrants( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.client_grants.RestClient") - def test_all(self, mock_rc): - mock_instance = mock_rc.return_value - - c = ClientGrants(domain="domain", token="jwttoken") - - # With default params - c.all() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/client-grants", args[0]) - self.assertEqual( - kwargs["params"], - { - "audience": None, - "page": None, - "per_page": None, - "include_totals": "false", - "client_id": None, - "allow_any_organization": None, - }, - ) - - # With audience - c.all(audience="http://domain.auth0.com/api/v2/") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/client-grants", args[0]) - self.assertEqual( - kwargs["params"], - { - "audience": "http://domain.auth0.com/api/v2/", - "page": None, - "per_page": None, - "include_totals": "false", - "client_id": None, - "allow_any_organization": None, - }, - ) - - # With pagination params - c.all(per_page=23, page=7, include_totals=True) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/client-grants", args[0]) - self.assertEqual( - kwargs["params"], - { - "audience": None, - "page": 7, - "per_page": 23, - "include_totals": "true", - "client_id": None, - "allow_any_organization": None, - }, - ) - - # With client_id param - c.all(client_id="exampleid") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/client-grants", args[0]) - self.assertEqual( - kwargs["params"], - { - "audience": None, - "page": None, - "per_page": None, - "include_totals": "false", - "client_id": "exampleid", - "allow_any_organization": None, - }, - ) - - # With allow any organization - c.all(allow_any_organization=True) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/client-grants", args[0]) - self.assertEqual( - kwargs["params"], - { - "audience": None, - "page": None, - "per_page": None, - "include_totals": "false", - "client_id": None, - "allow_any_organization": True, - }, - ) - - @mock.patch("auth0.management.client_grants.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - c = ClientGrants(domain="domain", token="jwttoken") - c.create({"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/client-grants", data={"a": "b", "c": "d"} - ) - - @mock.patch("auth0.management.client_grants.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - c = ClientGrants(domain="domain", token="jwttoken") - c.delete("this-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/client-grants/this-id" - ) - - @mock.patch("auth0.management.client_grants.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - c = ClientGrants(domain="domain", token="jwttoken") - c.update("this-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/client-grants/this-id", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.client_grants.RestClient") - def test_get_organizations(self, mock_rc): - mock_instance = mock_rc.return_value - - c = ClientGrants(domain="domain", token="jwttoken") - c.get_organizations("cgid") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/client-grants/cgid/organizations", args[0] - ) - self.assertEqual( - kwargs["params"], - { - "page": None, - "per_page": None, - "include_totals": "false", - "from": None, - "take": None, - }, - ) diff --git a/auth0/test/management/test_clients.py b/auth0/test/management/test_clients.py deleted file mode 100644 index 41c164a9..00000000 --- a/auth0/test/management/test_clients.py +++ /dev/null @@ -1,136 +0,0 @@ -import unittest -from unittest import mock - -from ...management.clients import Clients - - -class TestClients(unittest.TestCase): - def test_init_with_optionals(self): - t = Clients(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.clients.RestClient") - def test_all(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Clients(domain="domain", token="jwttoken") - - # Default parameters are requested - c.all() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/clients", args[0]) - self.assertEqual( - kwargs["params"], - {"fields": None, "include_fields": "true", "page": None, "per_page": None}, - ) - - # Fields filter - c.all(fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/clients", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": "a,b", - "include_fields": "false", - "page": None, - "per_page": None, - }, - ) - - # Specific pagination - c.all(page=7, per_page=25) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/clients", args[0]) - self.assertEqual( - kwargs["params"], - {"fields": None, "include_fields": "true", "page": 7, "per_page": 25}, - ) - - # Extra parameters - c.all(extra_params={"some_key": "some_value"}) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/clients", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "include_fields": "true", - "page": None, - "per_page": None, - "some_key": "some_value", - }, - ) - - @mock.patch("auth0.management.clients.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Clients(domain="domain", token="jwttoken") - c.create({"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/clients", data={"a": "b", "c": "d"} - ) - - @mock.patch("auth0.management.clients.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Clients(domain="domain", token="jwttoken") - c.get("this-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/clients/this-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": None, "include_fields": "true"}) - - c.get("this-id", fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/clients/this-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": "a,b", "include_fields": "false"}) - - @mock.patch("auth0.management.clients.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Clients(domain="domain", token="jwttoken") - c.delete("this-id") - - mock_instance.delete.assert_called_with("https://domain/api/v2/clients/this-id") - - @mock.patch("auth0.management.clients.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Clients(domain="domain", token="jwttoken") - c.update("this-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/clients/this-id", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.clients.RestClient") - def test_rotate_secret(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Clients(domain="domain", token="jwttoken") - c.rotate_secret("this-id") - - mock_instance.post.assert_called_with( - "https://domain/api/v2/clients/this-id/rotate-secret", - data={"id": "this-id"}, - ) diff --git a/auth0/test/management/test_connections.py b/auth0/test/management/test_connections.py deleted file mode 100644 index 1f27de69..00000000 --- a/auth0/test/management/test_connections.py +++ /dev/null @@ -1,202 +0,0 @@ -import unittest -from unittest import mock - -from ...management.connections import Connections - - -class TestConnection(unittest.TestCase): - def test_init_with_optionals(self): - t = Connections( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.connections.RestClient") - def test_all(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.get.return_value = {} - - # Default parameters are requested - c = Connections(domain="domain", token="jwttoken") - c.all() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/connections", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "strategy": None, - "page": None, - "per_page": None, - "include_fields": "true", - "name": None, - }, - ) - - # Fields filter - c.all(fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/connections", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": "a,b", - "strategy": None, - "page": None, - "per_page": None, - "include_fields": "false", - "name": None, - }, - ) - - # Fields + strategy filter - c.all(fields=["a", "b"], strategy="auth0", include_fields=True) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/connections", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": "a,b", - "strategy": "auth0", - "page": None, - "per_page": None, - "include_fields": "true", - "name": None, - }, - ) - - # Specific pagination - c.all(page=7, per_page=25) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/connections", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "strategy": None, - "page": 7, - "per_page": 25, - "include_fields": "true", - "name": None, - }, - ) - - # Extra parameters - c.all(extra_params={"some_key": "some_value"}) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/connections", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "strategy": None, - "page": None, - "per_page": None, - "include_fields": "true", - "some_key": "some_value", - "name": None, - }, - ) - - # Name - c.all(name="foo") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/connections", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "strategy": None, - "page": None, - "per_page": None, - "include_fields": "true", - "name": "foo", - }, - ) - - @mock.patch("auth0.management.connections.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.get.return_value = {} - - c = Connections(domain="domain", token="jwttoken") - c.get("an-id") - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/connections/an-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": None, "include_fields": "true"}) - - c.get("an-id", fields=["a", "b"]) - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/connections/an-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": "a,b", "include_fields": "true"}) - - c.get("an-id", fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/connections/an-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": "a,b", "include_fields": "false"}) - - @mock.patch("auth0.management.connections.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.delete.return_value = {} - - c = Connections(domain="domain", token="jwttoken") - c.delete("this-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/connections/this-id" - ) - - @mock.patch("auth0.management.connections.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.patch.return_value = {} - - c = Connections(domain="domain", token="jwttoken") - c.update("that-id", {"a": "b", "c": "d"}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/connections/that-id", data={"a": "b", "c": "d"} - ) - - @mock.patch("auth0.management.connections.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.post.return_value = {} - - c = Connections(domain="domain", token="jwttoken") - c.create({"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/connections", data={"a": "b", "c": "d"} - ) - - @mock.patch("auth0.management.connections.RestClient") - def test_delete_user_by_email(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.delete_user_by_email.return_value = {} - - c = Connections(domain="domain", token="jwttoken") - c.delete_user_by_email("123", "test@example.com") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/connections/123/users", - params={"email": "test@example.com"}, - ) diff --git a/auth0/test/management/test_custom_domains.py b/auth0/test/management/test_custom_domains.py deleted file mode 100644 index 4dc8f975..00000000 --- a/auth0/test/management/test_custom_domains.py +++ /dev/null @@ -1,57 +0,0 @@ -import unittest -from unittest import mock - -from ...management.custom_domains import CustomDomains - - -class TestCustomDomains(unittest.TestCase): - def test_init_with_optionals(self): - t = CustomDomains( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.custom_domains.RestClient") - def test_get_all(self, mock_rc): - mock_instance = mock_rc.return_value - - g = CustomDomains(domain="domain", token="jwttoken") - g.all() - - mock_instance.get.assert_called_with("https://domain/api/v2/custom-domains") - - @mock.patch("auth0.management.custom_domains.RestClient") - def test_create_new(self, mock_rc): - mock_instance = mock_rc.return_value - - g = CustomDomains(domain="domain", token="jwttoken") - g.create_new(body={"a": "b", "c": "d", "e": "f"}) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/custom-domains", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d", "e": "f"}) - - @mock.patch("auth0.management.custom_domains.RestClient") - def test_get_domain_by_id(self, mock_rc): - mock_instance = mock_rc.return_value - - g = CustomDomains(domain="domain", token="jwttoken") - g.get("an-id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/custom-domains/an-id" - ) - - @mock.patch("auth0.management.custom_domains.RestClient") - def test_verify(self, mock_rc): - mock_instance = mock_rc.return_value - - g = CustomDomains(domain="domain", token="jwttoken") - g.verify("an-id") - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/custom-domains/an-id/verify", args[0]) diff --git a/auth0/test/management/test_device_credentials.py b/auth0/test/management/test_device_credentials.py deleted file mode 100644 index 1b524cd3..00000000 --- a/auth0/test/management/test_device_credentials.py +++ /dev/null @@ -1,87 +0,0 @@ -import unittest -from unittest import mock - -from ...management.device_credentials import DeviceCredentials - - -class TestDeviceCredentials(unittest.TestCase): - def test_init_with_optionals(self): - t = DeviceCredentials( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.device_credentials.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - c = DeviceCredentials(domain="domain", token="jwttoken") - c.get(user_id="uid", client_id="cid", type="type", page=0, per_page=20) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/device-credentials", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "include_fields": "true", - "user_id": "uid", - "client_id": "cid", - "type": "type", - "page": 0, - "per_page": 20, - "include_totals": "false", - }, - ) - - c.get( - user_id="uid", - client_id="cid", - type="type", - page=5, - per_page=50, - include_totals=True, - ) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/device-credentials", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "include_fields": "true", - "user_id": "uid", - "client_id": "cid", - "type": "type", - "page": 5, - "per_page": 50, - "include_totals": "true", - }, - ) - - @mock.patch("auth0.management.device_credentials.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - c = DeviceCredentials(domain="domain", token="jwttoken") - c.create({"a": "b", "c": "d"}) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/device-credentials", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.device_credentials.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - c = DeviceCredentials(domain="domain", token="jwttoken") - c.delete("an-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/device-credentials/an-id", - ) diff --git a/auth0/test/management/test_email_endpoints.py b/auth0/test/management/test_email_endpoints.py deleted file mode 100644 index 93406d26..00000000 --- a/auth0/test/management/test_email_endpoints.py +++ /dev/null @@ -1,48 +0,0 @@ -import unittest -from unittest import mock - -from ...management.email_templates import EmailTemplates - - -class TestClients(unittest.TestCase): - def test_init_with_optionals(self): - t = EmailTemplates( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.email_templates.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - c = EmailTemplates(domain="domain", token="jwttoken") - c.create({"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/email-templates", data={"a": "b", "c": "d"} - ) - - @mock.patch("auth0.management.email_templates.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - c = EmailTemplates(domain="domain", token="jwttoken") - c.get("this-template-name") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/email-templates/this-template-name" - ) - - @mock.patch("auth0.management.email_templates.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - c = EmailTemplates(domain="domain", token="jwttoken") - c.update("this-template-name", {"a": "b", "c": "d"}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/email-templates/this-template-name", - data={"a": "b", "c": "d"}, - ) diff --git a/auth0/test/management/test_emails.py b/auth0/test/management/test_emails.py deleted file mode 100644 index 00b4de51..00000000 --- a/auth0/test/management/test_emails.py +++ /dev/null @@ -1,64 +0,0 @@ -import unittest -from unittest import mock - -from ...management.emails import Emails - - -class TestEmails(unittest.TestCase): - def test_init_with_optionals(self): - t = Emails(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.emails.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - e = Emails(domain="domain", token="jwttoken") - e.get() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/emails/provider", args[0]) - self.assertEqual(kwargs["params"], {"fields": None, "include_fields": "true"}) - - e.get(fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/emails/provider", args[0]) - self.assertEqual(kwargs["params"], {"fields": "a,b", "include_fields": "false"}) - - @mock.patch("auth0.management.emails.RestClient") - def test_config(self, mock_rc): - mock_instance = mock_rc.return_value - - e = Emails(domain="domain", token="jwttoken") - e.config({"a": "b", "c": "d"}) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/emails/provider", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.emails.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - e = Emails(domain="domain", token="jwttoken") - e.update({"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/emails/provider", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.emails.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - e = Emails(domain="domain", token="jwttoken") - e.delete() - - mock_instance.delete.assert_called_with("https://domain/api/v2/emails/provider") diff --git a/auth0/test/management/test_grants.py b/auth0/test/management/test_grants.py deleted file mode 100644 index e5961993..00000000 --- a/auth0/test/management/test_grants.py +++ /dev/null @@ -1,44 +0,0 @@ -import unittest -from unittest import mock - -from ...management.grants import Grants - - -class TestGrants(unittest.TestCase): - def test_init_with_optionals(self): - t = Grants(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.grants.RestClient") - def test_get_all(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Grants(domain="domain", token="jwttoken") - g.all( - extra_params={"user_id": "an-id", "client_id": "an-id", "audience": "test"} - ) - - args, kwargs = mock_instance.get.call_args - - mock_instance.get.assert_called_with( - "https://domain/api/v2/grants", - params={ - "user_id": "an-id", - "client_id": "an-id", - "audience": "test", - "page": None, - "per_page": None, - "include_totals": "false", - }, - ) - - @mock.patch("auth0.management.grants.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Grants(domain="domain", token="jwttoken") - c.delete("an-id") - - mock_instance.delete.assert_called_with("https://domain/api/v2/grants/an-id") diff --git a/auth0/test/management/test_guardian.py b/auth0/test/management/test_guardian.py deleted file mode 100644 index f77593e6..00000000 --- a/auth0/test/management/test_guardian.py +++ /dev/null @@ -1,150 +0,0 @@ -import unittest -from unittest import mock - -from ...management.guardian import Guardian - - -class TestGuardian(unittest.TestCase): - def test_init_with_optionals(self): - t = Guardian( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.guardian.RestClient") - def test_all_factors(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Guardian(domain="domain", token="jwttoken") - g.all_factors() - - mock_instance.get.assert_called_with("https://domain/api/v2/guardian/factors") - - @mock.patch("auth0.management.guardian.RestClient") - def test_update_factor(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Guardian(domain="domain", token="jwttoken") - g.update_factor("push-notification", {"enabled": True}) - - args, kwargs = mock_instance.put.call_args - self.assertEqual( - "https://domain/api/v2/guardian/factors/push-notification", args[0] - ) - self.assertEqual(kwargs["data"], {"enabled": True}) - - g.update_factor("sms", {"enabled": False}) - - args, kwargs = mock_instance.put.call_args - self.assertEqual("https://domain/api/v2/guardian/factors/sms", args[0]) - self.assertEqual(kwargs["data"], {"enabled": False}) - - @mock.patch("auth0.management.guardian.RestClient") - def test_update_templates(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Guardian(domain="domain", token="jwttoken") - g.update_templates( - {"enrollment_message": "hello", "verification_message": "verified"} - ) - - args, kwargs = mock_instance.put.call_args - self.assertEqual( - "https://domain/api/v2/guardian/factors/sms/templates", args[0] - ) - self.assertEqual( - kwargs["data"], - {"enrollment_message": "hello", "verification_message": "verified"}, - ) - - @mock.patch("auth0.management.guardian.RestClient") - def test_get_templates(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Guardian(domain="domain", token="jwttoken") - g.get_templates() - - mock_instance.get.assert_called_with( - "https://domain/api/v2/guardian/factors/sms/templates" - ) - - @mock.patch("auth0.management.guardian.RestClient") - def test_get_enrollment(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Guardian(domain="domain", token="jwttoken") - g.get_enrollment("some_id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/guardian/enrollments/some_id" - ) - - @mock.patch("auth0.management.guardian.RestClient") - def test_delete_enrollment(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Guardian(domain="domain", token="jwttoken") - g.delete_enrollment("some_id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/guardian/enrollments/some_id" - ) - - @mock.patch("auth0.management.guardian.RestClient") - def test_create_enrollment_ticket(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Guardian(domain="domain", token="jwttoken") - g.create_enrollment_ticket( - {"user_id": "some_id", "email": "test@test.com", "send_mail": "false"} - ) - - args, kwargs = mock_instance.post.call_args - self.assertEqual("https://domain/api/v2/guardian/enrollments/ticket", args[0]) - self.assertEqual( - kwargs["data"], - {"user_id": "some_id", "email": "test@test.com", "send_mail": "false"}, - ) - - @mock.patch("auth0.management.guardian.RestClient") - def test_get_factor_providers(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Guardian(domain="domain", token="jwttoken") - g.get_factor_providers("sms", "twilio") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/guardian/factors/sms/providers/twilio" - ) - - @mock.patch("auth0.management.guardian.RestClient") - def test_update_factor_providers(self, mock_rc): - mock_instance = mock_rc.return_value - - g = Guardian(domain="domain", token="jwttoken") - g.update_factor_providers( - "sms", - "twilio", - { - "from": "test@test.com", - "messaging_service_sid": "qwerty", - "auth_token": "abc.xyz.123", - "sid": "abc.xyz", - }, - ) - - args, kwargs = mock_instance.put.call_args - self.assertEqual( - "https://domain/api/v2/guardian/factors/sms/providers/twilio", args[0] - ) - self.assertEqual( - kwargs["data"], - { - "from": "test@test.com", - "messaging_service_sid": "qwerty", - "auth_token": "abc.xyz.123", - "sid": "abc.xyz", - }, - ) diff --git a/auth0/test/management/test_hooks.py b/auth0/test/management/test_hooks.py deleted file mode 100644 index b7603434..00000000 --- a/auth0/test/management/test_hooks.py +++ /dev/null @@ -1,173 +0,0 @@ -import unittest -from unittest import mock - -from ...management.hooks import Hooks - - -class TestRules(unittest.TestCase): - def test_init_with_optionals(self): - t = Hooks(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.hooks.RestClient") - def test_all(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Hooks(domain="domain", token="jwttoken") - - # with default params - c.all() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/hooks", args[0]) - self.assertEqual( - kwargs["params"], - { - "enabled": "true", - "fields": None, - "include_fields": "true", - "page": None, - "per_page": None, - "include_totals": "false", - }, - ) - - # with fields params - c.all(enabled=False, fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/hooks", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": "a,b", - "include_fields": "false", - "enabled": "false", - "page": None, - "per_page": None, - "include_totals": "false", - }, - ) - - # with pagination params - c.all(page=3, per_page=27, include_totals=True) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/hooks", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "include_fields": "true", - "enabled": "true", - "page": 3, - "per_page": 27, - "include_totals": "true", - }, - ) - - @mock.patch("auth0.management.hooks.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Hooks(domain="domain", token="jwttoken") - c.create({"a": "b", "c": "d"}) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/hooks", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.hooks.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Hooks(domain="domain", token="jwttoken") - c.get("an-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/hooks/an-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": None}) - - c.get("an-id", fields=["a", "b"]) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/hooks/an-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": "a,b"}) - - @mock.patch("auth0.management.hooks.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Hooks(domain="domain", token="jwttoken") - c.delete("an-id") - - mock_instance.delete.assert_called_with("https://domain/api/v2/hooks/an-id") - - @mock.patch("auth0.management.hooks.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Hooks(domain="domain", token="jwttoken") - c.update("an-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/hooks/an-id", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - # test for hooks secrets - @mock.patch("auth0.management.hooks.RestClient") - def test_add_secret(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Hooks(domain="domain", token="jwttoken") - c.add_secrets("an-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/hooks/an-id/secrets", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.hooks.RestClient") - def test_get_secrets(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Hooks(domain="domain", token="jwttoken") - c.get_secrets("an-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/hooks/an-id/secrets", args[0]) - self.assertNotIn("params", kwargs) - - @mock.patch("auth0.management.hooks.RestClient") - def test_delete_secrets(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Hooks(domain="domain", token="jwttoken") - c.delete_secrets("an-id", ["a", "b"]) - - args, kwargs = mock_instance.delete.call_args - - self.assertEqual("https://domain/api/v2/hooks/an-id/secrets", args[0]) - self.assertEqual(kwargs["data"], ["a", "b"]) - - @mock.patch("auth0.management.hooks.RestClient") - def test_update_secrets(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Hooks(domain="domain", token="jwttoken") - c.update_secrets("an-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/hooks/an-id/secrets", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) diff --git a/auth0/test/management/test_jobs.py b/auth0/test/management/test_jobs.py deleted file mode 100644 index 57313ab0..00000000 --- a/auth0/test/management/test_jobs.py +++ /dev/null @@ -1,107 +0,0 @@ -import unittest -from unittest import mock - -from ...management.jobs import Jobs - - -class TestJobs(unittest.TestCase): - def test_init_with_optionals(self): - t = Jobs(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.jobs.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - j = Jobs(domain="domain", token="jwttoken") - j.get("an-id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/jobs/an-id", - ) - - @mock.patch("auth0.management.jobs.RestClient") - def test_get_failed_job(self, mock_rc): - mock_instance = mock_rc.return_value - - j = Jobs(domain="domain", token="jwttoken") - j.get_failed_job("an-id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/jobs/an-id/errors", - ) - - @mock.patch("auth0.management.jobs.RestClient") - def test_export_users(self, mock_rc): - mock_instance = mock_rc.return_value - - j = Jobs(domain="domain", token="jwttoken") - j.export_users({"connection_id": "cxn_id", "format": "json"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/jobs/users-exports", - data={"connection_id": "cxn_id", "format": "json"}, - ) - - @mock.patch("auth0.management.jobs.RestClient") - def test_import_users(self, mock_rc): - mock_instance = mock_rc.return_value - - j = Jobs(domain="domain", token="jwttoken") - j.import_users(connection_id="1234", file_obj={}) - - mock_instance.file_post.assert_called_with( - "https://domain/api/v2/jobs/users-imports", - data={ - "connection_id": "1234", - "upsert": "false", - "send_completion_email": "true", - "external_id": None, - }, - files={"users": {}}, - ) - - j.import_users( - connection_id="1234", - file_obj={}, - upsert=True, - send_completion_email=False, - external_id="ext-id-123", - ) - mock_instance.file_post.assert_called_with( - "https://domain/api/v2/jobs/users-imports", - data={ - "connection_id": "1234", - "upsert": "true", - "send_completion_email": "false", - "external_id": "ext-id-123", - }, - files={"users": {}}, - ) - - j.import_users( - connection_id="1234", file_obj={}, upsert=False, send_completion_email=True - ) - mock_instance.file_post.assert_called_with( - "https://domain/api/v2/jobs/users-imports", - data={ - "connection_id": "1234", - "upsert": "false", - "send_completion_email": "true", - "external_id": None, - }, - files={"users": {}}, - ) - - @mock.patch("auth0.management.jobs.RestClient") - def test_verification_email(self, mock_rc): - mock_instance = mock_rc.return_value - - j = Jobs(domain="domain", token="jwttoken") - j.send_verification_email({"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/jobs/verification-email", data={"a": "b", "c": "d"} - ) diff --git a/auth0/test/management/test_log_streams.py b/auth0/test/management/test_log_streams.py deleted file mode 100644 index d81e577e..00000000 --- a/auth0/test/management/test_log_streams.py +++ /dev/null @@ -1,84 +0,0 @@ -import unittest -from unittest import mock - -from ...management.log_streams import LogStreams - - -class TestLogStreams(unittest.TestCase): - def test_init_with_optionals(self): - t = LogStreams( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.log_streams.RestClient") - def test_list(self, mock_rc): - mock_instance = mock_rc.return_value - - c = LogStreams(domain="domain", token="jwttoken") - - c.list() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/log-streams", args[0]) - - @mock.patch("auth0.management.log_streams.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - c = LogStreams(domain="domain", token="jwttoken") - c.get("an-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/log-streams/an-id", args[0]) - - @mock.patch("auth0.management.log_streams.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - c = LogStreams(domain="domain", token="jwttoken") - # Sample data belongs to an `http` stream - log_stream_data = { - "name": "string", - "type": "http", - "sink": { - "httpEndpoint": "string", - "httpContentType": "string", - "httpContentFormat": "JSONLINES|JSONARRAY", - "httpAuthorization": "string", - }, - } - c.create(log_stream_data) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/log-streams", args[0]) - self.assertEqual(kwargs["data"], log_stream_data) - - @mock.patch("auth0.management.log_streams.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - c = LogStreams(domain="domain", token="jwttoken") - c.delete("an-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/log-streams/an-id" - ) - - @mock.patch("auth0.management.log_streams.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - log_stream_update = {"name": "string"} - - c = LogStreams(domain="domain", token="jwttoken") - c.update("an-id", log_stream_update) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/log-streams/an-id", args[0]) - self.assertEqual(kwargs["data"], log_stream_update) diff --git a/auth0/test/management/test_logs.py b/auth0/test/management/test_logs.py deleted file mode 100644 index 74767a6e..00000000 --- a/auth0/test/management/test_logs.py +++ /dev/null @@ -1,51 +0,0 @@ -import unittest -from unittest import mock - -from ...management.logs import Logs - - -class TestLogs(unittest.TestCase): - def test_init_with_optionals(self): - t = Logs(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.logs.RestClient") - def test_search(self, mock_rc): - mock_instance = mock_rc.return_value - - logs = Logs(domain="domain", token="jwttoken") - logs.search() - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/logs", args[0]) - self.assertIsNone(kwargs["params"]["sort"]) - self.assertIsNone(kwargs["params"]["q"]) - self.assertIsNone(kwargs["params"]["from"]) - self.assertIsNone(kwargs["params"]["take"]) - self.assertEqual(kwargs["params"]["include_fields"], "true") - self.assertEqual(kwargs["params"]["include_totals"], "true") - self.assertEqual(kwargs["params"]["per_page"], 50) - self.assertEqual(kwargs["params"]["page"], 0) - self.assertIsNone(kwargs["params"]["fields"]) - - logs.search(fields=["description", "client_id"]) - - args, kwargs = mock_instance.get.call_args - self.assertEqual(kwargs["params"]["fields"], "description,client_id") - - logs.search(page=0, per_page=2) - - args, kwargs = mock_instance.get.call_args - self.assertEqual(kwargs["params"]["per_page"], 2) - self.assertEqual(kwargs["params"]["page"], 0) - - @mock.patch("auth0.management.logs.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - logs = Logs(domain="domain", token="jwttoken") - logs.get("get_id") - - mock_instance.get.assert_called_with("https://domain/api/v2/logs/get_id") diff --git a/auth0/test/management/test_network_acls.py b/auth0/test/management/test_network_acls.py deleted file mode 100644 index 85c80da2..00000000 --- a/auth0/test/management/test_network_acls.py +++ /dev/null @@ -1,90 +0,0 @@ -import unittest -from unittest import mock - -from ...management.network_acls import NetworkAcls - - -class TestNetworkAcls(unittest.TestCase): - def test_init_with_optionals(self): - t = NetworkAcls( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.network_acls.RestClient") - def test_all(self, mock_rc): - mock_instance = mock_rc.return_value - - s = NetworkAcls(domain="domain", token="jwttoken") - s.all() - - mock_instance.get.assert_called_with( - "https://domain/api/v2/network-acls", - params={"page": 0, "per_page": 25, "include_totals": "true"}, - ) - - s.all(page=1, per_page=50, include_totals=False) - - mock_instance.get.assert_called_with( - "https://domain/api/v2/network-acls", - params={"page": 1, "per_page": 50, "include_totals": "false"}, - ) - - @mock.patch("auth0.management.network_acls.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - s = NetworkAcls(domain="domain", token="jwttoken") - s.create({"name": "test"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/network-acls", data={"name": "test"} - ) - - @mock.patch("auth0.management.network_acls.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - s = NetworkAcls(domain="domain", token="jwttoken") - s.get("an-id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/network-acls/an-id" - ) - - @mock.patch("auth0.management.network_acls.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - s = NetworkAcls(domain="domain", token="jwttoken") - s.delete("an-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/network-acls/an-id" - ) - - @mock.patch("auth0.management.network_acls.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - s = NetworkAcls(domain="domain", token="jwttoken") - s.update("an-id", {"a": "b", "c": "d"}) - - mock_instance.put.assert_called_with( - "https://domain/api/v2/network-acls/an-id", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.network_acls.RestClient") - def test_update_partial(self, mock_rc): - mock_instance = mock_rc.return_value - - s = NetworkAcls(domain="domain", token="jwttoken") - s.update_partial("an-id", {"a": "b", "c": "d"}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/network-acls/an-id", - data={"a": "b", "c": "d"}, - ) \ No newline at end of file diff --git a/auth0/test/management/test_organizations.py b/auth0/test/management/test_organizations.py deleted file mode 100644 index 6b1967b9..00000000 --- a/auth0/test/management/test_organizations.py +++ /dev/null @@ -1,536 +0,0 @@ -import unittest -from unittest import mock - -from ...management.organizations import Organizations - - -class TestOrganizations(unittest.TestCase): - def test_init_with_optionals(self): - t = Organizations( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - # Organizations - @mock.patch("auth0.management.organizations.RestClient") - def test_all_organizations(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - - # Default parameters are requested - c.all_organizations() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/organizations", args[0]) - self.assertEqual( - kwargs["params"], - { - "page": None, - "per_page": None, - "include_totals": "true", - "from": None, - "take": None, - }, - ) - - # Basic pagination - c.all_organizations(page=7, per_page=25, include_totals=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/organizations", args[0]) - self.assertEqual( - kwargs["params"], - { - "page": 7, - "per_page": 25, - "include_totals": "false", - "from": None, - "take": None, - }, - ) - - # Checkpoint pagination - c.all_organizations(from_param=8675309, take=75) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/organizations", args[0]) - self.assertEqual( - kwargs["params"], - { - "from": 8675309, - "take": 75, - "page": None, - "per_page": None, - "include_totals": "true", - }, - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_get_organization_by_name(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.get_organization_by_name("test-org") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/organizations/name/test-org", args[0]) - self.assertEqual(kwargs["params"], {}) - - @mock.patch("auth0.management.organizations.RestClient") - def test_get_organization(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.get_organization("org123") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/organizations/org123", args[0]) - self.assertEqual(kwargs["params"], {}) - - @mock.patch("auth0.management.organizations.RestClient") - def test_create_organization(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.create_organization({"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/organizations", data={"a": "b", "c": "d"} - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_update_organization(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.update_organization("this-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/organizations/this-id", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.organizations.RestClient") - def test_delete_organization(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.delete_organization("this-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/organizations/this-id" - ) - - # Organization Connections - @mock.patch("auth0.management.organizations.RestClient") - def test_all_organization_connections(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - - # Default parameters are requested - c.all_organization_connections("test-org") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/enabled_connections", args[0] - ) - self.assertEqual(kwargs["params"], {"page": None, "per_page": None}) - - # Specific pagination - c.all_organization_connections("test-org", page=7, per_page=25) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/enabled_connections", args[0] - ) - self.assertEqual(kwargs["params"], {"page": 7, "per_page": 25}) - - @mock.patch("auth0.management.organizations.RestClient") - def test_get_organization_connection(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.get_organization_connection("test-org", "test-con") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/enabled_connections/test-con", - args[0], - ) - self.assertEqual(kwargs["params"], {}) - - @mock.patch("auth0.management.organizations.RestClient") - def test_create_organization_connection(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.create_organization_connection("test-org", {"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/organizations/test-org/enabled_connections", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_update_organization_connection(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.update_organization_connection("test-org", "test-con", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/enabled_connections/test-con", - args[0], - ) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.organizations.RestClient") - def test_delete_organization_connection(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.delete_organization_connection("test-org", "test-con") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/organizations/test-org/enabled_connections/test-con" - ) - - # Organization Members - @mock.patch("auth0.management.organizations.RestClient") - def test_all_organization_members(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - - # Default parameters are requested - c.all_organization_members("test-org") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/members", args[0] - ) - self.assertEqual( - kwargs["params"], - { - "page": None, - "per_page": None, - "include_totals": "true", - "from": None, - "take": None, - "fields": None, - "include_fields": "true", - }, - ) - - # Specific pagination - c.all_organization_members( - "test-org", page=7, per_page=25, include_totals=False - ) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/members", args[0] - ) - self.assertEqual( - kwargs["params"], - { - "page": 7, - "per_page": 25, - "include_totals": "false", - "from": None, - "take": None, - "fields": None, - "include_fields": "true", - }, - ) - - # Checkpoint pagination - c.all_organization_members("test-org", from_param=8675309, take=75) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/members", args[0] - ) - self.assertEqual( - kwargs["params"], - { - "from": 8675309, - "take": 75, - "page": None, - "per_page": None, - "include_totals": "true", - "fields": None, - "include_fields": "true", - }, - ) - - # With fields - c.all_organization_members("test-org", fields=["a,b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/members", args[0] - ) - self.assertEqual( - kwargs["params"], - { - "page": None, - "per_page": None, - "include_totals": "true", - "from": None, - "take": None, - "fields": "a,b", - "include_fields": "false", - }, - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_create_organization_members(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.create_organization_members("test-org", {"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/organizations/test-org/members", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_delete_organization_members(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.delete_organization_members("test-org", {"a": "b", "c": "d"}) - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/organizations/test-org/members", - data={"a": "b", "c": "d"}, - ) - - # Organization Member Roles - @mock.patch("auth0.management.organizations.RestClient") - def test_all_organization_member_roles(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - - # Default parameters are requested - c.all_organization_member_roles("test-org", "test-user") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/members/test-user/roles", - args[0], - ) - self.assertEqual( - kwargs["params"], - { - "page": None, - "per_page": None, - "include_totals": "false", - } - ) - - # Specific pagination - c.all_organization_member_roles("test-org", "test-user", page=7, per_page=25, include_totals=True) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/members/test-user/roles", - args[0], - ) - self.assertEqual( - kwargs["params"], - { - "page": 7, - "per_page": 25, - "include_totals": "true", - } - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_create_organization_member_roles(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.create_organization_member_roles( - "test-org", "test-user", {"a": "b", "c": "d"} - ) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/organizations/test-org/members/test-user/roles", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_delete_organization_member_roles(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.delete_organization_member_roles( - "test-org", "test-user", {"a": "b", "c": "d"} - ) - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/organizations/test-org/members/test-user/roles", - data={"a": "b", "c": "d"}, - ) - - # Organization Invitations - @mock.patch("auth0.management.organizations.RestClient") - def test_all_organization_invitations(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - - # Default parameters are requested - c.all_organization_invitations("test-org") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/invitations", args[0] - ) - self.assertEqual( - kwargs["params"], - { - "page": None, - "per_page": None, - "include_totals": "false", - }, - ) - - # Specific pagination - c.all_organization_invitations("test-org", page=7, per_page=25) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/invitations", args[0] - ) - self.assertEqual( - kwargs["params"], - { - "page": 7, - "per_page": 25, - "include_totals": "false", - }, - ) - - # Return paged collection with paging properties - c.all_organization_invitations( - "test-org", page=7, per_page=25, include_totals=True - ) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/invitations", args[0] - ) - self.assertEqual( - kwargs["params"], - { - "page": 7, - "per_page": 25, - "include_totals": "true", - }, - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_get_organization_invitation(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.get_organization_invitation("test-org", "test-inv") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/organizations/test-org/invitations/test-inv", args[0] - ) - self.assertEqual(kwargs["params"], {}) - - @mock.patch("auth0.management.organizations.RestClient") - def test_create_organization_invitation(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.create_organization_invitation("test-org", {"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/organizations/test-org/invitations", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_delete_organization_invitation(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.delete_organization_invitation("test-org", "test-inv") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/organizations/test-org/invitations/test-inv" - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_get_client_grants(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.get_client_grants("test-org") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/organizations/test-org/client-grants", - params={ - "audience": None, - "client_id": None, - "page": None, - "per_page": None, - "include_totals": "false", - }, - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_add_client_grant(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.add_client_grant("test-org", "test-cg") - - mock_instance.post.assert_called_with( - "https://domain/api/v2/organizations/test-org/client-grants", - data={"grant_id": "test-cg"}, - ) - - @mock.patch("auth0.management.organizations.RestClient") - def test_delete_client_grant(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Organizations(domain="domain", token="jwttoken") - c.delete_client_grant("test-org", "test-cg") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/organizations/test-org/client-grants/test-cg", - ) diff --git a/auth0/test/management/test_prompts.py b/auth0/test/management/test_prompts.py deleted file mode 100644 index a93f2faa..00000000 --- a/auth0/test/management/test_prompts.py +++ /dev/null @@ -1,64 +0,0 @@ -import unittest -from unittest import mock - -from ...management.prompts import Prompts - - -class TestPrompts(unittest.TestCase): - def test_init_with_optionals(self): - t = Prompts(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.prompts.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - p = Prompts(domain="domain", token="jwttoken") - p.get() - - args, _ = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/prompts", args[0]) - - @mock.patch("auth0.management.prompts.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - p = Prompts(domain="domain", token="jwttoken") - p.update({"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/prompts", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.prompts.RestClient") - def test_get_custom_text(self, mock_rc): - mock_instance = mock_rc.return_value - - p = Prompts(domain="domain", token="jwttoken") - p.get_custom_text("some-prompt", "some-language") - - args, _ = mock_instance.get.call_args - - self.assertEqual( - "https://domain/api/v2/prompts/some-prompt/custom-text/some-language", - args[0], - ) - - @mock.patch("auth0.management.prompts.RestClient") - def test_update_custom_text(self, mock_rc): - mock_instance = mock_rc.return_value - - p = Prompts(domain="domain", token="jwttoken") - p.update_custom_text("some-prompt", "some-language", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.put.call_args - - self.assertEqual( - "https://domain/api/v2/prompts/some-prompt/custom-text/some-language", - args[0], - ) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) diff --git a/auth0/test/management/test_resource_servers.py b/auth0/test/management/test_resource_servers.py deleted file mode 100644 index 878b02d7..00000000 --- a/auth0/test/management/test_resource_servers.py +++ /dev/null @@ -1,86 +0,0 @@ -import unittest -from unittest import mock - -from ...management.resource_servers import ResourceServers - - -class TestResourceServers(unittest.TestCase): - def test_init_with_optionals(self): - t = ResourceServers( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.resource_servers.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - r = ResourceServers(domain="domain", token="jwttoken") - - r.create({"name": "TestApi", "identifier": "https://test.com/api"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/resource-servers", - data={"name": "TestApi", "identifier": "https://test.com/api"}, - ) - - @mock.patch("auth0.management.resource_servers.RestClient") - def test_get_all(self, mock_rc): - mock_instance = mock_rc.return_value - - r = ResourceServers(domain="domain", token="jwttoken") - - # with default params - r.get_all() - - mock_instance.get.assert_called_with( - "https://domain/api/v2/resource-servers", - params={"page": None, "per_page": None, "include_totals": "false"}, - ) - - # with pagination params - r.get_all(page=3, per_page=27, include_totals=True) - - mock_instance.get.assert_called_with( - "https://domain/api/v2/resource-servers", - params={"page": 3, "per_page": 27, "include_totals": "true"}, - ) - - @mock.patch("auth0.management.resource_servers.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - r = ResourceServers(domain="domain", token="jwttoken") - - r.get("some_id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/resource-servers/some_id" - ) - - @mock.patch("auth0.management.resource_servers.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - r = ResourceServers(domain="domain", token="jwttoken") - - r.delete("some_id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/resource-servers/some_id" - ) - - @mock.patch("auth0.management.resource_servers.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - r = ResourceServers(domain="domain", token="jwttoken") - - r.update("some_id", {"name": "TestApi2", "identifier": "https://test.com/api2"}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/resource-servers/some_id", - data={"name": "TestApi2", "identifier": "https://test.com/api2"}, - ) diff --git a/auth0/test/management/test_rest.py b/auth0/test/management/test_rest.py deleted file mode 100644 index 6288daf9..00000000 --- a/auth0/test/management/test_rest.py +++ /dev/null @@ -1,831 +0,0 @@ -import base64 -import json -import sys -import unittest -from unittest import mock - -from auth0.rest import RestClient, RestClientOptions - -from ...exceptions import Auth0Error, RateLimitError - - -class TestRest(unittest.TestCase): - # def test_options_are_used_and_override(self): - # """ - # This test ensures RestClientOptions are read when passed to - # RestClient's constructor by (1) configuring a timeout and (2) - # turning off Telemetry. This proves that RestClient is inheriting - # those options, and overriding it's own constructor arguments. - # """ - - # options = RestClientOptions(telemetry=False, timeout=0.00002, retries=10) - # rc = RestClient(jwt="a-token", telemetry=True, timeout=30, options=options) - - # # Does a timeout occur as expected? - # with self.assertRaises(requests.exceptions.Timeout): - # rc.get("http://google.com") - - # # Is RestClient using the RestClientOptions.timeout value properly? - # self.assertEqual(rc.options.timeout, 0.00002) - - # # Is RestClient using the RestClientOptions.retries value properly? - # self.assertEqual(rc.options.retries, 10) - - # # Is RestClient using the RestClientOptions.telemetry value properly? - # self.assertEqual(rc.options.telemetry, False) - - # # Is RestClient using the RestClientOptions.telemetry value properly? - # self.assertEqual( - # rc.base_headers, - # { - # "Content-Type": "application/json", - # "Authorization": "Bearer a-token", - # }, - # ) - - # def test_options_are_created_by_default(self): - # """ - # This test ensures RestClientOptions are read when passed to - # RestClient's constructor by (1) configuring a timeout and (2) - # turning off Telemetry. This proves that RestClient is inheriting - # those options, and overriding it's own constructor arguments. - # """ - - # rc = RestClient(jwt="a-token", telemetry=False, timeout=0.00002) - - # # Does a timeout occur as expected? - # with self.assertRaises(requests.exceptions.Timeout): - # rc.get("http://google.com") - - # # Did RestClient create a RestClientOptions for us? - # self.assertIsNotNone(rc.options) - - # # Did RestClient assign the new RestClientOptions instance the proper timeout value from the constructor? - # self.assertEqual(rc.options.timeout, 0.00002) - - # # Did RestClient use the default RestClientOptions value for retries? - # self.assertEqual(rc.options.retries, 3) - - # # Did RestClient assign the new RestClientOptions instance the proper telemetry value from the constructor? - # self.assertEqual(rc.options.telemetry, False) - - # # Is RestClient using the RestClientOptions.telemetry value properly? - # self.assertEqual( - # rc.base_headers, - # { - # "Content-Type": "application/json", - # "Authorization": "Bearer a-token", - # }, - # ) - - def test_default_options_are_used(self): - """ - This test ensures RestClientOptions are read when passed to - RestClient's constructor by (1) configuring a timeout and (2) - turning off Telemetry. This proves that RestClient is inheriting - those options, and overriding it's own constructor arguments. - """ - - options = RestClientOptions() - rc = RestClient(jwt="a-token", options=options) - - # Did RestClient store the RestClientOptions? - self.assertIsNotNone(rc.options) - - # Did RestClientOptions use the default 5.0 timeout? - self.assertEqual(rc.options.timeout, 5.0) - - # Did RestClientOptions use the default 3 retries? - self.assertEqual(rc.options.retries, 3) - - # Did RestClientOptions use the default True telemetry value? - self.assertEqual(rc.options.telemetry, True) - - # TODO: Replace the following with more reliable tests. Failing on GitHub Actions. - - # def test_get_can_timeout(self): - # rc = RestClient(jwt="a-token", telemetry=False, timeout=0.00002) - - # with self.assertRaises(requests.exceptions.Timeout): - # rc.get("https://google.com") - - # def test_post_can_timeout(self): - # rc = RestClient(jwt="a-token", telemetry=False, timeout=0.00002) - - # with self.assertRaises(requests.exceptions.Timeout): - # rc.post("https://google.com") - - # def test_put_can_timeout(self): - # rc = RestClient(jwt="a-token", telemetry=False, timeout=0.00002) - - # with self.assertRaises(requests.exceptions.Timeout): - # rc.put("https://google.com") - - # def test_patch_can_timeout(self): - # rc = RestClient(jwt="a-token", telemetry=False, timeout=0.00002) - - # with self.assertRaises(requests.exceptions.Timeout): - # rc.patch("https://google.com") - - # def test_delete_can_timeout(self): - # rc = RestClient(jwt="a-token", telemetry=False, timeout=0.00002) - - # with self.assertRaises(requests.exceptions.Timeout): - # rc.delete("https://google.com") - - @mock.patch("requests.request") - def test_get_custom_timeout(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False, timeout=(10, 2)) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - rc.get("the-url") - mock_request.assert_called_with( - "GET", "the-url", headers=headers, timeout=(10, 2) - ) - - @mock.patch("requests.request") - def test_post_custom_timeout(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False, timeout=(10, 2)) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - rc.post("the-url") - mock_request.assert_called_with( - "POST", "the-url", headers=headers, timeout=(10, 2) - ) - - @mock.patch("requests.request") - def test_put_custom_timeout(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False, timeout=(10, 2)) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - rc.put("the-url") - mock_request.assert_called_with( - "PUT", "the-url", headers=headers, timeout=(10, 2) - ) - - @mock.patch("requests.request") - def test_patch_custom_timeout(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False, timeout=(10, 2)) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - rc.patch("the-url") - mock_request.assert_called_with( - "PATCH", "the-url", headers=headers, timeout=(10, 2) - ) - - @mock.patch("requests.request") - def test_delete_custom_timeout(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False, timeout=(10, 2)) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - rc.delete("the-url") - mock_request.assert_called_with( - "DELETE", "the-url", headers=headers, timeout=(10, 2) - ) - - @mock.patch("requests.request") - def test_get(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - response = rc.get("the-url") - mock_request.assert_called_with("GET", "the-url", headers=headers, timeout=5.0) - - self.assertEqual(response, ["a", "b"]) - - response = rc.get(url="the/url", params={"A": "param", "B": "param"}) - mock_request.assert_called_with( - "GET", - "the/url", - params={"A": "param", "B": "param"}, - headers=headers, - timeout=5.0, - ) - self.assertEqual(response, ["a", "b"]) - - mock_request.return_value.text = "" - response = rc.get("the/url") - self.assertEqual(response, "") - - @mock.patch("requests.request") - def test_get_errors(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - mock_request.return_value.text = ( - '{"statusCode": 999, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 999 - - with self.assertRaises(Auth0Error) as context: - rc.get("the/url") - - self.assertEqual(context.exception.status_code, 999) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - - @mock.patch("requests.request") - def test_get_rate_limit_error(self, mock_request): - options = RestClientOptions(telemetry=False, retries=0) - rc = RestClient(jwt="a-token", options=options) - rc._skip_sleep = True - - mock_request.return_value.text = ( - '{"statusCode": 429, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 429 - mock_request.return_value.headers = { - "x-ratelimit-limit": "3", - "x-ratelimit-remaining": "6", - "x-ratelimit-reset": "9", - } - - with self.assertRaises(Auth0Error) as context: - rc.get("the/url") - - self.assertEqual(context.exception.status_code, 429) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - self.assertIsInstance(context.exception, RateLimitError) - self.assertEqual(context.exception.reset_at, 9) - self.assertIsNotNone(context.exception.headers) - self.assertEqual(context.exception.headers["x-ratelimit-limit"], "3") - self.assertEqual(context.exception.headers["x-ratelimit-remaining"], "6") - self.assertEqual(context.exception.headers["x-ratelimit-reset"], "9") - - self.assertEqual(rc._metrics["retries"], 0) - - @mock.patch("requests.request") - def test_get_rate_limit_error_without_headers(self, mock_request): - options = RestClientOptions(telemetry=False, retries=1) - rc = RestClient(jwt="a-token", options=options) - - mock_request.return_value.text = ( - '{"statusCode": 429, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 429 - - mock_request.return_value.headers = {} - with self.assertRaises(Auth0Error) as context: - rc.get("the/url") - - self.assertEqual(context.exception.status_code, 429) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - self.assertIsInstance(context.exception, RateLimitError) - self.assertEqual(context.exception.reset_at, -1) - self.assertIsNotNone(context.exception.headers) - self.assertEqual(context.exception.headers, {}) - - self.assertEqual(rc._metrics["retries"], 1) - - @mock.patch("requests.request") - def test_get_rate_limit_custom_retries(self, mock_request): - options = RestClientOptions(telemetry=False, retries=5) - rc = RestClient(jwt="a-token", options=options) - rc._skip_sleep = True - - mock_request.return_value.text = ( - '{"statusCode": 429, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 429 - mock_request.return_value.headers = { - "x-ratelimit-limit": "3", - "x-ratelimit-remaining": "6", - "x-ratelimit-reset": "9", - } - - with self.assertRaises(Auth0Error) as context: - rc.get("the/url") - - self.assertEqual(context.exception.status_code, 429) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - self.assertIsInstance(context.exception, RateLimitError) - self.assertEqual(context.exception.reset_at, 9) - - self.assertEqual(rc._metrics["retries"], 5) - self.assertEqual(rc._metrics["retries"], len(rc._metrics["backoff"])) - - @mock.patch("requests.request") - def test_get_rate_limit_invalid_retries_below_min(self, mock_request): - options = RestClientOptions(telemetry=False, retries=-1) - rc = RestClient(jwt="a-token", options=options) - rc._skip_sleep = True - - mock_request.return_value.text = ( - '{"statusCode": 429, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 429 - mock_request.return_value.headers = { - "x-ratelimit-limit": "3", - "x-ratelimit-remaining": "6", - "x-ratelimit-reset": "9", - } - - with self.assertRaises(Auth0Error) as context: - rc.get("the/url") - - self.assertEqual(context.exception.status_code, 429) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - self.assertIsInstance(context.exception, RateLimitError) - self.assertEqual(context.exception.reset_at, 9) - - self.assertEqual(rc._metrics["retries"], 0) - - @mock.patch("requests.request") - def test_get_rate_limit_invalid_retries_above_max(self, mock_request): - options = RestClientOptions(telemetry=False, retries=11) - rc = RestClient(jwt="a-token", options=options) - rc._skip_sleep = True - - mock_request.return_value.text = ( - '{"statusCode": 429, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 429 - mock_request.return_value.headers = { - "x-ratelimit-limit": "3", - "x-ratelimit-remaining": "6", - "x-ratelimit-reset": "9", - } - - with self.assertRaises(Auth0Error) as context: - rc.get("the/url") - - self.assertEqual(context.exception.status_code, 429) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - self.assertIsInstance(context.exception, RateLimitError) - self.assertEqual(context.exception.reset_at, 9) - - self.assertEqual(rc._metrics["retries"], rc.MAX_REQUEST_RETRIES()) - - @mock.patch("requests.request") - def test_get_rate_limit_retries_use_exponential_backoff(self, mock_request): - options = RestClientOptions(telemetry=False, retries=10) - rc = RestClient(jwt="a-token", options=options) - rc._skip_sleep = True - - mock_request.return_value.text = ( - '{"statusCode": 429, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 429 - mock_request.return_value.headers = { - "x-ratelimit-limit": "3", - "x-ratelimit-remaining": "6", - "x-ratelimit-reset": "9", - } - - with self.assertRaises(Auth0Error) as context: - rc.get("the/url") - - self.assertEqual(context.exception.status_code, 429) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - self.assertIsInstance(context.exception, RateLimitError) - self.assertEqual(context.exception.reset_at, 9) - - self.assertEqual(rc._metrics["retries"], 10) - self.assertEqual(rc._metrics["retries"], len(rc._metrics["backoff"])) - - baseBackoff = [0] - baseBackoffSum = 0 - finalBackoff = 0 - - for i in range(0, 9): - backoff = 100 * 2**i - baseBackoff.append(backoff) - baseBackoffSum += backoff - - for backoff in rc._metrics["backoff"]: - finalBackoff += backoff - - # Assert that exponential backoff is happening. - self.assertGreaterEqual(rc._metrics["backoff"][1], rc._metrics["backoff"][0]) - self.assertGreaterEqual(rc._metrics["backoff"][2], rc._metrics["backoff"][1]) - self.assertGreaterEqual(rc._metrics["backoff"][3], rc._metrics["backoff"][2]) - self.assertGreaterEqual(rc._metrics["backoff"][4], rc._metrics["backoff"][3]) - self.assertGreaterEqual(rc._metrics["backoff"][5], rc._metrics["backoff"][4]) - self.assertGreaterEqual(rc._metrics["backoff"][6], rc._metrics["backoff"][5]) - self.assertGreaterEqual(rc._metrics["backoff"][7], rc._metrics["backoff"][6]) - self.assertGreaterEqual(rc._metrics["backoff"][8], rc._metrics["backoff"][7]) - self.assertGreaterEqual(rc._metrics["backoff"][9], rc._metrics["backoff"][8]) - - # Ensure jitter is being applied. - self.assertNotEqual(rc._metrics["backoff"][1], baseBackoff[1]) - self.assertNotEqual(rc._metrics["backoff"][2], baseBackoff[2]) - self.assertNotEqual(rc._metrics["backoff"][3], baseBackoff[3]) - self.assertNotEqual(rc._metrics["backoff"][4], baseBackoff[4]) - self.assertNotEqual(rc._metrics["backoff"][5], baseBackoff[5]) - self.assertNotEqual(rc._metrics["backoff"][6], baseBackoff[6]) - self.assertNotEqual(rc._metrics["backoff"][7], baseBackoff[7]) - self.assertNotEqual(rc._metrics["backoff"][8], baseBackoff[8]) - self.assertNotEqual(rc._metrics["backoff"][9], baseBackoff[9]) - - # Ensure subsequent delay is never less than the minimum. - self.assertGreaterEqual(rc._metrics["backoff"][1], rc.MIN_REQUEST_RETRY_DELAY()) - self.assertGreaterEqual(rc._metrics["backoff"][2], rc.MIN_REQUEST_RETRY_DELAY()) - self.assertGreaterEqual(rc._metrics["backoff"][3], rc.MIN_REQUEST_RETRY_DELAY()) - self.assertGreaterEqual(rc._metrics["backoff"][4], rc.MIN_REQUEST_RETRY_DELAY()) - self.assertGreaterEqual(rc._metrics["backoff"][5], rc.MIN_REQUEST_RETRY_DELAY()) - self.assertGreaterEqual(rc._metrics["backoff"][6], rc.MIN_REQUEST_RETRY_DELAY()) - self.assertGreaterEqual(rc._metrics["backoff"][7], rc.MIN_REQUEST_RETRY_DELAY()) - self.assertGreaterEqual(rc._metrics["backoff"][8], rc.MIN_REQUEST_RETRY_DELAY()) - self.assertGreaterEqual(rc._metrics["backoff"][9], rc.MIN_REQUEST_RETRY_DELAY()) - - # Ensure delay is never more than the maximum. - self.assertLessEqual(rc._metrics["backoff"][0], rc.MAX_REQUEST_RETRY_DELAY()) - self.assertLessEqual(rc._metrics["backoff"][1], rc.MAX_REQUEST_RETRY_DELAY()) - self.assertLessEqual(rc._metrics["backoff"][2], rc.MAX_REQUEST_RETRY_DELAY()) - self.assertLessEqual(rc._metrics["backoff"][3], rc.MAX_REQUEST_RETRY_DELAY()) - self.assertLessEqual(rc._metrics["backoff"][4], rc.MAX_REQUEST_RETRY_DELAY()) - self.assertLessEqual(rc._metrics["backoff"][5], rc.MAX_REQUEST_RETRY_DELAY()) - self.assertLessEqual(rc._metrics["backoff"][6], rc.MAX_REQUEST_RETRY_DELAY()) - self.assertLessEqual(rc._metrics["backoff"][7], rc.MAX_REQUEST_RETRY_DELAY()) - self.assertLessEqual(rc._metrics["backoff"][8], rc.MAX_REQUEST_RETRY_DELAY()) - self.assertLessEqual(rc._metrics["backoff"][9], rc.MAX_REQUEST_RETRY_DELAY()) - - # Ensure total delay sum is never more than 10s. - self.assertLessEqual(finalBackoff, 10000) - - @mock.patch("requests.request") - def test_post_rate_limit_retries(self, mock_request): - options = RestClientOptions(telemetry=False, retries=10) - rc = RestClient(jwt="a-token", options=options) - rc._skip_sleep = True - - mock_request.return_value.text = ( - '{"statusCode": 429, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 429 - - with self.assertRaises(Auth0Error) as context: - rc.post("the/url") - - self.assertEqual(context.exception.status_code, 429) - - self.assertEqual(len(rc._metrics["backoff"]), 10) - - @mock.patch("requests.request") - def test_post(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - - mock_request.return_value.text = '{"a": "b"}' - - data = {"some": "data"} - - mock_request.return_value.status_code = 200 - response = rc.post("the/url", data=data) - mock_request.assert_called_with( - "POST", "the/url", json=data, headers=headers, timeout=5.0 - ) - - self.assertEqual(response, {"a": "b"}) - - @mock.patch("requests.request") - def test_post_errors(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - mock_request.return_value.text = ( - '{"statusCode": 999, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 999 - - with self.assertRaises(Auth0Error) as context: - rc.post("the-url") - - self.assertEqual(context.exception.status_code, 999) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - - @mock.patch("requests.request") - def test_post_errors_with_no_message_property(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - mock_request.return_value.text = json.dumps( - {"statusCode": 999, "errorCode": "code", "error": "error"} - ) - mock_request.return_value.status_code = 999 - - with self.assertRaises(Auth0Error) as context: - rc.post("the-url") - - self.assertEqual(context.exception.status_code, 999) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "error") - - @mock.patch("requests.request") - def test_post_errors_with_no_message_or_error_property(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - mock_request.return_value.text = json.dumps( - {"statusCode": 999, "errorCode": "code"} - ) - mock_request.return_value.status_code = 999 - - with self.assertRaises(Auth0Error) as context: - rc.post("the-url") - - self.assertEqual(context.exception.status_code, 999) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "") - - @mock.patch("requests.request") - def test_post_errors_with_message_and_error_property(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - mock_request.return_value.text = json.dumps( - { - "statusCode": 999, - "errorCode": "code", - "error": "error", - "message": "message", - } - ) - mock_request.return_value.status_code = 999 - - with self.assertRaises(Auth0Error) as context: - rc.post("the-url") - - self.assertEqual(context.exception.status_code, 999) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - - @mock.patch("requests.request") - def test_post_error_with_code_property(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - for error_status in [400, 500, None]: - mock_request.return_value.status_code = error_status - mock_request.return_value.text = '{"errorCode": "e0","message": "desc"}' - - with self.assertRaises(Auth0Error) as context: - rc.post("the-url") - - self.assertEqual(context.exception.status_code, error_status) - self.assertEqual(context.exception.error_code, "e0") - self.assertEqual(context.exception.message, "desc") - - @mock.patch("requests.request") - def test_post_error_with_no_error_code(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - for error_status in [400, 500, None]: - mock_request.return_value.status_code = error_status - mock_request.return_value.text = '{"message": "desc"}' - - with self.assertRaises(Auth0Error) as context: - rc.post("the-url") - - self.assertEqual(context.exception.status_code, error_status) - self.assertEqual(context.exception.error_code, "a0.sdk.internal.unknown") - self.assertEqual(context.exception.message, "desc") - - @mock.patch("requests.request") - def test_post_error_with_text_response(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - for error_status in [400, 500, None]: - mock_request.return_value.status_code = error_status - mock_request.return_value.text = "there has been a terrible error" - - with self.assertRaises(Auth0Error) as context: - rc.post("the-url") - - self.assertEqual(context.exception.status_code, error_status) - self.assertEqual(context.exception.error_code, "a0.sdk.internal.unknown") - self.assertEqual( - context.exception.message, "there has been a terrible error" - ) - - @mock.patch("requests.request") - def test_post_error_with_no_response_text(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - for error_status in [400, 500, None]: - mock_request.return_value.status_code = error_status - mock_request.return_value.text = None - - with self.assertRaises(Auth0Error) as context: - rc.post("the-url") - - self.assertEqual(context.exception.status_code, error_status) - self.assertEqual(context.exception.error_code, "a0.sdk.internal.unknown") - self.assertEqual(context.exception.message, "") - - @mock.patch("requests.request") - def test_file_post_content_type_is_none(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - headers = {"Authorization": "Bearer a-token"} - mock_request.return_value.status_code = 200 - mock_request.return_value.text = "Success" - - data = {"some": "data"} - files = [mock.Mock()] - - rc.file_post("the-url", data=data, files=files) - - mock_request.assert_called_once_with( - "POST", "the-url", data=data, files=files, headers=headers, timeout=5.0 - ) - - @mock.patch("requests.request") - def test_put(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - data = {"some": "data"} - - response = rc.put(url="the-url", data=data) - mock_request.assert_called_with( - "PUT", "the-url", json=data, headers=headers, timeout=5.0 - ) - - self.assertEqual(response, ["a", "b"]) - - @mock.patch("requests.request") - def test_put_errors(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - mock_request.return_value.text = ( - '{"statusCode": 999, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 999 - - with self.assertRaises(Auth0Error) as context: - rc.put(url="the/url") - - self.assertEqual(context.exception.status_code, 999) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - - @mock.patch("requests.request") - def test_patch(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - data = {"some": "data"} - - response = rc.patch(url="the-url", data=data) - mock_request.assert_called_with( - "PATCH", "the-url", json=data, headers=headers, timeout=5.0 - ) - - self.assertEqual(response, ["a", "b"]) - - @mock.patch("requests.request") - def test_patch_errors(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - mock_request.return_value.text = ( - '{"statusCode": 999, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 999 - - with self.assertRaises(Auth0Error) as context: - rc.patch(url="the/url") - - self.assertEqual(context.exception.status_code, 999) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - - @mock.patch("requests.request") - def test_delete(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - response = rc.delete(url="the-url/ID") - mock_request.assert_called_with( - "DELETE", "the-url/ID", headers=headers, timeout=5.0 - ) - - self.assertEqual(response, ["a", "b"]) - - @mock.patch("requests.request") - def test_delete_with_body_and_params(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - headers = { - "Authorization": "Bearer a-token", - "Content-Type": "application/json", - } - - mock_request.return_value.text = '["a", "b"]' - mock_request.return_value.status_code = 200 - - data = {"some": "data"} - params = {"A": "param", "B": "param"} - - response = rc.delete(url="the-url/ID", params=params, data=data) - mock_request.assert_called_with( - "DELETE", - "the-url/ID", - headers=headers, - params=params, - json=data, - timeout=5.0, - ) - - self.assertEqual(response, ["a", "b"]) - - @mock.patch("requests.request") - def test_delete_errors(self, mock_request): - rc = RestClient(jwt="a-token", telemetry=False) - - mock_request.return_value.text = ( - '{"statusCode": 999, "errorCode": "code", "message": "message"}' - ) - mock_request.return_value.status_code = 999 - - with self.assertRaises(Auth0Error) as context: - rc.delete(url="the-url") - - self.assertEqual(context.exception.status_code, 999) - self.assertEqual(context.exception.error_code, "code") - self.assertEqual(context.exception.message, "message") - - def test_disabled_telemetry(self): - rc = RestClient(jwt="a-token", telemetry=False) - expected_headers = { - "Content-Type": "application/json", - "Authorization": "Bearer a-token", - } - - self.assertEqual(rc.base_headers, expected_headers) - - def test_enabled_telemetry(self): - rc = RestClient(jwt="a-token", telemetry=True) - - user_agent = rc.base_headers["User-Agent"] - auth0_client_bytes = base64.b64decode(rc.base_headers["Auth0-Client"]) - auth0_client_json = auth0_client_bytes.decode("utf-8") - auth0_client = json.loads(auth0_client_json) - content_type = rc.base_headers["Content-Type"] - - from auth0 import __version__ as auth0_version - - python_version = "{}.{}.{}".format( - sys.version_info.major, sys.version_info.minor, sys.version_info.micro - ) - - client_info = { - "name": "auth0-python", - "version": auth0_version, - "env": {"python": python_version}, - } - - self.assertEqual(user_agent, f"Python/{python_version}") - self.assertEqual(auth0_client, client_info) - self.assertEqual(content_type, "application/json") diff --git a/auth0/test/management/test_roles.py b/auth0/test/management/test_roles.py deleted file mode 100644 index d8ea37a8..00000000 --- a/auth0/test/management/test_roles.py +++ /dev/null @@ -1,196 +0,0 @@ -import unittest -from unittest import mock - -from ...management.roles import Roles - - -class TestRoles(unittest.TestCase): - def test_init_with_optionals(self): - t = Roles(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.roles.RestClient") - def test_list(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.list() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/roles", args[0]) - self.assertEqual( - kwargs["params"], - {"per_page": 25, "page": 0, "include_totals": "true", "name_filter": None}, - ) - - u.list(page=1, per_page=50, include_totals=False, name_filter="little-role") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/roles", args[0]) - self.assertEqual( - kwargs["params"], - { - "per_page": 50, - "page": 1, - "include_totals": "false", - "name_filter": "little-role", - }, - ) - - @mock.patch("auth0.management.roles.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.create({"a": "b", "c": "d"}) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/roles", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.roles.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.get("an-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/roles/an-id", args[0]) - - @mock.patch("auth0.management.roles.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.delete("an-id") - - mock_instance.delete.assert_called_with("https://domain/api/v2/roles/an-id") - - @mock.patch("auth0.management.roles.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.update("an-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/roles/an-id", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.roles.RestClient") - def test_list_users(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.list_users("an-id") - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/roles/an-id/users", args[0]) - self.assertEqual( - kwargs["params"], - { - "per_page": 25, - "page": 0, - "include_totals": "true", - "from": None, - "take": None, - }, - ) - - u.list_users(id="an-id", page=1, per_page=50, include_totals=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/roles/an-id/users", args[0]) - self.assertEqual( - kwargs["params"], - { - "per_page": 50, - "page": 1, - "include_totals": "false", - "from": None, - "take": None, - }, - ) - - u.list_users(id="an-id", from_param=8675309, take=75) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/roles/an-id/users", args[0]) - self.assertEqual( - kwargs["params"], - { - "from": 8675309, - "take": 75, - "per_page": 25, - "page": 0, - "include_totals": "true", - }, - ) - - @mock.patch("auth0.management.roles.RestClient") - def test_add_users(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.add_users("an-id", ["a", "b"]) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/roles/an-id/users", args[0]) - self.assertEqual(kwargs["data"], {"users": ["a", "b"]}) - - @mock.patch("auth0.management.roles.RestClient") - def test_list_permissions(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.list_permissions("an-id") - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/roles/an-id/permissions", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 25, "page": 0, "include_totals": "true"} - ) - - u.list_permissions(id="an-id", page=1, per_page=50, include_totals=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/roles/an-id/permissions", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 50, "page": 1, "include_totals": "false"} - ) - - @mock.patch("auth0.management.roles.RestClient") - def test_remove_permissions(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.remove_permissions("an-id", ["a", "b"]) - - args, kwargs = mock_instance.delete.call_args - - self.assertEqual("https://domain/api/v2/roles/an-id/permissions", args[0]) - self.assertEqual(kwargs["data"], {"permissions": ["a", "b"]}) - - @mock.patch("auth0.management.roles.RestClient") - def test_add_permissions(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Roles(domain="domain", token="jwttoken") - u.add_permissions("an-id", ["a", "b"]) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/roles/an-id/permissions", args[0]) - self.assertEqual(kwargs["data"], {"permissions": ["a", "b"]}) diff --git a/auth0/test/management/test_rules.py b/auth0/test/management/test_rules.py deleted file mode 100644 index e0c2b73d..00000000 --- a/auth0/test/management/test_rules.py +++ /dev/null @@ -1,127 +0,0 @@ -import unittest -from unittest import mock - -from ...management.rules import Rules - - -class TestRules(unittest.TestCase): - def test_init_with_optionals(self): - t = Rules(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.rules.RestClient") - def test_all(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Rules(domain="domain", token="jwttoken") - - # with default params - c.all() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/rules", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "include_fields": "true", - "enabled": "true", - "stage": "login_success", - "page": None, - "per_page": None, - "include_totals": "false", - }, - ) - - # with stage and fields params - c.all(stage="stage", enabled=False, fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/rules", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": "a,b", - "include_fields": "false", - "enabled": "false", - "stage": "stage", - "page": None, - "per_page": None, - "include_totals": "false", - }, - ) - - # with pagination params - c.all(page=3, per_page=27, include_totals=True) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/rules", args[0]) - self.assertEqual( - kwargs["params"], - { - "fields": None, - "include_fields": "true", - "enabled": "true", - "stage": "login_success", - "page": 3, - "per_page": 27, - "include_totals": "true", - }, - ) - - @mock.patch("auth0.management.rules.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Rules(domain="domain", token="jwttoken") - c.create({"a": "b", "c": "d"}) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/rules", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.rules.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Rules(domain="domain", token="jwttoken") - c.get("an-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/rules/an-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": None, "include_fields": "true"}) - - c.get("an-id", fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/rules/an-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": "a,b", "include_fields": "false"}) - - @mock.patch("auth0.management.rules.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Rules(domain="domain", token="jwttoken") - c.delete("an-id") - - mock_instance.delete.assert_called_with("https://domain/api/v2/rules/an-id") - - @mock.patch("auth0.management.rules.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - c = Rules(domain="domain", token="jwttoken") - c.update("an-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/rules/an-id", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) diff --git a/auth0/test/management/test_rules_configs.py b/auth0/test/management/test_rules_configs.py deleted file mode 100644 index 52f1b5b8..00000000 --- a/auth0/test/management/test_rules_configs.py +++ /dev/null @@ -1,47 +0,0 @@ -import unittest -from unittest import mock - -from ...management.rules_configs import RulesConfigs - - -class TestRulesConfigs(unittest.TestCase): - def test_init_with_optionals(self): - t = RulesConfigs( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.rules_configs.RestClient") - def test_all(self, mock_rc): - mock_instance = mock_rc.return_value - - c = RulesConfigs(domain="domain", token="jwttoken") - - c.all() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/rules-configs", args[0]) - - @mock.patch("auth0.management.rules_configs.RestClient") - def test_unset(self, mock_rc): - mock_instance = mock_rc.return_value - - c = RulesConfigs(domain="domain", token="jwttoken") - c.unset("an-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/rules-configs/an-id" - ) - - @mock.patch("auth0.management.rules_configs.RestClient") - def test_set(self, mock_rc): - mock_instance = mock_rc.return_value - - g = RulesConfigs(domain="domain", token="jwttoken") - g.set("key", "MY_RULES_CONFIG_VALUES") - - args, kwargs = mock_instance.put.call_args - self.assertEqual("https://domain/api/v2/rules-configs/key", args[0]) diff --git a/auth0/test/management/test_self_service_profiles.py b/auth0/test/management/test_self_service_profiles.py deleted file mode 100644 index 0bc6fb39..00000000 --- a/auth0/test/management/test_self_service_profiles.py +++ /dev/null @@ -1,124 +0,0 @@ -import unittest -from unittest import mock - -from ...management.self_service_profiles import SelfServiceProfiles - - -class TestSelfServiceProfiles(unittest.TestCase): - def test_init_with_optionals(self): - t = SelfServiceProfiles( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.self_service_profiles.RestClient") - def test_all(self, mock_rc): - mock_instance = mock_rc.return_value - - s = SelfServiceProfiles(domain="domain", token="jwttoken") - s.all() - - mock_instance.get.assert_called_with( - "https://domain/api/v2/self-service-profiles", - params={"page": 0, "per_page": 25, "include_totals": "true"}, - ) - - s.all(page=1, per_page=50, include_totals=False) - - mock_instance.get.assert_called_with( - "https://domain/api/v2/self-service-profiles", - params={"page": 1, "per_page": 50, "include_totals": "false"}, - ) - - @mock.patch("auth0.management.self_service_profiles.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - s = SelfServiceProfiles(domain="domain", token="jwttoken") - s.create({"name": "test"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/self-service-profiles", data={"name": "test"} - ) - - @mock.patch("auth0.management.self_service_profiles.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - s = SelfServiceProfiles(domain="domain", token="jwttoken") - s.get("an-id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/self-service-profiles/an-id" - ) - - @mock.patch("auth0.management.self_service_profiles.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - s = SelfServiceProfiles(domain="domain", token="jwttoken") - s.delete("an-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/self-service-profiles/an-id" - ) - - @mock.patch("auth0.management.self_service_profiles.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - s = SelfServiceProfiles(domain="domain", token="jwttoken") - s.update("an-id", {"a": "b", "c": "d"}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/self-service-profiles/an-id", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.self_service_profiles.RestClient") - def test_get_custom_text(self, mock_rc): - mock_instance = mock_rc.return_value - - s = SelfServiceProfiles(domain="domain", token="jwttoken") - s.get_custom_text("an-id", "en", "page") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/self-service-profiles/an-id/custom-text/en/page" - ) - - @mock.patch("auth0.management.self_service_profiles.RestClient") - def test_update_custom_text(self, mock_rc): - mock_instance = mock_rc.return_value - - s = SelfServiceProfiles(domain="domain", token="jwttoken") - s.update_custom_text("an-id", "en", "page", {"a": "b", "c": "d"}) - - mock_instance.put.assert_called_with( - "https://domain/api/v2/self-service-profiles/an-id/custom-text/en/page", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.self_service_profiles.RestClient") - def test_create_sso_ticket(self, mock_rc): - mock_instance = mock_rc.return_value - - s = SelfServiceProfiles(domain="domain", token="jwttoken") - s.create_sso_ticket("an-id", {"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/self-service-profiles/an-id/sso-ticket", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.self_service_profiles.RestClient") - def test_revoke_sso_ticket(self, mock_rc): - mock_instance = mock_rc.return_value - - s = SelfServiceProfiles(domain="domain", token="jwttoken") - s.revoke_sso_ticket("an-id", "ticket-id") - - mock_instance.post.assert_called_with( - "https://domain/api/v2/self-service-profiles/an-id/sso-ticket/ticket-id/revoke" - ) \ No newline at end of file diff --git a/auth0/test/management/test_stats.py b/auth0/test/management/test_stats.py deleted file mode 100644 index b8ec01c0..00000000 --- a/auth0/test/management/test_stats.py +++ /dev/null @@ -1,42 +0,0 @@ -import unittest -from unittest import mock - -from ...management.stats import Stats - - -class TestStats(unittest.TestCase): - def test_init_with_optionals(self): - t = Stats(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.stats.RestClient") - def test_active_users(self, mock_rc): - mock_instance = mock_rc.return_value - - s = Stats(domain="domain", token="jwttoken") - s.active_users() - - mock_instance.get.assert_called_with( - "https://domain/api/v2/stats/active-users", - ) - - @mock.patch("auth0.management.stats.RestClient") - def test_daily_stats(self, mock_rc): - mock_instance = mock_rc.return_value - - s = Stats(domain="domain", token="jwttoken") - s.daily_stats() - - mock_instance.get.assert_called_with( - "https://domain/api/v2/stats/daily", - params={"from": None, "to": None}, - ) - - s.daily_stats(from_date="12341212", to_date="56785656") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/stats/daily", - params={"from": "12341212", "to": "56785656"}, - ) diff --git a/auth0/test/management/test_tenants.py b/auth0/test/management/test_tenants.py deleted file mode 100644 index 41a03fdd..00000000 --- a/auth0/test/management/test_tenants.py +++ /dev/null @@ -1,51 +0,0 @@ -import unittest -from unittest import mock - -from ...management.tenants import Tenants - - -class TestTenants(unittest.TestCase): - def test_init_with_optionals(self): - t = Tenants(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.tenants.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.get.return_value = {} - - t = Tenants(domain="domain", token="jwttoken") - t.get() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/tenants/settings", args[0]) - self.assertEqual(kwargs["params"], {"fields": None, "include_fields": "true"}) - - t.get(fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/tenants/settings", args[0]) - self.assertEqual(kwargs["params"], {"fields": "a,b", "include_fields": "false"}) - - t.get(fields=["a", "b"], include_fields=True) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/tenants/settings", args[0]) - self.assertEqual(kwargs["params"], {"fields": "a,b", "include_fields": "true"}) - - @mock.patch("auth0.management.tenants.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - mock_instance.patch.return_value = {} - - t = Tenants(domain="domain", token="jwttoken") - t.update({"a": "b", "c": "d"}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/tenants/settings", data={"a": "b", "c": "d"} - ) diff --git a/auth0/test/management/test_tickets.py b/auth0/test/management/test_tickets.py deleted file mode 100644 index 3b854793..00000000 --- a/auth0/test/management/test_tickets.py +++ /dev/null @@ -1,35 +0,0 @@ -import unittest -from unittest import mock - -from ...management.tickets import Tickets - - -class TestTickets(unittest.TestCase): - def test_init_with_optionals(self): - t = Tickets(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.tickets.RestClient") - def test_email(self, mock_rc): - mock_instance = mock_rc.return_value - - t = Tickets(domain="domain", token="jwttoken") - t.create_email_verification({"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/tickets/email-verification", - data={"a": "b", "c": "d"}, - ) - - @mock.patch("auth0.management.tickets.RestClient") - def test_pswd(self, mock_rc): - mock_instance = mock_rc.return_value - - t = Tickets(domain="domain", token="jwttoken") - t.create_pswd_change({"a": "b", "c": "d"}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/tickets/password-change", data={"a": "b", "c": "d"} - ) diff --git a/auth0/test/management/test_user_blocks.py b/auth0/test/management/test_user_blocks.py deleted file mode 100644 index 9057310e..00000000 --- a/auth0/test/management/test_user_blocks.py +++ /dev/null @@ -1,63 +0,0 @@ -import unittest -from unittest import mock - -from ...management.user_blocks import UserBlocks - - -class TestUserBlocks(unittest.TestCase): - def test_init_with_optionals(self): - t = UserBlocks( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.user_blocks.RestClient") - def test_get_by_identifier(self, mock_rc): - mock_instance = mock_rc.return_value - - u = UserBlocks(domain="domain", token="jwttoken") - - u.get_by_identifier("some_identifier") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/user-blocks", - params={"identifier": "some_identifier"}, - ) - - @mock.patch("auth0.management.user_blocks.RestClient") - def test_unblock_by_identifier(self, mock_rc): - mock_instance = mock_rc.return_value - - u = UserBlocks(domain="domain", token="jwttoken") - - u.unblock_by_identifier("test@test.com") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/user-blocks", params={"identifier": "test@test.com"} - ) - - @mock.patch("auth0.management.user_blocks.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - u = UserBlocks(domain="domain", token="jwttoken") - - u.get("auth0|584ad3c228be27504a2c80d5") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/user-blocks/auth0|584ad3c228be27504a2c80d5" - ) - - @mock.patch("auth0.management.user_blocks.RestClient") - def test_unblock(self, mock_rc): - mock_instance = mock_rc.return_value - - u = UserBlocks(domain="domain", token="jwttoken") - - u.unblock("auth0|584ad3c228be27504a2c80d5") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/user-blocks/auth0|584ad3c228be27504a2c80d5" - ) diff --git a/auth0/test/management/test_users.py b/auth0/test/management/test_users.py deleted file mode 100644 index 9cab65f6..00000000 --- a/auth0/test/management/test_users.py +++ /dev/null @@ -1,438 +0,0 @@ -import unittest -from unittest import mock - -from ...management.users import Users - - -class TestUsers(unittest.TestCase): - def test_init_with_optionals(self): - t = Users(domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.users.RestClient") - def test_list(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.list() - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users", args[0]) - self.assertEqual( - kwargs["params"], - { - "per_page": 25, - "page": 0, - "include_totals": "true", - "sort": None, - "connection": None, - "fields": None, - "include_fields": "true", - "q": None, - "search_engine": None, - }, - ) - - u.list( - page=1, - per_page=50, - sort="s", - connection="con", - q="q", - search_engine="se", - include_totals=False, - fields=["a", "b"], - include_fields=False, - ) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users", args[0]) - self.assertEqual( - kwargs["params"], - { - "per_page": 50, - "page": 1, - "include_totals": "false", - "sort": "s", - "connection": "con", - "fields": "a,b", - "include_fields": "false", - "q": "q", - "search_engine": "se", - }, - ) - - @mock.patch("auth0.management.users.RestClient") - def test_create(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.create({"a": "b", "c": "d"}) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/users", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.users.RestClient") - def test_get(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.get("an-id") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users/an-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": None, "include_fields": "true"}) - - u.get("an-id", fields=["a", "b"], include_fields=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users/an-id", args[0]) - self.assertEqual(kwargs["params"], {"fields": "a,b", "include_fields": "false"}) - - @mock.patch("auth0.management.users.RestClient") - def test_delete(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.delete("an-id") - - mock_instance.delete.assert_called_with("https://domain/api/v2/users/an-id") - - @mock.patch("auth0.management.users.RestClient") - def test_update(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.update("an-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.patch.call_args - - self.assertEqual("https://domain/api/v2/users/an-id", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.users.RestClient") - def test_list_organizations(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.list_organizations("an-id") - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/users/an-id/organizations", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 25, "page": 0, "include_totals": "true"} - ) - - u.list_organizations(id="an-id", page=1, per_page=50, include_totals=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users/an-id/organizations", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 50, "page": 1, "include_totals": "false"} - ) - - @mock.patch("auth0.management.users.RestClient") - def test_list_roles(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.list_roles("an-id") - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/users/an-id/roles", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 25, "page": 0, "include_totals": "true"} - ) - - u.list_roles(id="an-id", page=1, per_page=50, include_totals=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users/an-id/roles", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 50, "page": 1, "include_totals": "false"} - ) - - @mock.patch("auth0.management.users.RestClient") - def test_remove_roles(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.remove_roles("an-id", ["a", "b"]) - - args, kwargs = mock_instance.delete.call_args - - self.assertEqual("https://domain/api/v2/users/an-id/roles", args[0]) - self.assertEqual(kwargs["data"], {"roles": ["a", "b"]}) - - @mock.patch("auth0.management.users.RestClient") - def test_add_roles(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.add_roles("an-id", ["a", "b"]) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/users/an-id/roles", args[0]) - self.assertEqual(kwargs["data"], {"roles": ["a", "b"]}) - - @mock.patch("auth0.management.users.RestClient") - def test_list_permissions(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.list_permissions("an-id") - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/users/an-id/permissions", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 25, "page": 0, "include_totals": "true"} - ) - - u.list_permissions(id="an-id", page=1, per_page=50, include_totals=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users/an-id/permissions", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 50, "page": 1, "include_totals": "false"} - ) - - @mock.patch("auth0.management.users.RestClient") - def test_remove_permissions(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.remove_permissions("an-id", ["a", "b"]) - - args, kwargs = mock_instance.delete.call_args - - self.assertEqual("https://domain/api/v2/users/an-id/permissions", args[0]) - self.assertEqual(kwargs["data"], {"permissions": ["a", "b"]}) - - @mock.patch("auth0.management.users.RestClient") - def test_add_permissions(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.add_permissions("an-id", ["a", "b"]) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/users/an-id/permissions", args[0]) - self.assertEqual(kwargs["data"], {"permissions": ["a", "b"]}) - - @mock.patch("auth0.management.users.RestClient") - def test_delete_multifactor(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.delete_multifactor("an-id", "provider") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/users/an-id/multifactor/provider" - ) - - @mock.patch("auth0.management.users.RestClient") - def test_delete_authenticators(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.delete_authenticators("an-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/users/an-id/authenticators" - ) - - @mock.patch("auth0.management.users.RestClient") - def test_unlink_user_account(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.unlink_user_account("an-id", "provider", "user-id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/users/an-id/identities/provider/user-id" - ) - - @mock.patch("auth0.management.users.RestClient") - def test_link_user_account(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.link_user_account("user-id", {"a": "b", "c": "d"}) - - args, kwargs = mock_instance.post.call_args - - self.assertEqual("https://domain/api/v2/users/user-id/identities", args[0]) - self.assertEqual(kwargs["data"], {"a": "b", "c": "d"}) - - @mock.patch("auth0.management.users.RestClient") - def test_regenerate_recovery_code(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.regenerate_recovery_code("user-id") - - mock_instance.post.assert_called_with( - "https://domain/api/v2/users/user-id/recovery-code-regeneration" - ) - - @mock.patch("auth0.management.users.RestClient") - def test_get_guardian_enrollments(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.get_guardian_enrollments("user-id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/users/user-id/enrollments" - ) - - @mock.patch("auth0.management.users.RestClient") - def test_get_log_events(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.get_log_events("used_id") - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/users/used_id/logs", args[0]) - self.assertEqual(kwargs["params"]["page"], 0) - self.assertEqual(kwargs["params"]["per_page"], 50) - self.assertIsNone(kwargs["params"]["sort"]) - self.assertEqual(kwargs["params"]["include_totals"], "false") - - @mock.patch("auth0.management.users.RestClient") - def test_invalidate_remembered_browsers(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.invalidate_remembered_browsers("user-id") - - args, kwargs = mock_instance.post.call_args - self.assertEqual( - "https://domain/api/v2/users/user-id/multifactor/actions/invalidate-remember-browser", - args[0], - ) - - @mock.patch("auth0.management.users.RestClient") - def test_get_authentication_methods(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.get_authentication_methods("user_id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/users/user_id/authentication-methods" - ) - - @mock.patch("auth0.management.users.RestClient") - def test_get_authentication_method_by_id(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.get_authentication_method_by_id("user_id", "authentication_method_id") - - mock_instance.get.assert_called_with( - "https://domain/api/v2/users/user_id/authentication-methods/authentication_method_id" - ) - - @mock.patch("auth0.management.users.RestClient") - def test_create_authentication_method(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.create_authentication_method("user_id", {}) - - mock_instance.post.assert_called_with( - "https://domain/api/v2/users/user_id/authentication-methods", data={} - ) - - @mock.patch("auth0.management.users.RestClient") - def test_update_authentication_methods(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.update_authentication_methods("user_id", {}) - - mock_instance.put.assert_called_with( - "https://domain/api/v2/users/user_id/authentication-methods", data={} - ) - - @mock.patch("auth0.management.users.RestClient") - def test_update_authentication_method_by_id(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.update_authentication_method_by_id("user_id", "authentication_method_id", {}) - - mock_instance.patch.assert_called_with( - "https://domain/api/v2/users/user_id/authentication-methods/authentication_method_id", - data={}, - ) - - @mock.patch("auth0.management.users.RestClient") - def test_delete_authentication_methods(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.delete_authentication_methods("user_id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/users/user_id/authentication-methods" - ) - - @mock.patch("auth0.management.users.RestClient") - def test_delete_authentication_method_by_id(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.delete_authentication_method_by_id("user_id", "authentication_method_id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/users/user_id/authentication-methods/authentication_method_id" - ) - - @mock.patch("auth0.management.users.RestClient") - def test_list_tokensets(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.list_tokensets("an-id") - - args, kwargs = mock_instance.get.call_args - self.assertEqual("https://domain/api/v2/users/an-id/federated-connections-tokensets", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 25, "page": 0, "include_totals": "true"} - ) - - u.list_tokensets(id="an-id", page=1, per_page=50, include_totals=False) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users/an-id/federated-connections-tokensets", args[0]) - self.assertEqual( - kwargs["params"], {"per_page": 50, "page": 1, "include_totals": "false"} - ) - - @mock.patch("auth0.management.users.RestClient") - def test_delete_tokenset_by_id(self, mock_rc): - mock_instance = mock_rc.return_value - - u = Users(domain="domain", token="jwttoken") - u.delete_tokenset_by_id("user_id", "tokenset_id") - - mock_instance.delete.assert_called_with( - "https://domain/api/v2/users/user_id/federated-connections-tokensets/tokenset_id" - ) \ No newline at end of file diff --git a/auth0/test/management/test_users_by_email.py b/auth0/test/management/test_users_by_email.py deleted file mode 100644 index 810c90e1..00000000 --- a/auth0/test/management/test_users_by_email.py +++ /dev/null @@ -1,41 +0,0 @@ -import unittest -from unittest import mock - -from ...management.users_by_email import UsersByEmail - - -class TestUsersByEmail(unittest.TestCase): - def test_init_with_optionals(self): - t = UsersByEmail( - domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2) - ) - self.assertEqual(t.client.options.timeout, (10, 2)) - telemetry_header = t.client.base_headers.get("Auth0-Client", None) - self.assertEqual(telemetry_header, None) - - @mock.patch("auth0.management.users_by_email.RestClient") - def test_search_users_by_email(self, mock_rc): - mock_instance = mock_rc.return_value - - u = UsersByEmail(domain="domain", token="jwttoken") - u.search_users_by_email("A@B.com") - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users-by-email", args[0]) - self.assertEqual( - kwargs["params"], - {"email": "A@B.com", "fields": None, "include_fields": "true"}, - ) - - u.search_users_by_email( - email="a@b.com", fields=["a", "b"], include_fields=False - ) - - args, kwargs = mock_instance.get.call_args - - self.assertEqual("https://domain/api/v2/users-by-email", args[0]) - self.assertEqual( - kwargs["params"], - {"email": "a@b.com", "fields": "a,b", "include_fields": "false"}, - ) diff --git a/auth0/test_async/conftest.py b/auth0/test_async/conftest.py deleted file mode 100644 index 1247142f..00000000 --- a/auth0/test_async/conftest.py +++ /dev/null @@ -1,7 +0,0 @@ -import pytest -import random - -@pytest.fixture(autouse=True) -def set_random_seed(): - random.seed(42) - print("Random seeded to 42") \ No newline at end of file diff --git a/auth0/test_async/test_async_auth0.py b/auth0/test_async/test_async_auth0.py deleted file mode 100644 index 753666b5..00000000 --- a/auth0/test_async/test_async_auth0.py +++ /dev/null @@ -1,75 +0,0 @@ -import re -import unittest -from unittest.mock import ANY, MagicMock - -import pytest -from aioresponses import CallbackResult, aioresponses -from yarl import URL - -from auth0.management.async_auth0 import AsyncAuth0 as Auth0 - -clients = re.compile(r"^https://example\.com/api/v2/clients.*") -factors = re.compile(r"^https://example\.com/api/v2/guardian/factors.*") -payload = {"foo": "bar"} - - -def get_callback(status=200): - mock = MagicMock(return_value=CallbackResult(status=status, payload=payload)) - - def callback(url, **kwargs): - return mock(url, **kwargs) - - return callback, mock - - -class TestAuth0(unittest.IsolatedAsyncioTestCase): - @pytest.mark.asyncio - @aioresponses() - async def test_get(self, mocked): - callback, mock = get_callback() - - mocked.get(clients, callback=callback) - - auth0 = Auth0(domain="example.com", token="jwt") - - self.assertEqual(await auth0.clients.all_async(), payload) - - mock.assert_called_with( - URL("https://example.com/api/v2/clients?include_fields=true"), - allow_redirects=True, - params={"include_fields": "true"}, - headers=ANY, - timeout=ANY, - ) - - @pytest.mark.asyncio - @aioresponses() - async def test_shared_session(self, mocked): - callback, mock = get_callback() - callback2, mock2 = get_callback() - - mocked.get(clients, callback=callback) - mocked.put(factors, callback=callback2) - - async with Auth0(domain="example.com", token="jwt") as auth0: - self.assertEqual(await auth0.clients.all_async(), payload) - self.assertEqual( - await auth0.guardian.update_factor_async("factor-1", {"factor": 1}), - payload, - ) - - mock.assert_called_with( - URL("https://example.com/api/v2/clients?include_fields=true"), - allow_redirects=True, - params={"include_fields": "true"}, - headers=ANY, - timeout=ANY, - ) - - mock2.assert_called_with( - URL("https://example.com/api/v2/guardian/factors/factor-1"), - allow_redirects=True, - json={"factor": 1}, - headers=ANY, - timeout=ANY, - ) diff --git a/auth0/test_async/test_async_token_verifier.py b/auth0/test_async/test_async_token_verifier.py deleted file mode 100644 index 7559c693..00000000 --- a/auth0/test_async/test_async_token_verifier.py +++ /dev/null @@ -1,289 +0,0 @@ -import time -import unittest -from unittest.mock import ANY - -import jwt -import pytest -from aioresponses import aioresponses -from cryptography.hazmat.primitives import serialization -from yarl import URL - -from .. import TokenValidationError -from ..authentication.async_token_verifier import ( - AsyncAsymmetricSignatureVerifier, - AsyncJwksFetcher, - AsyncTokenVerifier, -) -from ..test.authentication.test_token_verifier import ( - JWKS_RESPONSE_MULTIPLE_KEYS, - JWKS_RESPONSE_SINGLE_KEY, - RSA_PUB_KEY_1_JWK, - RSA_PUB_KEY_1_PEM, - RSA_PUB_KEY_2_PEM, -) -from .test_asyncify import get_callback - -JWKS_URI = "https://example.auth0.com/.well-known/jwks.json" - -PRIVATE_KEY = """-----BEGIN RSA PRIVATE KEY----- -MIICXAIBAAKBgQDfytWVSk/4Z6rNu8UZ7C4tnU9x0vj5FCaj4awKZlxVgOR1Kcen -QqDOxJdrXXanTBJbZwh8pk+HpWvqDVgVmKhnt+OkgF//hIXZoJMhDOFVzX504kiZ -cu3bu7kFs+PUfKw5s59tmETFPseA/fIrad9YXHisMkNmPWhuKYJ3WfZAaQIDAQAB -AoGADPSfHL9qlcTanIJsTK3hln5u5PYDt9e0zPP5k7iNS93kW+wJROOUj6PN6EdG -4TSEM4ppcV3naMDo2GnhWY624P6LUB+CbDFzjQKq805vrxJuFnq50blscwVK/ffP -kODBm/gwk+FaliRpQTDAAPWkKbkRfkmPx4JMEmTDBQ45diECQQDxw3qp2+wa5WP5 -9w7AYrDPq4Fd6gIFcmxracROUcdhhMmVHKA9DzTWY46cSoWZoChYhQhhyj8dlP8q -El8aevN9AkEA7PhxcNyff8aehqEQ/Z38bm3P+GgB9EkRinjesba2CqhEI5okzvb7 -OIYdszgQUBqGKlST0a7s9KuTpd7moyy8XQJAY8hjk0HCxCMTTXMLspnJEh1eKo3P -wcHFP9wKeqzEFtrAfHuxIyJok2fJz3XuiEaTAF3/5KSdwi7h1dJ5UCuY3QJAM9rF -0CGnEWngJKu4MRdSNsP232+7Bb67hOagLJlDyp85keTYKyXmoV7PvvkEsNKtCzRI -yHiTx5KIE6LsK0bNzQJBAMV+1KyI8ua1XmqLDaOexvBPM86HnuP+8u5CthgrXyGm -nh9gurwbs/lBRYV/d4XBLj+dzHb2zC0Jo7u96wrOObw= ------END RSA PRIVATE KEY-----""" - -PUBLIC_KEY = { - "kty": "RSA", - "e": "AQAB", - "kid": "kid-1", - "n": "38rVlUpP-GeqzbvFGewuLZ1PcdL4-RQmo-GsCmZcVYDkdSnHp0KgzsSXa112p0wSW2cIfKZPh6Vr6g1YFZioZ7fjpIBf_4SF2aCTIQzhVc1-dOJImXLt27u5BbPj1HysObOfbZhExT7HgP3yK2nfWFx4rDJDZj1obimCd1n2QGk", -} - - -def get_pem_bytes(rsa_public_key): - return rsa_public_key.public_bytes( - serialization.Encoding.PEM, serialization.PublicFormat.SubjectPublicKeyInfo - ) - - -class TestAsyncAsymmetricSignatureVerifier(unittest.IsolatedAsyncioTestCase): - @pytest.mark.asyncio - @aioresponses() - async def test_async_asymmetric_verifier_fetches_key(self, mocked): - callback, mock = get_callback(200, JWKS_RESPONSE_SINGLE_KEY) - mocked.get(JWKS_URI, callback=callback) - - verifier = AsyncAsymmetricSignatureVerifier(JWKS_URI) - - key = await verifier._fetch_key("test-key-1") - - self.assertEqual(get_pem_bytes(key), RSA_PUB_KEY_1_PEM) - - -class TestAsyncJwksFetcher(unittest.IsolatedAsyncioTestCase): - @pytest.mark.asyncio - @aioresponses() - @unittest.mock.patch( - "auth0.authentication.token_verifier.time.time", return_value=0 - ) - async def test_async_get_jwks_json_twice_on_cache_expired( - self, mocked, mocked_time - ): - fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=100) - - callback, mock = get_callback(200, JWKS_RESPONSE_SINGLE_KEY) - mocked.get(JWKS_URI, callback=callback) - mocked.get(JWKS_URI, callback=callback) - - key_1 = await fetcher.get_key("test-key-1") - expected_key_1_pem = get_pem_bytes(key_1) - self.assertEqual(expected_key_1_pem, RSA_PUB_KEY_1_PEM) - - mock.assert_called_with( - URL("https://example.auth0.com/.well-known/jwks.json"), - allow_redirects=True, - params=None, - headers=ANY, - timeout=ANY, - ) - self.assertEqual(mock.call_count, 1) - - mocked_time.return_value = 200 - - # 2 seconds has passed, cache should be expired - key_1 = await fetcher.get_key("test-key-1") - expected_key_1_pem = get_pem_bytes(key_1) - self.assertEqual(expected_key_1_pem, RSA_PUB_KEY_1_PEM) - - mock.assert_called_with( - URL("https://example.auth0.com/.well-known/jwks.json"), - allow_redirects=True, - params=None, - headers=ANY, - timeout=ANY, - ) - self.assertEqual(mock.call_count, 2) - - @pytest.mark.asyncio - @aioresponses() - async def test_async_get_jwks_json_once_on_cache_hit(self, mocked): - fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=1) - - callback, mock = get_callback(200, JWKS_RESPONSE_MULTIPLE_KEYS) - mocked.get(JWKS_URI, callback=callback) - mocked.get(JWKS_URI, callback=callback) - - key_1 = await fetcher.get_key("test-key-1") - key_2 = await fetcher.get_key("test-key-2") - expected_key_1_pem = get_pem_bytes(key_1) - expected_key_2_pem = get_pem_bytes(key_2) - self.assertEqual(expected_key_1_pem, RSA_PUB_KEY_1_PEM) - self.assertEqual(expected_key_2_pem, RSA_PUB_KEY_2_PEM) - - mock.assert_called_with( - URL("https://example.auth0.com/.well-known/jwks.json"), - allow_redirects=True, - params=None, - headers=ANY, - timeout=ANY, - ) - self.assertEqual(mock.call_count, 1) - - @pytest.mark.asyncio - @aioresponses() - async def test_async_fetches_jwks_json_forced_on_cache_miss(self, mocked): - fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=1) - - callback, mock = get_callback(200, {"keys": [RSA_PUB_KEY_1_JWK]}) - mocked.get(JWKS_URI, callback=callback) - - # Triggers the first call - key_1 = await fetcher.get_key("test-key-1") - expected_key_1_pem = get_pem_bytes(key_1) - self.assertEqual(expected_key_1_pem, RSA_PUB_KEY_1_PEM) - - mock.assert_called_with( - URL("https://example.auth0.com/.well-known/jwks.json"), - allow_redirects=True, - params=None, - headers=ANY, - timeout=ANY, - ) - self.assertEqual(mock.call_count, 1) - - callback, mock = get_callback(200, JWKS_RESPONSE_MULTIPLE_KEYS) - mocked.get(JWKS_URI, callback=callback) - - # Triggers the second call - key_2 = await fetcher.get_key("test-key-2") - expected_key_2_pem = get_pem_bytes(key_2) - self.assertEqual(expected_key_2_pem, RSA_PUB_KEY_2_PEM) - - mock.assert_called_with( - URL("https://example.auth0.com/.well-known/jwks.json"), - allow_redirects=True, - params=None, - headers=ANY, - timeout=ANY, - ) - self.assertEqual(mock.call_count, 1) - - @pytest.mark.asyncio - @aioresponses() - async def test_async_fetches_jwks_json_once_on_cache_miss(self, mocked): - fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=1) - - callback, mock = get_callback(200, JWKS_RESPONSE_SINGLE_KEY) - mocked.get(JWKS_URI, callback=callback) - - with self.assertRaises(Exception) as err: - await fetcher.get_key("missing-key") - - mock.assert_called_with( - URL("https://example.auth0.com/.well-known/jwks.json"), - allow_redirects=True, - params=None, - headers=ANY, - timeout=ANY, - ) - self.assertEqual( - str(err.exception), 'RSA Public Key with ID "missing-key" was not found.' - ) - self.assertEqual(mock.call_count, 1) - - @pytest.mark.asyncio - @aioresponses() - async def test_async_fails_to_fetch_jwks_json_after_retrying_twice(self, mocked): - fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=1) - - callback, mock = get_callback(500, {}) - mocked.get(JWKS_URI, callback=callback) - mocked.get(JWKS_URI, callback=callback) - - with self.assertRaises(Exception) as err: - await fetcher.get_key("id1") - - mock.assert_called_with( - URL("https://example.auth0.com/.well-known/jwks.json"), - allow_redirects=True, - params=None, - headers=ANY, - timeout=ANY, - ) - self.assertEqual( - str(err.exception), 'RSA Public Key with ID "id1" was not found.' - ) - self.assertEqual(mock.call_count, 2) - - -class TestAsyncTokenVerifier(unittest.IsolatedAsyncioTestCase): - @pytest.mark.asyncio - @aioresponses() - async def test_RS256_token_signature_passes(self, mocked): - callback, mock = get_callback(200, {"keys": [PUBLIC_KEY]}) - mocked.get(JWKS_URI, callback=callback) - - issuer = "https://tokens-test.auth0.com/" - audience = "tokens-test-123" - token = jwt.encode( - { - "iss": issuer, - "sub": "auth0|123456789", - "aud": audience, - "exp": int(time.time()) + 86400, - "iat": int(time.time()), - }, - PRIVATE_KEY, - algorithm="RS256", - headers={"kid": "kid-1"}, - ) - - tv = AsyncTokenVerifier( - signature_verifier=AsyncAsymmetricSignatureVerifier(JWKS_URI), - issuer=issuer, - audience=audience, - ) - payload = await tv.verify(token) - self.assertEqual(payload["sub"], "auth0|123456789") - - @pytest.mark.asyncio - @aioresponses() - async def test_RS256_token_signature_fails(self, mocked): - callback, mock = get_callback( - 200, {"keys": [RSA_PUB_KEY_1_JWK]} - ) # different pub key - mocked.get(JWKS_URI, callback=callback) - - issuer = "https://tokens-test.auth0.com/" - audience = "tokens-test-123" - token = jwt.encode( - { - "iss": issuer, - "sub": "auth0|123456789", - "aud": audience, - "exp": int(time.time()) + 86400, - "iat": int(time.time()), - }, - PRIVATE_KEY, - algorithm="RS256", - headers={"kid": "test-key-1"}, - ) - - tv = AsyncTokenVerifier( - signature_verifier=AsyncAsymmetricSignatureVerifier(JWKS_URI), - issuer=issuer, - audience=audience, - ) - - with self.assertRaises(TokenValidationError) as err: - await tv.verify(token) - self.assertEqual(str(err.exception), "Invalid token signature.") diff --git a/auth0/test_async/test_asyncify.py b/auth0/test_async/test_asyncify.py deleted file mode 100644 index acc3f54d..00000000 --- a/auth0/test_async/test_asyncify.py +++ /dev/null @@ -1,263 +0,0 @@ -import base64 -import json -import platform -import re -import sys -import unittest -from tempfile import TemporaryFile -from unittest.mock import ANY, MagicMock - -import aiohttp -import pytest -from aioresponses import CallbackResult, aioresponses -from yarl import URL - -from auth0.asyncify import asyncify -from auth0.authentication import GetToken, Users -from auth0.management import Clients, Guardian, Jobs - -clients = re.compile(r"^https://example\.com/api/v2/clients.*") -token = re.compile(r"^https://example\.com/oauth/token.*") -user_info = re.compile(r"^https://example\.com/userinfo.*") -factors = re.compile(r"^https://example\.com/api/v2/guardian/factors.*") -users_imports = re.compile(r"^https://example\.com/api/v2/jobs/users-imports.*") -payload = {"foo": "bar"} - -telemetry = base64.b64encode( - json.dumps( - { - "name": "auth0-python", - "version": sys.modules["auth0"].__version__, - "env": { - "python": platform.python_version(), - }, - } - ).encode("utf-8") -).decode() - -headers = { - "User-Agent": f"Python/{platform.python_version()}", - "Authorization": "Bearer jwt", - "Content-Type": "application/json", - "Auth0-Client": telemetry, -} - - -def get_callback(status=200, response=None): - mock = MagicMock( - return_value=CallbackResult(status=status, payload=response or payload) - ) - - def callback(url, **kwargs): - return mock(url, **kwargs) - - return callback, mock - - -class TestAsyncify(unittest.IsolatedAsyncioTestCase): - @pytest.mark.asyncio - @aioresponses() - async def test_get(self, mocked): - callback, mock = get_callback() - mocked.get(clients, callback=callback) - c = asyncify(Clients)(domain="example.com", token="jwt") - self.assertEqual(await c.all_async(), payload) - mock.assert_called_with( - URL("https://example.com/api/v2/clients?include_fields=true"), - allow_redirects=True, - params={"include_fields": "true"}, - headers=headers, - timeout=ANY, - ) - - @pytest.mark.asyncio - @aioresponses() - async def test_post(self, mocked): - callback, mock = get_callback() - mocked.post(clients, callback=callback) - c = asyncify(Clients)(domain="example.com", token="jwt") - data = {"client": 1} - self.assertEqual(await c.create_async(data), payload) - mock.assert_called_with( - URL("https://example.com/api/v2/clients"), - allow_redirects=True, - json=data, - headers=headers, - timeout=ANY, - ) - - @pytest.mark.asyncio - @aioresponses() - async def test_post_auth(self, mocked): - callback, mock = get_callback() - mocked.post(token, callback=callback) - c = asyncify(GetToken)("example.com", "cid", client_secret="clsec") - self.assertEqual( - await c.login_async(username="usrnm", password="pswd"), payload - ) - mock.assert_called_with( - URL("https://example.com/oauth/token"), - allow_redirects=True, - json={ - "client_id": "cid", - "username": "usrnm", - "password": "pswd", - "realm": None, - "scope": None, - "audience": None, - "grant_type": "http://auth0.com/oauth/grant-type/password-realm", - "client_secret": "clsec", - }, - headers={i: headers[i] for i in headers if i != "Authorization"}, - timeout=ANY, - ) - - @pytest.mark.asyncio - @aioresponses() - async def test_user_info(self, mocked): - callback, mock = get_callback() - mocked.get(user_info, callback=callback) - c = asyncify(Users)(domain="example.com") - self.assertEqual( - await c.userinfo_async(access_token="access-token-example"), payload - ) - mock.assert_called_with( - URL("https://example.com/userinfo"), - headers={**headers, "Authorization": "Bearer access-token-example"}, - timeout=ANY, - allow_redirects=True, - params=None, - ) - - @pytest.mark.asyncio - @aioresponses() - async def test_file_post(self, mocked): - callback, mock = get_callback() - mocked.post(users_imports, callback=callback) - j = asyncify(Jobs)(domain="example.com", token="jwt") - users = TemporaryFile() - self.assertEqual(await j.import_users_async("connection-1", users), payload) - file_port_headers = headers.copy() - file_port_headers.pop("Content-Type") - mock.assert_called_with( - URL("https://example.com/api/v2/jobs/users-imports"), - allow_redirects=True, - data={ - "connection_id": "connection-1", - "upsert": "false", - "send_completion_email": "true", - "external_id": None, - "users": users, - }, - headers=file_port_headers, - timeout=ANY, - ) - users.close() - - @pytest.mark.asyncio - @aioresponses() - async def test_patch(self, mocked): - callback, mock = get_callback() - mocked.patch(clients, callback=callback) - c = asyncify(Clients)(domain="example.com", token="jwt") - data = {"client": 1} - self.assertEqual(await c.update_async("client-1", data), payload) - mock.assert_called_with( - URL("https://example.com/api/v2/clients/client-1"), - allow_redirects=True, - json=data, - headers=headers, - timeout=ANY, - ) - - @pytest.mark.asyncio - @aioresponses() - async def test_put(self, mocked): - callback, mock = get_callback() - mocked.put(factors, callback=callback) - g = asyncify(Guardian)(domain="example.com", token="jwt") - data = {"factor": 1} - self.assertEqual(await g.update_factor_async("factor-1", data), payload) - mock.assert_called_with( - URL("https://example.com/api/v2/guardian/factors/factor-1"), - allow_redirects=True, - json=data, - headers=headers, - timeout=ANY, - ) - - @pytest.mark.asyncio - @aioresponses() - async def test_delete(self, mocked): - callback, mock = get_callback() - mocked.delete(clients, callback=callback) - c = asyncify(Clients)(domain="example.com", token="jwt") - self.assertEqual(await c.delete_async("client-1"), payload) - mock.assert_called_with( - URL("https://example.com/api/v2/clients/client-1"), - allow_redirects=True, - params={}, - json=None, - headers=headers, - timeout=ANY, - ) - - @pytest.mark.asyncio - @aioresponses() - async def test_shared_session(self, mocked): - callback, mock = get_callback() - mocked.get(clients, callback=callback) - async with asyncify(Clients)(domain="example.com", token="jwt") as c: - self.assertEqual(await c.all_async(), payload) - mock.assert_called_with( - URL("https://example.com/api/v2/clients?include_fields=true"), - allow_redirects=True, - params={"include_fields": "true"}, - headers=headers, - timeout=ANY, - ) - - @pytest.mark.asyncio - @aioresponses() - async def test_rate_limit(self, mocked): - callback, mock = get_callback(status=429) - mocked.get(clients, callback=callback) - mocked.get(clients, callback=callback) - mocked.get(clients, callback=callback) - mocked.get(clients, payload=payload) - c = asyncify(Clients)(domain="example.com", token="jwt") - rest_client = c._async_client.client - rest_client._skip_sleep = True - self.assertEqual(await c.all_async(), payload) - self.assertEqual(3, mock.call_count) - (a, b, c) = rest_client._metrics["backoff"] - self.assertTrue(100 <= a < b < c <= 1000) - - @pytest.mark.asyncio - @aioresponses() - async def test_rate_limit_post(self, mocked): - callback, mock = get_callback(status=429) - mocked.post(clients, callback=callback) - mocked.post(clients, callback=callback) - mocked.post(clients, callback=callback) - mocked.post(clients, payload=payload) - c = asyncify(Clients)(domain="example.com", token="jwt") - rest_client = c._async_client.client - rest_client._skip_sleep = True - self.assertEqual(await c.create_async({}), payload) - self.assertEqual(3, mock.call_count) - - @pytest.mark.asyncio - @aioresponses() - async def test_timeout(self, mocked): - callback, mock = get_callback() - mocked.get(clients, callback=callback) - c = asyncify(Clients)(domain="example.com", token="jwt", timeout=(8.8, 9.9)) - self.assertEqual(await c.all_async(), payload) - mock.assert_called_with( - ANY, - allow_redirects=ANY, - params=ANY, - headers=ANY, - timeout=aiohttp.ClientTimeout(sock_connect=8.8, sock_read=9.9), - ) diff --git a/auth0/utils.py b/auth0/utils.py deleted file mode 100644 index 807e9016..00000000 --- a/auth0/utils.py +++ /dev/null @@ -1,11 +0,0 @@ -def is_async_available() -> bool: - try: - import asyncio - - import aiohttp - - return True - except ImportError: # pragma: no cover - pass - - return False diff --git a/dockerfile b/dockerfile deleted file mode 100644 index 2cf2ab93..00000000 --- a/dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM python:3 - -WORKDIR /home/app - -COPY . /home/app -COPY ./.pypirc ~/ -RUN cp /home/app/.pypirc ~ - -CMD python setup.py sdist bdist upload diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index f370b898..00000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= --keep-going -n -a -SPHINXBUILD ?= sphinx-build -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 46a138e1..00000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=source -set BUILDDIR=../auth0 - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs/source/authentication.rst b/docs/source/authentication.rst deleted file mode 100644 index f74fb157..00000000 --- a/docs/source/authentication.rst +++ /dev/null @@ -1,82 +0,0 @@ -authentication package -========================= - -authentication.base module ------------------------------ - -.. automodule:: auth0.authentication.base - :members: - :undoc-members: - :show-inheritance: - -authentication.database module ---------------------------------- - -.. automodule:: auth0.authentication.database - :members: - :undoc-members: - :show-inheritance: - -authentication.delegated module ----------------------------------- - -.. automodule:: auth0.authentication.delegated - :members: - :undoc-members: - :show-inheritance: - -authentication.enterprise module ------------------------------------ - -.. automodule:: auth0.authentication.enterprise - :members: - :undoc-members: - :show-inheritance: - -authentication.get\_token module ------------------------------------ - -.. automodule:: auth0.authentication.get_token - :members: - :undoc-members: - :show-inheritance: - -authentication.passwordless module -------------------------------------- - -.. automodule:: auth0.authentication.passwordless - :members: - :undoc-members: - :show-inheritance: - -authentication.revoke\_token module --------------------------------------- - -.. automodule:: auth0.authentication.revoke_token - :members: - :undoc-members: - :show-inheritance: - -authentication.social module -------------------------------- - -.. automodule:: auth0.authentication.social - :members: - :undoc-members: - :show-inheritance: - -authentication.token\_verifier module ----------------------------------------- - -.. automodule:: auth0.authentication.token_verifier - :members: - :undoc-members: - :show-inheritance: - -authentication.users module ------------------------------- - -.. automodule:: auth0.authentication.users - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/conf.py b/docs/source/conf.py deleted file mode 100644 index c62037d4..00000000 --- a/docs/source/conf.py +++ /dev/null @@ -1,104 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import re -import sys - -sys.path.insert(0, os.path.abspath(".")) -sys.path.insert(0, os.path.abspath("../..")) - - -# -- helper function to read a file without importing it -def read(*names, **kwargs): - with open( - os.path.join(os.path.dirname(__file__)[:-7], *names), - encoding=kwargs.get("encoding", "utf8"), - ) as fp: - return fp.read() - - -# -- helper function to get the __version__ from a file -def find_version(*file_paths): - version_file = read(*file_paths) - version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", version_file, re.M) - if version_match: - return version_match.group(1) - raise RuntimeError("Unable to find version string.") - - -# -- regenerate autodoc definitions -# sphinx-apidoc -o ./source ../auth0/ - -# -- Project information ----------------------------------------------------- - -project = "auth0-python" -copyright = "2021, Auth0" -author = "Auth0" - -# The full version, including alpha/beta/rc tags -release = find_version("..", "auth0", "__init__.py") - - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.viewcode", - "sphinx.ext.githubpages", - "sphinx_mdinclude", - "sphinx_autodoc_typehints", -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = [".rst", ".md"] - -# The master toctree document. -master_doc = "index" - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "sphinx_rtd_theme" - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = [] - -# Sphinx somehow can't find this one -nitpick_ignore = [ - ("py:class", "cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey"), - ("py:class", "RSAPublicKey"), - ("py:data", "typing.Any"), - ("py:data", "typing.ClassVar"), -] diff --git a/docs/source/exceptions.rst b/docs/source/exceptions.rst deleted file mode 100644 index e4f725c9..00000000 --- a/docs/source/exceptions.rst +++ /dev/null @@ -1,10 +0,0 @@ -exceptions module -===================== - -Module contents ---------------- - -.. automodule:: auth0.exceptions - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/index.rst b/docs/source/index.rst deleted file mode 100644 index b2c0deac..00000000 --- a/docs/source/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -Auth0-Python documentation -======================================== -.. mdInclude:: ../../README.md - -.. toctree:: - :hidden: - :caption: Learn the basics - - readme_content - -.. toctree:: - :hidden: - :caption: API Documentation - - authentication - management - exceptions diff --git a/docs/source/management.rst b/docs/source/management.rst deleted file mode 100644 index 8a58a8ee..00000000 --- a/docs/source/management.rst +++ /dev/null @@ -1,242 +0,0 @@ -management package -===================== - -management.auth0 module --------------------------- - -.. automodule:: auth0.management.auth0 - :members: - :undoc-members: - :show-inheritance: - -management.blacklists module -------------------------------- - -.. automodule:: auth0.management.blacklists - :members: - :undoc-members: - :show-inheritance: - -management.branding module -------------------------------- - -.. automodule:: auth0.management.branding - :members: - :undoc-members: - :show-inheritance: - -management.client\_grants module ------------------------------------ - -.. automodule:: auth0.management.client_grants - :members: - :undoc-members: - :show-inheritance: - -management.clients module ----------------------------- - -.. automodule:: auth0.management.clients - :members: - :undoc-members: - :show-inheritance: - -management.connections module --------------------------------- - -.. automodule:: auth0.management.connections - :members: - :undoc-members: - :show-inheritance: - -management.custom\_domains module ------------------------------------- - -.. automodule:: auth0.management.custom_domains - :members: - :undoc-members: - :show-inheritance: - -management.device\_credentials module ----------------------------------------- - -.. automodule:: auth0.management.device_credentials - :members: - :undoc-members: - :show-inheritance: - -management.email\_templates module -------------------------------------- - -.. automodule:: auth0.management.email_templates - :members: - :undoc-members: - :show-inheritance: - -management.emails module ---------------------------- - -.. automodule:: auth0.management.emails - :members: - :undoc-members: - :show-inheritance: - -management.grants module ---------------------------- - -.. automodule:: auth0.management.grants - :members: - :undoc-members: - :show-inheritance: - -management.guardian module ------------------------------ - -.. automodule:: auth0.management.guardian - :members: - :undoc-members: - :show-inheritance: - -management.hooks module --------------------------- - -.. automodule:: auth0.management.hooks - :members: - :undoc-members: - :show-inheritance: - -management.jobs module -------------------------- - -.. automodule:: auth0.management.jobs - :members: - :undoc-members: - :show-inheritance: - -management.log\_streams module ---------------------------------- - -.. automodule:: auth0.management.log_streams - :members: - :undoc-members: - :show-inheritance: - -management.logs module -------------------------- - -.. automodule:: auth0.management.logs - :members: - :undoc-members: - :show-inheritance: - -management.network\_acls module ------------------------------------------ - -.. automodule:: auth0.management.network_acls - :members: - :undoc-members: - :show-inheritance: - -management.organizations module ----------------------------------- - -.. automodule:: auth0.management.organizations - :members: - :undoc-members: - :show-inheritance: - -management.prompts module ----------------------------------- - -.. automodule:: auth0.management.prompts - :members: - :undoc-members: - :show-inheritance: - -management.resource\_servers module --------------------------------------- - -.. automodule:: auth0.management.resource_servers - :members: - :undoc-members: - :show-inheritance: - -management.roles module --------------------------- - -.. automodule:: auth0.management.roles - :members: - :undoc-members: - :show-inheritance: - -management.rules\_configs module ------------------------------------ - -.. automodule:: auth0.management.rules_configs - :members: - :undoc-members: - :show-inheritance: - -management.rules module --------------------------- - -.. automodule:: auth0.management.rules - :members: - :undoc-members: - :show-inheritance: - -management.self\_service\_profiles module ------------------------------------------ - -.. automodule:: auth0.management.self_service_profiles - :members: - :undoc-members: - :show-inheritance: - -management.stats module --------------------------- - -.. automodule:: auth0.management.stats - :members: - :undoc-members: - :show-inheritance: - -management.tenants module ----------------------------- - -.. automodule:: auth0.management.tenants - :members: - :undoc-members: - :show-inheritance: - -management.tickets module ----------------------------- - -.. automodule:: auth0.management.tickets - :members: - :undoc-members: - :show-inheritance: - -management.user\_blocks module ---------------------------------- - -.. automodule:: auth0.management.user_blocks - :members: - :undoc-members: - :show-inheritance: - -management.users\_by\_email module -------------------------------------- - -.. automodule:: auth0.management.users_by_email - :members: - :undoc-members: - :show-inheritance: - -management.users module --------------------------- - -.. automodule:: auth0.management.users - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/readme_content.rst b/docs/source/readme_content.rst deleted file mode 100644 index 3bd447c4..00000000 --- a/docs/source/readme_content.rst +++ /dev/null @@ -1 +0,0 @@ -.. mdinclude:: ../../README.md diff --git a/examples/flask-api/README.md b/examples/flask-api/README.md deleted file mode 100644 index 70581905..00000000 --- a/examples/flask-api/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Deprecation Notice - -These samples have been deprecated. Please see the new Python API samples [here](https://github.com/auth0-samples/auth0-python-api-samples). diff --git a/examples/flask-webapp/README.md b/examples/flask-webapp/README.md deleted file mode 100644 index 3b836ed4..00000000 --- a/examples/flask-webapp/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Deprecation Notice - -These samples have been deprecated. Please see the new Python API samples [here](https://github.com/auth0-samples/auth0-python-web-app). diff --git a/examples/webapi2/README.md b/examples/webapi2/README.md deleted file mode 100644 index 70581905..00000000 --- a/examples/webapi2/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Deprecation Notice - -These samples have been deprecated. Please see the new Python API samples [here](https://github.com/auth0-samples/auth0-python-api-samples). diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index cdfec98a..00000000 --- a/mypy.ini +++ /dev/null @@ -1,15 +0,0 @@ -[mypy] -python_version = 3.7 - -[mypy-auth0.test.*,auth0.test_async.*] -ignore_errors = True - -[mypy-auth0.management.*] -ignore_errors = False -disable_error_code=var-annotated - -[mypy-auth0.rest_async] -disable_error_code=override - -[mypy-auth0.authentication.async_token_verifier] -disable_error_code=override, misc, attr-defined diff --git a/opslevel.yml b/opslevel.yml deleted file mode 100644 index 009a5ec0..00000000 --- a/opslevel.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -version: 1 -repository: - owner: dx_sdks - tier: - tags: diff --git a/poetry.lock b/poetry.lock index 381bef4f..858008cc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -7,11 +7,25 @@ description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, ] +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, + {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, +] + [[package]] name = "aiohttp" version = "3.10.11" @@ -19,6 +33,7 @@ description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "aiohttp-3.10.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5077b1a5f40ffa3ba1f40d537d3bec4383988ee51fbba6b74aa8fb1bc466599e"}, {file = "aiohttp-3.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d6a14a4d93b5b3c2891fca94fa9d41b2322a68194422bef0dd5ec1e57d7d298"}, @@ -125,6 +140,150 @@ yarl = ">=1.12.0,<2.0" [package.extras] speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +[[package]] +name = "aiohttp" +version = "3.13.2" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "aiohttp-3.13.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2372b15a5f62ed37789a6b383ff7344fc5b9f243999b0cd9b629d8bc5f5b4155"}, + {file = "aiohttp-3.13.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7f8659a48995edee7229522984bd1009c1213929c769c2daa80b40fe49a180c"}, + {file = "aiohttp-3.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:939ced4a7add92296b0ad38892ce62b98c619288a081170695c6babe4f50e636"}, + {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6315fb6977f1d0dd41a107c527fee2ed5ab0550b7d885bc15fee20ccb17891da"}, + {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6e7352512f763f760baaed2637055c49134fd1d35b37c2dedfac35bfe5cf8725"}, + {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e09a0a06348a2dd73e7213353c90d709502d9786219f69b731f6caa0efeb46f5"}, + {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a09a6d073fb5789456545bdee2474d14395792faa0527887f2f4ec1a486a59d3"}, + {file = "aiohttp-3.13.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b59d13c443f8e049d9e94099c7e412e34610f1f49be0f230ec656a10692a5802"}, + {file = "aiohttp-3.13.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:20db2d67985d71ca033443a1ba2001c4b5693fe09b0e29f6d9358a99d4d62a8a"}, + {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:960c2fc686ba27b535f9fd2b52d87ecd7e4fd1cf877f6a5cba8afb5b4a8bd204"}, + {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6c00dbcf5f0d88796151e264a8eab23de2997c9303dd7c0bf622e23b24d3ce22"}, + {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fed38a5edb7945f4d1bcabe2fcd05db4f6ec7e0e82560088b754f7e08d93772d"}, + {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:b395bbca716c38bef3c764f187860e88c724b342c26275bc03e906142fc5964f"}, + {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:204ffff2426c25dfda401ba08da85f9c59525cdc42bda26660463dd1cbcfec6f"}, + {file = "aiohttp-3.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:05c4dd3c48fb5f15db31f57eb35374cb0c09afdde532e7fb70a75aede0ed30f6"}, + {file = "aiohttp-3.13.2-cp310-cp310-win32.whl", hash = "sha256:e574a7d61cf10351d734bcddabbe15ede0eaa8a02070d85446875dc11189a251"}, + {file = "aiohttp-3.13.2-cp310-cp310-win_amd64.whl", hash = "sha256:364f55663085d658b8462a1c3f17b2b84a5c2e1ba858e1b79bff7b2e24ad1514"}, + {file = "aiohttp-3.13.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4647d02df098f6434bafd7f32ad14942f05a9caa06c7016fdcc816f343997dd0"}, + {file = "aiohttp-3.13.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e3403f24bcb9c3b29113611c3c16a2a447c3953ecf86b79775e7be06f7ae7ccb"}, + {file = "aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:43dff14e35aba17e3d6d5ba628858fb8cb51e30f44724a2d2f0c75be492c55e9"}, + {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2a9ea08e8c58bb17655630198833109227dea914cd20be660f52215f6de5613"}, + {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53b07472f235eb80e826ad038c9d106c2f653584753f3ddab907c83f49eedead"}, + {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e736c93e9c274fce6419af4aac199984d866e55f8a4cec9114671d0ea9688780"}, + {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ff5e771f5dcbc81c64898c597a434f7682f2259e0cd666932a913d53d1341d1a"}, + {file = "aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3b6fb0c207cc661fa0bf8c66d8d9b657331ccc814f4719468af61034b478592"}, + {file = "aiohttp-3.13.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:97a0895a8e840ab3520e2288db7cace3a1981300d48babeb50e7425609e2e0ab"}, + {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e8f8afb552297aca127c90cb840e9a1d4bfd6a10d7d8f2d9176e1acc69bad30"}, + {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ed2f9c7216e53c3df02264f25d824b079cc5914f9e2deba94155190ef648ee40"}, + {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:99c5280a329d5fa18ef30fd10c793a190d996567667908bef8a7f81f8202b948"}, + {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ca6ffef405fc9c09a746cb5d019c1672cd7f402542e379afc66b370833170cf"}, + {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:47f438b1a28e926c37632bff3c44df7d27c9b57aaf4e34b1def3c07111fdb782"}, + {file = "aiohttp-3.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9acda8604a57bb60544e4646a4615c1866ee6c04a8edef9b8ee6fd1d8fa2ddc8"}, + {file = "aiohttp-3.13.2-cp311-cp311-win32.whl", hash = "sha256:868e195e39b24aaa930b063c08bb0c17924899c16c672a28a65afded9c46c6ec"}, + {file = "aiohttp-3.13.2-cp311-cp311-win_amd64.whl", hash = "sha256:7fd19df530c292542636c2a9a85854fab93474396a52f1695e799186bbd7f24c"}, + {file = "aiohttp-3.13.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b1e56bab2e12b2b9ed300218c351ee2a3d8c8fdab5b1ec6193e11a817767e47b"}, + {file = "aiohttp-3.13.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:364e25edaabd3d37b1db1f0cbcee8c73c9a3727bfa262b83e5e4cf3489a2a9dc"}, + {file = "aiohttp-3.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5c94825f744694c4b8db20b71dba9a257cd2ba8e010a803042123f3a25d50d7"}, + {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba2715d842ffa787be87cbfce150d5e88c87a98e0b62e0f5aa489169a393dbbb"}, + {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:585542825c4bc662221fb257889e011a5aa00f1ae4d75d1d246a5225289183e3"}, + {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39d02cb6025fe1aabca329c5632f48c9532a3dabccd859e7e2f110668972331f"}, + {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e67446b19e014d37342f7195f592a2a948141d15a312fe0e700c2fd2f03124f6"}, + {file = "aiohttp-3.13.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4356474ad6333e41ccefd39eae869ba15a6c5299c9c01dfdcfdd5c107be4363e"}, + {file = "aiohttp-3.13.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeacf451c99b4525f700f078becff32c32ec327b10dcf31306a8a52d78166de7"}, + {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8a9b889aeabd7a4e9af0b7f4ab5ad94d42e7ff679aaec6d0db21e3b639ad58d"}, + {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fa89cb11bc71a63b69568d5b8a25c3ca25b6d54c15f907ca1c130d72f320b76b"}, + {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8aa7c807df234f693fed0ecd507192fc97692e61fee5702cdc11155d2e5cadc8"}, + {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9eb3e33fdbe43f88c3c75fa608c25e7c47bbd80f48d012763cb67c47f39a7e16"}, + {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9434bc0d80076138ea986833156c5a48c9c7a8abb0c96039ddbb4afc93184169"}, + {file = "aiohttp-3.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff15c147b2ad66da1f2cbb0622313f2242d8e6e8f9b79b5206c84523a4473248"}, + {file = "aiohttp-3.13.2-cp312-cp312-win32.whl", hash = "sha256:27e569eb9d9e95dbd55c0fc3ec3a9335defbf1d8bc1d20171a49f3c4c607b93e"}, + {file = "aiohttp-3.13.2-cp312-cp312-win_amd64.whl", hash = "sha256:8709a0f05d59a71f33fd05c17fc11fcb8c30140506e13c2f5e8ee1b8964e1b45"}, + {file = "aiohttp-3.13.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7519bdc7dfc1940d201651b52bf5e03f5503bda45ad6eacf64dda98be5b2b6be"}, + {file = "aiohttp-3.13.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:088912a78b4d4f547a1f19c099d5a506df17eacec3c6f4375e2831ec1d995742"}, + {file = "aiohttp-3.13.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5276807b9de9092af38ed23ce120539ab0ac955547b38563a9ba4f5b07b95293"}, + {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1237c1375eaef0db4dcd7c2559f42e8af7b87ea7d295b118c60c36a6e61cb811"}, + {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:96581619c57419c3d7d78703d5b78c1e5e5fc0172d60f555bdebaced82ded19a"}, + {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2713a95b47374169409d18103366de1050fe0ea73db358fc7a7acb2880422d4"}, + {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:228a1cd556b3caca590e9511a89444925da87d35219a49ab5da0c36d2d943a6a"}, + {file = "aiohttp-3.13.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac6cde5fba8d7d8c6ac963dbb0256a9854e9fafff52fbcc58fdf819357892c3e"}, + {file = "aiohttp-3.13.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2bef8237544f4e42878c61cef4e2839fee6346dc60f5739f876a9c50be7fcdb"}, + {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:16f15a4eac3bc2d76c45f7ebdd48a65d41b242eb6c31c2245463b40b34584ded"}, + {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:bb7fb776645af5cc58ab804c58d7eba545a97e047254a52ce89c157b5af6cd0b"}, + {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e1b4951125ec10c70802f2cb09736c895861cd39fd9dcb35107b4dc8ae6220b8"}, + {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:550bf765101ae721ee1d37d8095f47b1f220650f85fe1af37a90ce75bab89d04"}, + {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fe91b87fc295973096251e2d25a811388e7d8adf3bd2b97ef6ae78bc4ac6c476"}, + {file = "aiohttp-3.13.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0c8e31cfcc4592cb200160344b2fb6ae0f9e4effe06c644b5a125d4ae5ebe23"}, + {file = "aiohttp-3.13.2-cp313-cp313-win32.whl", hash = "sha256:0740f31a60848d6edb296a0df827473eede90c689b8f9f2a4cdde74889eb2254"}, + {file = "aiohttp-3.13.2-cp313-cp313-win_amd64.whl", hash = "sha256:a88d13e7ca367394908f8a276b89d04a3652044612b9a408a0bb22a5ed976a1a"}, + {file = "aiohttp-3.13.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2475391c29230e063ef53a66669b7b691c9bfc3f1426a0f7bcdf1216bdbac38b"}, + {file = "aiohttp-3.13.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:f33c8748abef4d8717bb20e8fb1b3e07c6adacb7fd6beaae971a764cf5f30d61"}, + {file = "aiohttp-3.13.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ae32f24bbfb7dbb485a24b30b1149e2f200be94777232aeadba3eecece4d0aa4"}, + {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d7f02042c1f009ffb70067326ef183a047425bb2ff3bc434ead4dd4a4a66a2b"}, + {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93655083005d71cd6c072cdab54c886e6570ad2c4592139c3fb967bfc19e4694"}, + {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0db1e24b852f5f664cd728db140cf11ea0e82450471232a394b3d1a540b0f906"}, + {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b009194665bcd128e23eaddef362e745601afa4641930848af4c8559e88f18f9"}, + {file = "aiohttp-3.13.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c038a8fdc8103cd51dbd986ecdce141473ffd9775a7a8057a6ed9c3653478011"}, + {file = "aiohttp-3.13.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66bac29b95a00db411cd758fea0e4b9bdba6d549dfe333f9a945430f5f2cc5a6"}, + {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4ebf9cfc9ba24a74cf0718f04aac2a3bbe745902cc7c5ebc55c0f3b5777ef213"}, + {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a4b88ebe35ce54205c7074f7302bd08a4cb83256a3e0870c72d6f68a3aaf8e49"}, + {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:98c4fb90bb82b70a4ed79ca35f656f4281885be076f3f970ce315402b53099ae"}, + {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:ec7534e63ae0f3759df3a1ed4fa6bc8f75082a924b590619c0dd2f76d7043caa"}, + {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5b927cf9b935a13e33644cbed6c8c4b2d0f25b713d838743f8fe7191b33829c4"}, + {file = "aiohttp-3.13.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:88d6c017966a78c5265d996c19cdb79235be5e6412268d7e2ce7dee339471b7a"}, + {file = "aiohttp-3.13.2-cp314-cp314-win32.whl", hash = "sha256:f7c183e786e299b5d6c49fb43a769f8eb8e04a2726a2bd5887b98b5cc2d67940"}, + {file = "aiohttp-3.13.2-cp314-cp314-win_amd64.whl", hash = "sha256:fe242cd381e0fb65758faf5ad96c2e460df6ee5b2de1072fe97e4127927e00b4"}, + {file = "aiohttp-3.13.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f10d9c0b0188fe85398c61147bbd2a657d616c876863bfeff43376e0e3134673"}, + {file = "aiohttp-3.13.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e7c952aefdf2460f4ae55c5e9c3e80aa72f706a6317e06020f80e96253b1accd"}, + {file = "aiohttp-3.13.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c20423ce14771d98353d2e25e83591fa75dfa90a3c1848f3d7c68243b4fbded3"}, + {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e96eb1a34396e9430c19d8338d2ec33015e4a87ef2b4449db94c22412e25ccdf"}, + {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:23fb0783bc1a33640036465019d3bba069942616a6a2353c6907d7fe1ccdaf4e"}, + {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1a9bea6244a1d05a4e57c295d69e159a5c50d8ef16aa390948ee873478d9a5"}, + {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0a3d54e822688b56e9f6b5816fb3de3a3a64660efac64e4c2dc435230ad23bad"}, + {file = "aiohttp-3.13.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a653d872afe9f33497215745da7a943d1dc15b728a9c8da1c3ac423af35178e"}, + {file = "aiohttp-3.13.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:56d36e80d2003fa3fc0207fac644216d8532e9504a785ef9a8fd013f84a42c61"}, + {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:78cd586d8331fb8e241c2dd6b2f4061778cc69e150514b39a9e28dd050475661"}, + {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:20b10bbfbff766294fe99987f7bb3b74fdd2f1a2905f2562132641ad434dcf98"}, + {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9ec49dff7e2b3c85cdeaa412e9d438f0ecd71676fde61ec57027dd392f00c693"}, + {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:94f05348c4406450f9d73d38efb41d669ad6cd90c7ee194810d0eefbfa875a7a"}, + {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:fa4dcb605c6f82a80c7f95713c2b11c3b8e9893b3ebd2bc9bde93165ed6107be"}, + {file = "aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cf00e5db968c3f67eccd2778574cf64d8b27d95b237770aa32400bd7a1ca4f6c"}, + {file = "aiohttp-3.13.2-cp314-cp314t-win32.whl", hash = "sha256:d23b5fe492b0805a50d3371e8a728a9134d8de5447dce4c885f5587294750734"}, + {file = "aiohttp-3.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f"}, + {file = "aiohttp-3.13.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7fbdf5ad6084f1940ce88933de34b62358d0f4a0b6ec097362dcd3e5a65a4989"}, + {file = "aiohttp-3.13.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7c3a50345635a02db61792c85bb86daffac05330f6473d524f1a4e3ef9d0046d"}, + {file = "aiohttp-3.13.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0e87dff73f46e969af38ab3f7cb75316a7c944e2e574ff7c933bc01b10def7f5"}, + {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2adebd4577724dcae085665f294cc57c8701ddd4d26140504db622b8d566d7aa"}, + {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e036a3a645fe92309ec34b918394bb377950cbb43039a97edae6c08db64b23e2"}, + {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:23ad365e30108c422d0b4428cf271156dd56790f6dd50d770b8e360e6c5ab2e6"}, + {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1f9b2c2d4b9d958b1f9ae0c984ec1dd6b6689e15c75045be8ccb4011426268ca"}, + {file = "aiohttp-3.13.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a92cf4b9bea33e15ecbaa5c59921be0f23222608143d025c989924f7e3e0c07"}, + {file = "aiohttp-3.13.2-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:070599407f4954021509193404c4ac53153525a19531051661440644728ba9a7"}, + {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:29562998ec66f988d49fb83c9b01694fa927186b781463f376c5845c121e4e0b"}, + {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4dd3db9d0f4ebca1d887d76f7cdbcd1116ac0d05a9221b9dad82c64a62578c4d"}, + {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d7bc4b7f9c4921eba72677cd9fedd2308f4a4ca3e12fab58935295ad9ea98700"}, + {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:dacd50501cd017f8cccb328da0c90823511d70d24a323196826d923aad865901"}, + {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:8b2f1414f6a1e0683f212ec80e813f4abef94c739fd090b66c9adf9d2a05feac"}, + {file = "aiohttp-3.13.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04c3971421576ed24c191f610052bcb2f059e395bc2489dd99e397f9bc466329"}, + {file = "aiohttp-3.13.2-cp39-cp39-win32.whl", hash = "sha256:9f377d0a924e5cc94dc620bc6366fc3e889586a7f18b748901cf016c916e2084"}, + {file = "aiohttp-3.13.2-cp39-cp39-win_amd64.whl", hash = "sha256:9c705601e16c03466cb72011bd1af55d68fa65b045356d8f96c216e5f6db0fa5"}, + {file = "aiohttp-3.13.2.tar.gz", hash = "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.5.0" +aiosignal = ">=1.4.0" +async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" + +[package.extras] +speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.3.0)", "backports.zstd ; platform_python_implementation == \"CPython\" and python_version < \"3.14\"", "brotlicffi ; platform_python_implementation != \"CPython\""] + [[package]] name = "aioresponses" version = "0.7.8" @@ -148,6 +307,7 @@ description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.7" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, @@ -157,19 +317,81 @@ files = [ frozenlist = ">=1.1.0" [[package]] -name = "argcomplete" -version = "3.6.2" -description = "Bash tab completion for argparse" +name = "aiosignal" +version = "1.4.0" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, + {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" +typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["main"] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} + +[[package]] +name = "anyio" +version = "4.5.2" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" +files = [ + {file = "anyio-4.5.2-py3-none-any.whl", hash = "sha256:c011ee36bc1e8ba40e5a81cb9df91925c218fe9b778554e0b56a21e1b5d4716f"}, + {file = "anyio-4.5.2.tar.gz", hash = "sha256:23009af4ed04ce05991845451e11ef02fc7c5ed29179ac9a420e5ad0ac7ddc5b"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21.0b1) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\""] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "anyio" +version = "4.12.0" +description = "High-level concurrency and networking framework on top of asyncio or Trio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" files = [ - {file = "argcomplete-3.6.2-py3-none-any.whl", hash = "sha256:65b3133a29ad53fb42c48cf5114752c7ab66c1c38544fdf6460f450c09b42591"}, - {file = "argcomplete-3.6.2.tar.gz", hash = "sha256:d0519b1bc867f5f4f4713c41ad0aba73a4a5f007449716b16f385f2166dc6adf"}, + {file = "anyio-4.12.0-py3-none-any.whl", hash = "sha256:dad2376a628f98eeca4881fc56cd06affd18f659b17a747d3ff0307ced94b1bb"}, + {file = "anyio-4.12.0.tar.gz", hash = "sha256:73c693b567b0c55130c104d0b43a9baf3aa6a31fc6110116509f27bf75e21ec0"}, ] +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + [package.extras] -test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] +trio = ["trio (>=0.31.0) ; python_version < \"3.10\"", "trio (>=0.32.0) ; python_version >= \"3.10\""] [[package]] name = "async-timeout" @@ -191,6 +413,7 @@ description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, @@ -204,16 +427,29 @@ docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphi tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] +[[package]] +name = "attrs" +version = "25.4.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, + {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, +] + [[package]] name = "certifi" -version = "2025.8.3" +version = "2025.11.12" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" groups = ["main", "dev"] files = [ - {file = "certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"}, - {file = "certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407"}, + {file = "certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b"}, + {file = "certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316"}, ] [[package]] @@ -223,7 +459,7 @@ description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "platform_python_implementation != \"PyPy\"" +markers = "python_full_version == \"3.8.*\" and platform_python_implementation != \"PyPy\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -297,110 +533,227 @@ files = [ [package.dependencies] pycparser = "*" +[[package]] +name = "cffi" +version = "2.0.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, + {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, + {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, + {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, + {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, + {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, + {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, + {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, + {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, + {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, + {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, + {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, + {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, + {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, + {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, + {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, + {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, + {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, + {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, + {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, + {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, + {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, +] + +[package.dependencies] +pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} + [[package]] name = "charset-normalizer" -version = "3.4.3" +version = "3.4.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" groups = ["main", "dev"] files = [ - {file = "charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-win32.whl", hash = "sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-win32.whl", hash = "sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca"}, - {file = "charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a"}, - {file = "charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14"}, -] - -[[package]] -name = "click" -version = "8.1.8" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, - {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, + {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, + {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, ] -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - [[package]] name = "colorama" version = "0.4.6" @@ -408,7 +761,7 @@ description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["dev"] -markers = "sys_platform == \"win32\" or platform_system == \"Windows\"" +markers = "sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -421,6 +774,7 @@ description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, @@ -502,6 +856,233 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli ; python_full_version <= \"3.11.0a6\""] +[[package]] +name = "coverage" +version = "7.10.7" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\" and python_full_version < \"3.14.0\"" +files = [ + {file = "coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a"}, + {file = "coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5"}, + {file = "coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17"}, + {file = "coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b"}, + {file = "coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87"}, + {file = "coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e"}, + {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e"}, + {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df"}, + {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0"}, + {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13"}, + {file = "coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b"}, + {file = "coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807"}, + {file = "coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59"}, + {file = "coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a"}, + {file = "coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699"}, + {file = "coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d"}, + {file = "coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e"}, + {file = "coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23"}, + {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab"}, + {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82"}, + {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2"}, + {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61"}, + {file = "coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14"}, + {file = "coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2"}, + {file = "coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a"}, + {file = "coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417"}, + {file = "coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973"}, + {file = "coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c"}, + {file = "coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7"}, + {file = "coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6"}, + {file = "coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59"}, + {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b"}, + {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a"}, + {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb"}, + {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1"}, + {file = "coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256"}, + {file = "coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba"}, + {file = "coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf"}, + {file = "coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d"}, + {file = "coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b"}, + {file = "coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e"}, + {file = "coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b"}, + {file = "coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49"}, + {file = "coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911"}, + {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0"}, + {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f"}, + {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c"}, + {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f"}, + {file = "coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698"}, + {file = "coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843"}, + {file = "coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546"}, + {file = "coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c"}, + {file = "coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15"}, + {file = "coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4"}, + {file = "coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0"}, + {file = "coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0"}, + {file = "coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65"}, + {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541"}, + {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6"}, + {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999"}, + {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2"}, + {file = "coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a"}, + {file = "coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb"}, + {file = "coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb"}, + {file = "coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520"}, + {file = "coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32"}, + {file = "coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f"}, + {file = "coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a"}, + {file = "coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360"}, + {file = "coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69"}, + {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14"}, + {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe"}, + {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e"}, + {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd"}, + {file = "coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2"}, + {file = "coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681"}, + {file = "coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880"}, + {file = "coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63"}, + {file = "coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2"}, + {file = "coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d"}, + {file = "coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0"}, + {file = "coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699"}, + {file = "coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9"}, + {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f"}, + {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1"}, + {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0"}, + {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399"}, + {file = "coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235"}, + {file = "coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d"}, + {file = "coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a"}, + {file = "coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3"}, + {file = "coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c"}, + {file = "coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396"}, + {file = "coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40"}, + {file = "coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594"}, + {file = "coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a"}, + {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b"}, + {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3"}, + {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0"}, + {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f"}, + {file = "coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431"}, + {file = "coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07"}, + {file = "coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260"}, + {file = "coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] + +[[package]] +name = "coverage" +version = "7.13.0" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +markers = "python_full_version >= \"3.14.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "coverage-7.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:02d9fb9eccd48f6843c98a37bd6817462f130b86da8660461e8f5e54d4c06070"}, + {file = "coverage-7.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:367449cf07d33dc216c083f2036bb7d976c6e4903ab31be400ad74ad9f85ce98"}, + {file = "coverage-7.13.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cdb3c9f8fef0a954c632f64328a3935988d33a6604ce4bf67ec3e39670f12ae5"}, + {file = "coverage-7.13.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d10fd186aac2316f9bbb46ef91977f9d394ded67050ad6d84d94ed6ea2e8e54e"}, + {file = "coverage-7.13.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f88ae3e69df2ab62fb0bc5219a597cb890ba5c438190ffa87490b315190bb33"}, + {file = "coverage-7.13.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c4be718e51e86f553bcf515305a158a1cd180d23b72f07ae76d6017c3cc5d791"}, + {file = "coverage-7.13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a00d3a393207ae12f7c49bb1c113190883b500f48979abb118d8b72b8c95c032"}, + {file = "coverage-7.13.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a7b1cd820e1b6116f92c6128f1188e7afe421c7e1b35fa9836b11444e53ebd9"}, + {file = "coverage-7.13.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:37eee4e552a65866f15dedd917d5e5f3d59805994260720821e2c1b51ac3248f"}, + {file = "coverage-7.13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:62d7c4f13102148c78d7353c6052af6d899a7f6df66a32bddcc0c0eb7c5326f8"}, + {file = "coverage-7.13.0-cp310-cp310-win32.whl", hash = "sha256:24e4e56304fdb56f96f80eabf840eab043b3afea9348b88be680ec5986780a0f"}, + {file = "coverage-7.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:74c136e4093627cf04b26a35dab8cbfc9b37c647f0502fc313376e11726ba303"}, + {file = "coverage-7.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0dfa3855031070058add1a59fdfda0192fd3e8f97e7c81de0596c145dea51820"}, + {file = "coverage-7.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fdb6f54f38e334db97f72fa0c701e66d8479af0bc3f9bfb5b90f1c30f54500f"}, + {file = "coverage-7.13.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7e442c013447d1d8d195be62852270b78b6e255b79b8675bad8479641e21fd96"}, + {file = "coverage-7.13.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ed5630d946859de835a85e9a43b721123a8a44ec26e2830b296d478c7fd4259"}, + {file = "coverage-7.13.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f15a931a668e58087bc39d05d2b4bf4b14ff2875b49c994bbdb1c2217a8daeb"}, + {file = "coverage-7.13.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30a3a201a127ea57f7e14ba43c93c9c4be8b7d17a26e03bb49e6966d019eede9"}, + {file = "coverage-7.13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a485ff48fbd231efa32d58f479befce52dcb6bfb2a88bb7bf9a0b89b1bc8030"}, + {file = "coverage-7.13.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:22486cdafba4f9e471c816a2a5745337742a617fef68e890d8baf9f3036d7833"}, + {file = "coverage-7.13.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:263c3dbccc78e2e331e59e90115941b5f53e85cfcc6b3b2fbff1fd4e3d2c6ea8"}, + {file = "coverage-7.13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e5330fa0cc1f5c3c4c3bb8e101b742025933e7848989370a1d4c8c5e401ea753"}, + {file = "coverage-7.13.0-cp311-cp311-win32.whl", hash = "sha256:0f4872f5d6c54419c94c25dd6ae1d015deeb337d06e448cd890a1e89a8ee7f3b"}, + {file = "coverage-7.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51a202e0f80f241ccb68e3e26e19ab5b3bf0f813314f2c967642f13ebcf1ddfe"}, + {file = "coverage-7.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:d2a9d7f1c11487b1c69367ab3ac2d81b9b3721f097aa409a3191c3e90f8f3dd7"}, + {file = "coverage-7.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0b3d67d31383c4c68e19a88e28fc4c2e29517580f1b0ebec4a069d502ce1e0bf"}, + {file = "coverage-7.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:581f086833d24a22c89ae0fe2142cfaa1c92c930adf637ddf122d55083fb5a0f"}, + {file = "coverage-7.13.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0a3a30f0e257df382f5f9534d4ce3d4cf06eafaf5192beb1a7bd066cb10e78fb"}, + {file = "coverage-7.13.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:583221913fbc8f53b88c42e8dbb8fca1d0f2e597cb190ce45916662b8b9d9621"}, + {file = "coverage-7.13.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f5d9bd30756fff3e7216491a0d6d520c448d5124d3d8e8f56446d6412499e74"}, + {file = "coverage-7.13.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a23e5a1f8b982d56fa64f8e442e037f6ce29322f1f9e6c2344cd9e9f4407ee57"}, + {file = "coverage-7.13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9b01c22bc74a7fb44066aaf765224c0d933ddf1f5047d6cdfe4795504a4493f8"}, + {file = "coverage-7.13.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:898cce66d0836973f48dda4e3514d863d70142bdf6dfab932b9b6a90ea5b222d"}, + {file = "coverage-7.13.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:3ab483ea0e251b5790c2aac03acde31bff0c736bf8a86829b89382b407cd1c3b"}, + {file = "coverage-7.13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d84e91521c5e4cb6602fe11ece3e1de03b2760e14ae4fcf1a4b56fa3c801fcd"}, + {file = "coverage-7.13.0-cp312-cp312-win32.whl", hash = "sha256:193c3887285eec1dbdb3f2bd7fbc351d570ca9c02ca756c3afbc71b3c98af6ef"}, + {file = "coverage-7.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:4f3e223b2b2db5e0db0c2b97286aba0036ca000f06aca9b12112eaa9af3d92ae"}, + {file = "coverage-7.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:086cede306d96202e15a4b77ace8472e39d9f4e5f9fd92dd4fecdfb2313b2080"}, + {file = "coverage-7.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:28ee1c96109974af104028a8ef57cec21447d42d0e937c0275329272e370ebcf"}, + {file = "coverage-7.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d1e97353dcc5587b85986cda4ff3ec98081d7e84dd95e8b2a6d59820f0545f8a"}, + {file = "coverage-7.13.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:99acd4dfdfeb58e1937629eb1ab6ab0899b131f183ee5f23e0b5da5cba2fec74"}, + {file = "coverage-7.13.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ff45e0cd8451e293b63ced93161e189780baf444119391b3e7d25315060368a6"}, + {file = "coverage-7.13.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f4f72a85316d8e13234cafe0a9f81b40418ad7a082792fa4165bd7d45d96066b"}, + {file = "coverage-7.13.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:11c21557d0e0a5a38632cbbaca5f008723b26a89d70db6315523df6df77d6232"}, + {file = "coverage-7.13.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:76541dc8d53715fb4f7a3a06b34b0dc6846e3c69bc6204c55653a85dd6220971"}, + {file = "coverage-7.13.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6e9e451dee940a86789134b6b0ffbe31c454ade3b849bb8a9d2cca2541a8e91d"}, + {file = "coverage-7.13.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:5c67dace46f361125e6b9cace8fe0b729ed8479f47e70c89b838d319375c8137"}, + {file = "coverage-7.13.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f59883c643cb19630500f57016f76cfdcd6845ca8c5b5ea1f6e17f74c8e5f511"}, + {file = "coverage-7.13.0-cp313-cp313-win32.whl", hash = "sha256:58632b187be6f0be500f553be41e277712baa278147ecb7559983c6d9faf7ae1"}, + {file = "coverage-7.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:73419b89f812f498aca53f757dd834919b48ce4799f9d5cad33ca0ae442bdb1a"}, + {file = "coverage-7.13.0-cp313-cp313-win_arm64.whl", hash = "sha256:eb76670874fdd6091eedcc856128ee48c41a9bbbb9c3f1c7c3cf169290e3ffd6"}, + {file = "coverage-7.13.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6e63ccc6e0ad8986386461c3c4b737540f20426e7ec932f42e030320896c311a"}, + {file = "coverage-7.13.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:494f5459ffa1bd45e18558cd98710c36c0b8fbfa82a5eabcbe671d80ecffbfe8"}, + {file = "coverage-7.13.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:06cac81bf10f74034e055e903f5f946e3e26fc51c09fc9f584e4a1605d977053"}, + {file = "coverage-7.13.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f2ffc92b46ed6e6760f1d47a71e56b5664781bc68986dbd1836b2b70c0ce2071"}, + {file = "coverage-7.13.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0602f701057c6823e5db1b74530ce85f17c3c5be5c85fc042ac939cbd909426e"}, + {file = "coverage-7.13.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:25dc33618d45456ccb1d37bce44bc78cf269909aa14c4db2e03d63146a8a1493"}, + {file = "coverage-7.13.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:71936a8b3b977ddd0b694c28c6a34f4fff2e9dd201969a4ff5d5fc7742d614b0"}, + {file = "coverage-7.13.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:936bc20503ce24770c71938d1369461f0c5320830800933bc3956e2a4ded930e"}, + {file = "coverage-7.13.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:af0a583efaacc52ae2521f8d7910aff65cdb093091d76291ac5820d5e947fc1c"}, + {file = "coverage-7.13.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f1c23e24a7000da892a312fb17e33c5f94f8b001de44b7cf8ba2e36fbd15859e"}, + {file = "coverage-7.13.0-cp313-cp313t-win32.whl", hash = "sha256:5f8a0297355e652001015e93be345ee54393e45dc3050af4a0475c5a2b767d46"}, + {file = "coverage-7.13.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6abb3a4c52f05e08460bd9acf04fec027f8718ecaa0d09c40ffbc3fbd70ecc39"}, + {file = "coverage-7.13.0-cp313-cp313t-win_arm64.whl", hash = "sha256:3ad968d1e3aa6ce5be295ab5fe3ae1bf5bb4769d0f98a80a0252d543a2ef2e9e"}, + {file = "coverage-7.13.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:453b7ec753cf5e4356e14fe858064e5520c460d3bbbcb9c35e55c0d21155c256"}, + {file = "coverage-7.13.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:af827b7cbb303e1befa6c4f94fd2bf72f108089cfa0f8abab8f4ca553cf5ca5a"}, + {file = "coverage-7.13.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9987a9e4f8197a1000280f7cc089e3ea2c8b3c0a64d750537809879a7b4ceaf9"}, + {file = "coverage-7.13.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3188936845cd0cb114fa6a51842a304cdbac2958145d03be2377ec41eb285d19"}, + {file = "coverage-7.13.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2bdb3babb74079f021696cb46b8bb5f5661165c385d3a238712b031a12355be"}, + {file = "coverage-7.13.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7464663eaca6adba4175f6c19354feea61ebbdd735563a03d1e472c7072d27bb"}, + {file = "coverage-7.13.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8069e831f205d2ff1f3d355e82f511eb7c5522d7d413f5db5756b772ec8697f8"}, + {file = "coverage-7.13.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:6fb2d5d272341565f08e962cce14cdf843a08ac43bd621783527adb06b089c4b"}, + {file = "coverage-7.13.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:5e70f92ef89bac1ac8a99b3324923b4749f008fdbd7aa9cb35e01d7a284a04f9"}, + {file = "coverage-7.13.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4b5de7d4583e60d5fd246dd57fcd3a8aa23c6e118a8c72b38adf666ba8e7e927"}, + {file = "coverage-7.13.0-cp314-cp314-win32.whl", hash = "sha256:a6c6e16b663be828a8f0b6c5027d36471d4a9f90d28444aa4ced4d48d7d6ae8f"}, + {file = "coverage-7.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:0900872f2fdb3ee5646b557918d02279dc3af3dfb39029ac4e945458b13f73bc"}, + {file = "coverage-7.13.0-cp314-cp314-win_arm64.whl", hash = "sha256:3a10260e6a152e5f03f26db4a407c4c62d3830b9af9b7c0450b183615f05d43b"}, + {file = "coverage-7.13.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9097818b6cc1cfb5f174e3263eba4a62a17683bcfe5c4b5d07f4c97fa51fbf28"}, + {file = "coverage-7.13.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0018f73dfb4301a89292c73be6ba5f58722ff79f51593352759c1790ded1cabe"}, + {file = "coverage-7.13.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:166ad2a22ee770f5656e1257703139d3533b4a0b6909af67c6b4a3adc1c98657"}, + {file = "coverage-7.13.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f6aaef16d65d1787280943f1c8718dc32e9cf141014e4634d64446702d26e0ff"}, + {file = "coverage-7.13.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e999e2dcc094002d6e2c7bbc1fb85b58ba4f465a760a8014d97619330cdbbbf3"}, + {file = "coverage-7.13.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:00c3d22cf6fb1cf3bf662aaaa4e563be8243a5ed2630339069799835a9cc7f9b"}, + {file = "coverage-7.13.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22ccfe8d9bb0d6134892cbe1262493a8c70d736b9df930f3f3afae0fe3ac924d"}, + {file = "coverage-7.13.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9372dff5ea15930fea0445eaf37bbbafbc771a49e70c0aeed8b4e2c2614cc00e"}, + {file = "coverage-7.13.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:69ac2c492918c2461bc6ace42d0479638e60719f2a4ef3f0815fa2df88e9f940"}, + {file = "coverage-7.13.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:739c6c051a7540608d097b8e13c76cfa85263ced467168dc6b477bae3df7d0e2"}, + {file = "coverage-7.13.0-cp314-cp314t-win32.whl", hash = "sha256:fe81055d8c6c9de76d60c94ddea73c290b416e061d40d542b24a5871bad498b7"}, + {file = "coverage-7.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:445badb539005283825959ac9fa4a28f712c214b65af3a2c464f1adc90f5fcbc"}, + {file = "coverage-7.13.0-cp314-cp314t-win_arm64.whl", hash = "sha256:de7f6748b890708578fc4b7bb967d810aeb6fcc9bff4bb77dbca77dab2f9df6a"}, + {file = "coverage-7.13.0-py3-none-any.whl", hash = "sha256:850d2998f380b1e266459ca5b47bc9e7daf9af1d070f66317972f382d46f1904"}, + {file = "coverage-7.13.0.tar.gz", hash = "sha256:a394aa27f2d7ff9bc04cf703817773a59ad6dfbd577032e690f961d2460ee936"}, +] + +[package.extras] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] + [[package]] name = "cryptography" version = "43.0.3" @@ -509,6 +1090,7 @@ description = "cryptography is a package which provides cryptographic recipes an optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_full_version >= \"3.9.0\" and python_full_version < \"3.14.0\" or platform_python_implementation == \"PyPy\"" files = [ {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, @@ -552,17 +1134,99 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] +[[package]] +name = "cryptography" +version = "46.0.3" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = "!=3.9.0,!=3.9.1,>=3.8" +groups = ["main"] +markers = "(python_full_version == \"3.8.*\" or python_full_version >= \"3.14.0\") and platform_python_implementation != \"PyPy\"" +files = [ + {file = "cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a"}, + {file = "cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc"}, + {file = "cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d"}, + {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb"}, + {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849"}, + {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8"}, + {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec"}, + {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91"}, + {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e"}, + {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926"}, + {file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71"}, + {file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac"}, + {file = "cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018"}, + {file = "cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb"}, + {file = "cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c"}, + {file = "cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217"}, + {file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5"}, + {file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715"}, + {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54"}, + {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459"}, + {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422"}, + {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7"}, + {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044"}, + {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665"}, + {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3"}, + {file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20"}, + {file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de"}, + {file = "cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914"}, + {file = "cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db"}, + {file = "cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21"}, + {file = "cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936"}, + {file = "cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683"}, + {file = "cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d"}, + {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0"}, + {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc"}, + {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3"}, + {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971"}, + {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac"}, + {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04"}, + {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506"}, + {file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963"}, + {file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4"}, + {file = "cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df"}, + {file = "cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f"}, + {file = "cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372"}, + {file = "cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32"}, + {file = "cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c"}, + {file = "cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea"}, + {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b"}, + {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb"}, + {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717"}, + {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9"}, + {file = "cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c"}, + {file = "cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1"}, +] + +[package.dependencies] +cffi = [ + {version = ">=1.14", markers = "python_full_version == \"3.8.*\" and platform_python_implementation != \"PyPy\""}, + {version = ">=2.0.0", markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\""}, +] +typing-extensions = {version = ">=4.13.2", markers = "python_full_version < \"3.11.0\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-inline-tabs", "sphinx-rtd-theme (>=3.0.0)"] +docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] +nox = ["nox[uv] (>=2024.4.15)"] +pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.14)", "ruff (>=0.11.11)"] +sdist = ["build (>=1.0.0)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi (>=2024)", "cryptography-vectors (==46.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] +test-randomorder = ["pytest-randomly"] + [[package]] name = "exceptiongroup" -version = "1.3.0" +version = "1.3.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" -groups = ["dev"] +groups = ["main", "dev"] markers = "python_version < \"3.11\"" files = [ - {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, - {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, + {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, + {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, ] [package.dependencies] @@ -571,6 +1235,21 @@ typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "execnet" +version = "2.1.2" +description = "execnet: rapid multi-Python deployment" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec"}, + {file = "execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd"}, +] + +[package.extras] +testing = ["hatch", "pre-commit", "pytest", "tox"] + [[package]] name = "frozenlist" version = "1.5.0" @@ -578,6 +1257,7 @@ description = "A list-like structure which implements collections.abc.MutableSeq optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -673,16 +1353,216 @@ files = [ {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, ] +[[package]] +name = "frozenlist" +version = "1.8.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, + {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, + {file = "frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7"}, + {file = "frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a"}, + {file = "frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6"}, + {file = "frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e"}, + {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84"}, + {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9"}, + {file = "frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967"}, + {file = "frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25"}, + {file = "frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b"}, + {file = "frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa"}, + {file = "frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf"}, + {file = "frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746"}, + {file = "frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd"}, + {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a"}, + {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7"}, + {file = "frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed"}, + {file = "frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496"}, + {file = "frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231"}, + {file = "frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62"}, + {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94"}, + {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c"}, + {file = "frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41"}, + {file = "frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b"}, + {file = "frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888"}, + {file = "frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042"}, + {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0"}, + {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f"}, + {file = "frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7"}, + {file = "frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806"}, + {file = "frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0"}, + {file = "frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b"}, + {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d"}, + {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed"}, + {file = "frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e"}, + {file = "frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df"}, + {file = "frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd"}, + {file = "frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79"}, + {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47"}, + {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca"}, + {file = "frozenlist-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda"}, + {file = "frozenlist-1.8.0-cp39-cp39-win32.whl", hash = "sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087"}, + {file = "frozenlist-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a"}, + {file = "frozenlist-1.8.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103"}, + {file = "frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d"}, + {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"}, +] + +[[package]] +name = "h11" +version = "0.16.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.16" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "idna" -version = "3.10" +version = "3.11" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" groups = ["main", "dev"] files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, + {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, + {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, ] [package.extras] @@ -695,11 +1575,25 @@ description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_full_version < \"3.14.0\" or platform_python_implementation == \"PyPy\"" files = [ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, ] +[[package]] +name = "iniconfig" +version = "2.3.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +markers = "python_full_version >= \"3.14.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, + {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, +] + [[package]] name = "mock" version = "5.2.0" @@ -724,6 +1618,7 @@ description = "multidict implementation" optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -823,53 +1718,242 @@ files = [ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} [[package]] -name = "packaging" -version = "25.0" -description = "Core utilities for Python packages" +name = "multidict" +version = "6.7.0" +description = "multidict implementation" optional = false -python-versions = ">=3.8" -groups = ["dev"] +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" files = [ - {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, - {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, + {file = "multidict-6.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349"}, + {file = "multidict-6.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e"}, + {file = "multidict-6.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36"}, + {file = "multidict-6.7.0-cp310-cp310-win32.whl", hash = "sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85"}, + {file = "multidict-6.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7"}, + {file = "multidict-6.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0"}, + {file = "multidict-6.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc"}, + {file = "multidict-6.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721"}, + {file = "multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34"}, + {file = "multidict-6.7.0-cp311-cp311-win32.whl", hash = "sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff"}, + {file = "multidict-6.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81"}, + {file = "multidict-6.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912"}, + {file = "multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184"}, + {file = "multidict-6.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45"}, + {file = "multidict-6.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8"}, + {file = "multidict-6.7.0-cp312-cp312-win32.whl", hash = "sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4"}, + {file = "multidict-6.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b"}, + {file = "multidict-6.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec"}, + {file = "multidict-6.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6"}, + {file = "multidict-6.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159"}, + {file = "multidict-6.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288"}, + {file = "multidict-6.7.0-cp313-cp313-win32.whl", hash = "sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17"}, + {file = "multidict-6.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390"}, + {file = "multidict-6.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e"}, + {file = "multidict-6.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00"}, + {file = "multidict-6.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb"}, + {file = "multidict-6.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6"}, + {file = "multidict-6.7.0-cp313-cp313t-win32.whl", hash = "sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d"}, + {file = "multidict-6.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6"}, + {file = "multidict-6.7.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792"}, + {file = "multidict-6.7.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842"}, + {file = "multidict-6.7.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b"}, + {file = "multidict-6.7.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f"}, + {file = "multidict-6.7.0-cp314-cp314-win32.whl", hash = "sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885"}, + {file = "multidict-6.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c"}, + {file = "multidict-6.7.0-cp314-cp314-win_arm64.whl", hash = "sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000"}, + {file = "multidict-6.7.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63"}, + {file = "multidict-6.7.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718"}, + {file = "multidict-6.7.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0"}, + {file = "multidict-6.7.0-cp314-cp314t-win32.whl", hash = "sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13"}, + {file = "multidict-6.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd"}, + {file = "multidict-6.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827"}, + {file = "multidict-6.7.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c"}, + {file = "multidict-6.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40"}, + {file = "multidict-6.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4"}, + {file = "multidict-6.7.0-cp39-cp39-win32.whl", hash = "sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91"}, + {file = "multidict-6.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f"}, + {file = "multidict-6.7.0-cp39-cp39-win_arm64.whl", hash = "sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546"}, + {file = "multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3"}, + {file = "multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} + [[package]] -name = "pipx" -version = "1.7.1" -description = "Install and Run Python Applications in Isolated Environments" +name = "mypy" +version = "1.13.0" +description = "Optional static typing for Python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "pipx-1.7.1-py3-none-any.whl", hash = "sha256:3933c43bb344e649cb28e10d357e0967ce8572f1c19caf90cf39ae95c2a0afaf"}, - {file = "pipx-1.7.1.tar.gz", hash = "sha256:762de134e16a462be92645166d225ecef446afaef534917f5f70008d63584360"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, ] [package.dependencies] -argcomplete = ">=1.9.4" -colorama = {version = ">=0.4.4", markers = "sys_platform == \"win32\""} -packaging = ">=20" -platformdirs = ">=2.1" -tomli = {version = "*", markers = "python_version < \"3.11\""} -userpath = ">=1.6,<1.9 || >1.9" +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] [[package]] -name = "platformdirs" -version = "4.3.6" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +name = "mypy-extensions" +version = "1.1.0" +description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, - {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, ] -[package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.11.2)"] +[[package]] +name = "packaging" +version = "25.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, +] [[package]] name = "pluggy" @@ -878,6 +1962,7 @@ description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -887,6 +1972,23 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "pluggy" +version = "1.6.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["coverage", "pytest", "pytest-benchmark"] + [[package]] name = "propcache" version = "0.2.0" @@ -894,6 +1996,7 @@ description = "Accelerated property cache" optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"}, {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"}, @@ -995,6 +2098,139 @@ files = [ {file = "propcache-0.2.0.tar.gz", hash = "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70"}, ] +[[package]] +name = "propcache" +version = "0.4.1" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db"}, + {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8"}, + {file = "propcache-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c"}, + {file = "propcache-0.4.1-cp310-cp310-win32.whl", hash = "sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb"}, + {file = "propcache-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37"}, + {file = "propcache-0.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581"}, + {file = "propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf"}, + {file = "propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5"}, + {file = "propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f"}, + {file = "propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1"}, + {file = "propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6"}, + {file = "propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239"}, + {file = "propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2"}, + {file = "propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403"}, + {file = "propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75"}, + {file = "propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8"}, + {file = "propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db"}, + {file = "propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1"}, + {file = "propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf"}, + {file = "propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311"}, + {file = "propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66"}, + {file = "propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81"}, + {file = "propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e"}, + {file = "propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1"}, + {file = "propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b"}, + {file = "propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566"}, + {file = "propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1"}, + {file = "propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717"}, + {file = "propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37"}, + {file = "propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a"}, + {file = "propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12"}, + {file = "propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c"}, + {file = "propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144"}, + {file = "propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f"}, + {file = "propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153"}, + {file = "propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992"}, + {file = "propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f"}, + {file = "propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393"}, + {file = "propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455"}, + {file = "propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85"}, + {file = "propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1"}, + {file = "propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9"}, + {file = "propcache-0.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff"}, + {file = "propcache-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb"}, + {file = "propcache-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183"}, + {file = "propcache-0.4.1-cp39-cp39-win32.whl", hash = "sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19"}, + {file = "propcache-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f"}, + {file = "propcache-0.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938"}, + {file = "propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237"}, + {file = "propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d"}, +] + [[package]] name = "pycparser" version = "2.23" @@ -1002,12 +2238,306 @@ description = "C parser in Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "platform_python_implementation != \"PyPy\"" +markers = "platform_python_implementation != \"PyPy\" and (python_full_version == \"3.8.*\" or implementation_name != \"PyPy\")" files = [ {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, ] +[[package]] +name = "pydantic" +version = "2.10.6" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" +files = [ + {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, + {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.27.2" +typing-extensions = ">=4.12.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic" +version = "2.12.5" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d"}, + {file = "pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.41.5" +typing-extensions = ">=4.14.1" +typing-inspection = ">=0.4.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic-core" +version = "2.27.2" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" +files = [ + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, + {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pydantic-core" +version = "2.41.5" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "pydantic_core-2.41.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146"}, + {file = "pydantic_core-2.41.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49"}, + {file = "pydantic_core-2.41.5-cp310-cp310-win32.whl", hash = "sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba"}, + {file = "pydantic_core-2.41.5-cp310-cp310-win_amd64.whl", hash = "sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9"}, + {file = "pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6"}, + {file = "pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f"}, + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7"}, + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3"}, + {file = "pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9"}, + {file = "pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd"}, + {file = "pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a"}, + {file = "pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008"}, + {file = "pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf"}, + {file = "pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3"}, + {file = "pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460"}, + {file = "pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51"}, + {file = "pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e"}, +] + +[package.dependencies] +typing-extensions = ">=4.14.1" + [[package]] name = "pyjwt" version = "2.9.0" @@ -1015,6 +2545,7 @@ description = "JSON Web Token implementation in Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, @@ -1026,6 +2557,25 @@ dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pyte docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] +[[package]] +name = "pyjwt" +version = "2.10.1" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, + {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + [[package]] name = "pytest" version = "7.4.4" @@ -1056,6 +2606,7 @@ description = "Pytest plugin for aiohttp support" optional = false python-versions = ">=3.7" groups = ["dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "pytest-aiohttp-1.0.5.tar.gz", hash = "sha256:880262bc5951e934463b15e3af8bb298f11f7d4d3ebac970aab425aff10a780a"}, {file = "pytest_aiohttp-1.0.5-py3-none-any.whl", hash = "sha256:63a5360fd2f34dda4ab8e6baee4c5f5be4cd186a403cabd498fced82ac9c561e"}, @@ -1069,6 +2620,27 @@ pytest-asyncio = ">=0.17.2" [package.extras] testing = ["coverage (==6.2)", "mypy (==0.931)"] +[[package]] +name = "pytest-aiohttp" +version = "1.1.0" +description = "Pytest plugin for aiohttp support" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "pytest_aiohttp-1.1.0-py3-none-any.whl", hash = "sha256:f39a11693a0dce08dd6c542d241e199dd8047a6e6596b2bcfa60d373f143456d"}, + {file = "pytest_aiohttp-1.1.0.tar.gz", hash = "sha256:147de8cb164f3fc9d7196967f109ab3c0b93ea3463ab50631e56438eab7b5adc"}, +] + +[package.dependencies] +aiohttp = ">=3.11.0b0" +pytest = ">=6.1.0" +pytest-asyncio = ">=0.17.2" + +[package.extras] +testing = ["coverage (==6.2)", "mypy (==1.12.1)"] + [[package]] name = "pytest-asyncio" version = "0.23.8" @@ -1107,67 +2679,146 @@ pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +[[package]] +name = "pytest-xdist" +version = "3.6.1" +description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" +files = [ + {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, + {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, +] + +[package.dependencies] +execnet = ">=2.1" +pytest = ">=7.0.0" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + +[[package]] +name = "pytest-xdist" +version = "3.8.0" +description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88"}, + {file = "pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1"}, +] + +[package.dependencies] +execnet = ">=2.1" +pytest = ">=7.0.0" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["dev"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + [[package]] name = "pyyaml" -version = "6.0.2" +version = "6.0.3" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, + {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6"}, + {file = "PyYAML-6.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369"}, + {file = "PyYAML-6.0.3-cp38-cp38-win32.whl", hash = "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295"}, + {file = "PyYAML-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"}, + {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"}, + {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"}, + {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"}, + {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, + {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"}, + {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"}, + {file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"}, + {file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"}, + {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, ] [[package]] @@ -1177,6 +2828,7 @@ description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, @@ -1192,6 +2844,29 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "requests" +version = "2.32.5" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, + {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset_normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + [[package]] name = "responses" version = "0.25.8" @@ -1212,49 +2887,170 @@ urllib3 = ">=1.25.10,<3.0" [package.extras] tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli ; python_version < \"3.11\"", "tomli-w", "types-PyYAML", "types-requests"] +[[package]] +name = "ruff" +version = "0.11.5" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "ruff-0.11.5-py3-none-linux_armv6l.whl", hash = "sha256:2561294e108eb648e50f210671cc56aee590fb6167b594144401532138c66c7b"}, + {file = "ruff-0.11.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac12884b9e005c12d0bd121f56ccf8033e1614f736f766c118ad60780882a077"}, + {file = "ruff-0.11.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4bfd80a6ec559a5eeb96c33f832418bf0fb96752de0539905cf7b0cc1d31d779"}, + {file = "ruff-0.11.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0947c0a1afa75dcb5db4b34b070ec2bccee869d40e6cc8ab25aca11a7d527794"}, + {file = "ruff-0.11.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ad871ff74b5ec9caa66cb725b85d4ef89b53f8170f47c3406e32ef040400b038"}, + {file = "ruff-0.11.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6cf918390cfe46d240732d4d72fa6e18e528ca1f60e318a10835cf2fa3dc19f"}, + {file = "ruff-0.11.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56145ee1478582f61c08f21076dc59153310d606ad663acc00ea3ab5b2125f82"}, + {file = "ruff-0.11.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5f66f8f1e8c9fc594cbd66fbc5f246a8d91f916cb9667e80208663ec3728304"}, + {file = "ruff-0.11.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80b4df4d335a80315ab9afc81ed1cff62be112bd165e162b5eed8ac55bfc8470"}, + {file = "ruff-0.11.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3068befab73620b8a0cc2431bd46b3cd619bc17d6f7695a3e1bb166b652c382a"}, + {file = "ruff-0.11.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f5da2e710a9641828e09aa98b92c9ebbc60518fdf3921241326ca3e8f8e55b8b"}, + {file = "ruff-0.11.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ef39f19cb8ec98cbc762344921e216f3857a06c47412030374fffd413fb8fd3a"}, + {file = "ruff-0.11.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b2a7cedf47244f431fd11aa5a7e2806dda2e0c365873bda7834e8f7d785ae159"}, + {file = "ruff-0.11.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:81be52e7519f3d1a0beadcf8e974715b2dfc808ae8ec729ecfc79bddf8dbb783"}, + {file = "ruff-0.11.5-py3-none-win32.whl", hash = "sha256:e268da7b40f56e3eca571508a7e567e794f9bfcc0f412c4b607931d3af9c4afe"}, + {file = "ruff-0.11.5-py3-none-win_amd64.whl", hash = "sha256:6c6dc38af3cfe2863213ea25b6dc616d679205732dc0fb673356c2d69608f800"}, + {file = "ruff-0.11.5-py3-none-win_arm64.whl", hash = "sha256:67e241b4314f4eacf14a601d586026a962f4002a475aa702c69980a38087aa4e"}, + {file = "ruff-0.11.5.tar.gz", hash = "sha256:cae2e2439cb88853e421901ec040a758960b576126dab520fa08e9de431d1bef"}, +] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["dev"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +groups = ["main"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + [[package]] name = "tomli" -version = "2.2.1" +version = "2.3.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["dev"] markers = "python_full_version <= \"3.11.0a6\"" files = [ - {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, - {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, - {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, - {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, - {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, - {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, - {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, - {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, - {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, - {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, + {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, + {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, + {file = "tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf"}, + {file = "tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441"}, + {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845"}, + {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c"}, + {file = "tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456"}, + {file = "tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be"}, + {file = "tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac"}, + {file = "tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6"}, + {file = "tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876"}, + {file = "tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878"}, + {file = "tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b"}, + {file = "tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae"}, + {file = "tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b"}, + {file = "tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf"}, + {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f"}, + {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05"}, + {file = "tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606"}, + {file = "tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999"}, + {file = "tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e"}, + {file = "tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3"}, + {file = "tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc"}, + {file = "tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0"}, + {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879"}, + {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005"}, + {file = "tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463"}, + {file = "tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8"}, + {file = "tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77"}, + {file = "tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf"}, + {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530"}, + {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b"}, + {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67"}, + {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f"}, + {file = "tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0"}, + {file = "tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba"}, + {file = "tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b"}, + {file = "tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549"}, ] +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20241206" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" +files = [ + {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, + {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, +] + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20251115" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "types_python_dateutil-2.9.0.20251115-py3-none-any.whl", hash = "sha256:9cf9c1c582019753b8639a081deefd7e044b9fa36bd8217f565c6c4e36ee0624"}, + {file = "types_python_dateutil-2.9.0.20251115.tar.gz", hash = "sha256:8a47f2c3920f52a994056b8786309b43143faa5a64d4cbb2722d6addabdf1a58"}, +] + +[[package]] +name = "types-requests" +version = "2.32.0.20241016" +description = "Typing stubs for requests" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" +files = [ + {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, + {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, +] + +[package.dependencies] +urllib3 = ">=2" + +[[package]] +name = "types-requests" +version = "2.32.4.20250913" +description = "Typing stubs for requests" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "types_requests-2.32.4.20250913-py3-none-any.whl", hash = "sha256:78c9c1fffebbe0fa487a418e0fa5252017e9c60d1a2da394077f1780f655d7e1"}, + {file = "types_requests-2.32.4.20250913.tar.gz", hash = "sha256:abd6d4f9ce3a9383f269775a9835a4c24e5cd6b9f647d64f88aa4613c33def5d"}, +] + +[package.dependencies] +urllib3 = ">=2" + [[package]] name = "typing-extensions" version = "4.13.2" @@ -1262,12 +3058,41 @@ description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version < \"3.11\"" +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, ] +[[package]] +name = "typing-extensions" +version = "4.15.0" +description = "Backported and Experimental Type Hints for Python 3.9+" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, + {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, + {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.0" + [[package]] name = "urllib3" version = "2.2.3" @@ -1275,6 +3100,7 @@ description = "HTTP library with thread-safe connection pooling, file post, and optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, @@ -1287,19 +3113,23 @@ socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] -name = "userpath" -version = "1.9.2" -description = "Cross-platform tool for adding locations to the user PATH" +name = "urllib3" +version = "2.6.2" +description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.7" -groups = ["dev"] +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" files = [ - {file = "userpath-1.9.2-py3-none-any.whl", hash = "sha256:2cbf01a23d655a1ff8fc166dfb78da1b641d1ceabf0fe5f970767d380b14e89d"}, - {file = "userpath-1.9.2.tar.gz", hash = "sha256:6c52288dab069257cc831846d15d48133522455d4677ee69a9781f11dbefd815"}, + {file = "urllib3-2.6.2-py3-none-any.whl", hash = "sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd"}, + {file = "urllib3-2.6.2.tar.gz", hash = "sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797"}, ] -[package.dependencies] -click = "*" +[package.extras] +brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "yarl" @@ -1308,6 +3138,7 @@ description = "Yet another URL library" optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_full_version == \"3.8.*\" or platform_python_implementation == \"PyPy\"" files = [ {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e4ee8b8639070ff246ad3649294336b06db37a94bdea0d09ea491603e0be73b8"}, {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7cf963a357c5f00cb55b1955df8bbe68d2f2f65de065160a1c26b85a1e44172"}, @@ -1414,7 +3245,153 @@ idna = ">=2.0" multidict = ">=4.0" propcache = ">=0.2.0" +[[package]] +name = "yarl" +version = "1.22.0" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e"}, + {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f"}, + {file = "yarl-1.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467"}, + {file = "yarl-1.22.0-cp310-cp310-win32.whl", hash = "sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea"}, + {file = "yarl-1.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca"}, + {file = "yarl-1.22.0-cp310-cp310-win_arm64.whl", hash = "sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b"}, + {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511"}, + {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6"}, + {file = "yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e"}, + {file = "yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca"}, + {file = "yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b"}, + {file = "yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376"}, + {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f"}, + {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2"}, + {file = "yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520"}, + {file = "yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8"}, + {file = "yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c"}, + {file = "yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74"}, + {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53"}, + {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a"}, + {file = "yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67"}, + {file = "yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95"}, + {file = "yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d"}, + {file = "yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b"}, + {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10"}, + {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3"}, + {file = "yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62"}, + {file = "yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03"}, + {file = "yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249"}, + {file = "yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b"}, + {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4"}, + {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683"}, + {file = "yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da"}, + {file = "yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2"}, + {file = "yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79"}, + {file = "yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33"}, + {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1"}, + {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca"}, + {file = "yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c"}, + {file = "yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e"}, + {file = "yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27"}, + {file = "yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1"}, + {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748"}, + {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859"}, + {file = "yarl-1.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8"}, + {file = "yarl-1.22.0-cp39-cp39-win32.whl", hash = "sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b"}, + {file = "yarl-1.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed"}, + {file = "yarl-1.22.0-cp39-cp39-win_arm64.whl", hash = "sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2"}, + {file = "yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff"}, + {file = "yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.1" + [metadata] lock-version = "2.1" -python-versions = ">=3.8" -content-hash = "f2b4849cb247bdefbbc9b155d28c5e1bcf9b4ca3c2c92defd30b21206018fa3f" +python-versions = "^3.8" +content-hash = "5db7acef9b7f0eacccc4cf923ffc5b9a4b4af4f2be9283722b67173fe9468425" diff --git a/publish.sh b/publish.sh deleted file mode 100644 index a62ee7ca..00000000 --- a/publish.sh +++ /dev/null @@ -1,6 +0,0 @@ -# Deploy to https://pypi.org/project/auth0-python/ -# Requires a ~/.pypirc file in the developer machine with proper credentials - -#!/usr/bin/env bash -docker build -t auth0-python-sdk-publish . -docker run -it auth0-python-sdk-publish diff --git a/pyproject.toml b/pyproject.toml index 83c499fa..9c6dbb5c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,44 +1,101 @@ -[build-system] -requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"] -build-backend = "poetry_dynamic_versioning.backend" +[project] +name = "auth0-python" [tool.poetry] name = "auth0-python" -version = "0.0.0" # This is replaced by dynamic versioning -description = "" +version = "4.13.0" +description = "Auth0 Python SDK - Management and Authentication APIs" +readme = "README.md" authors = ["Auth0client.actions.list(...) -> AsyncPager[Action, ListActionsPaginatedResponseContent]client.actions.create(...) -> AsyncHttpResponse[CreateActionResponseContent]client.actions.get(...) -> AsyncHttpResponse[GetActionResponseContent]client.actions.delete(...) -> AsyncHttpResponse[None]client.actions.update(...) -> AsyncHttpResponse[UpdateActionResponseContent]client.actions.deploy(...) -> AsyncHttpResponse[DeployActionResponseContent]client.actions.test(...) -> AsyncHttpResponse[TestActionResponseContent]client.branding.get() -> AsyncHttpResponse[GetBrandingResponseContent]client.branding.update(...) -> AsyncHttpResponse[UpdateBrandingResponseContent]client.client_grants.list(...) -> AsyncPager[ClientGrantResponseContent, ListClientGrantPaginatedResponseContent]client.client_grants.create(...) -> AsyncHttpResponse[CreateClientGrantResponseContent]client.client_grants.delete(...) -> AsyncHttpResponse[None]client.client_grants.update(...) -> AsyncHttpResponse[UpdateClientGrantResponseContent]client.clients.list(...) -> AsyncPager[Client, ListClientsOffsetPaginatedResponseContent]client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scope:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scope:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client.clients.create(...) -> AsyncHttpResponse[CreateClientResponseContent]client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use
+client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method
+to configure the client with client secret (basic or post) or with no authentication method (none).
+- When using client_authentication_methods to configure the client with Private Key JWT authentication method, specify fully defined credentials.
+These credentials will be automatically enabled for Private Key JWT authentication on the client.
+- To configure client_authentication_methods, the create:client_credentials scope is required.
+- To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+
+true to disable Single Sign On, false otherwise (default: false)
+
+true if the custom login page is to be used, false otherwise. Defaults to true
+
+client.clients.get(...) -> AsyncHttpResponse[GetClientResponseContent]client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scopes:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scopes:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client.clients.delete(...) -> AsyncHttpResponse[None]client.clients.update(...) -> AsyncHttpResponse[UpdateClientResponseContent]client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method to configure the client with client secret (basic or post) or with no authentication method (none).
+- When using client_authentication_methods to configure the client with Private Key JWT authentication method, only specify the credential IDs that were generated when creating the credentials on the client.
+- To configure client_authentication_methods, the update:client_credentials scope is required.
+- To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+- To change a client's is_first_party property to false, the organization_usage and organization_require_behavior properties must be unset.
+140)
+
+true to use Auth0 instead of the IdP to do Single Sign On, false otherwise (default: false)
+
+true if this client can be used to make cross-origin authentication requests, false otherwise if cross origin is disabled
+
+true to disable Single Sign On, false otherwise (default: false)
+
+true if the custom login page is to be used, false otherwise.
+
+client.clients.rotate_secret(...) -> AsyncHttpResponse[RotateClientSecretResponseContent]client.connection_profiles.list(...) -> AsyncPager[ConnectionProfile, ListConnectionProfilesPaginatedResponseContent]client.connection_profiles.create(...) -> AsyncHttpResponse[CreateConnectionProfileResponseContent]client.connection_profiles.list_templates() -> AsyncHttpResponse[ListConnectionProfileTemplateResponseContent]client.connection_profiles.get_template(...) -> AsyncHttpResponse[GetConnectionProfileTemplateResponseContent]client.connection_profiles.get(...) -> AsyncHttpResponse[GetConnectionProfileResponseContent]client.connection_profiles.delete(...) -> AsyncHttpResponse[None]client.connection_profiles.update(...) -> AsyncHttpResponse[UpdateConnectionProfileResponseContent]client.connections.list(...) -> AsyncPager[ConnectionForList, ListConnectionsCheckpointPaginatedResponseContent]from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+client.connections.create(...) -> AsyncHttpResponse[CreateConnectionResponseContent]body.true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+false.)
+
+client.connections.get(...) -> AsyncHttpResponse[GetConnectionResponseContent]true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+client.connections.delete(...) -> AsyncHttpResponse[None]client.connections.update(...) -> AsyncHttpResponse[UpdateConnectionResponseContent]options parameter, the entire options object is overriden. To avoid partial data or other issues, ensure all parameters are present when using this option.
+true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+false.)
+
+client.connections.check_status(...) -> AsyncHttpResponse[None]ID. 200 OK http status code response is returned when the connection is online, otherwise a 404 status code is returned along with an error message
+client.custom_domains.list(...) -> AsyncHttpResponse[ListCustomDomainsResponseContent]domain:1 (ascending order by domain) is supported at this time.
+
+client.custom_domains.create(...) -> AsyncHttpResponse[CreateCustomDomainResponseContent]client.custom_domains.get(...) -> AsyncHttpResponse[GetCustomDomainResponseContent]client.custom_domains.delete(...) -> AsyncHttpResponse[None]client.custom_domains.update(...) -> AsyncHttpResponse[UpdateCustomDomainResponseContent]custom_client_ip_header for a domain, the body to
+send should be:
+{ "custom_client_ip_header": "cf-connecting-ip" }
+
+tls_policy for a domain, the body to send should be:
+{ "tls_policy": "recommended" }
+
+
+TLS Policies:
+
+- recommended - for modern usage this includes TLS 1.2 only
+
+
+Some considerations:
+
+- The TLS ciphers and protocols available in each TLS policy follow industry recommendations, and may be updated occasionally.
+- The compatible TLS policy is no longer supported.
+client.custom_domains.test(...) -> AsyncHttpResponse[TestCustomDomainResponseContent]client.custom_domains.verify(...) -> AsyncHttpResponse[VerifyCustomDomainResponseContent]status field to see its verification status. Once verification is complete, it may take up to 10 minutes before the custom domain can start accepting requests.
+
+For self_managed_certs, when the custom domain is verified for the first time, the response will also include the cname_api_key which you will need to configure your proxy. This key must be kept secret, and is used to validate the proxy requests.
+
+Learn more about verifying custom domains that use Auth0 Managed certificates.
+Learn more about verifying custom domains that use Self Managed certificates.
+client.device_credentials.list(...) -> AsyncPager[
+ DeviceCredential, ListDeviceCredentialsOffsetPaginatedResponseContent
+]public_key, refresh_token, or rotating_refresh_token) associated with a specific user.
+client.device_credentials.create_public_key(...) -> AsyncHttpResponse[CreatePublicKeyDeviceCredentialResponseContent]user_id. Device Credentials APIs are designed for ad-hoc administrative use only and paging is by default enabled for GET requests.
+
+When refresh token rotation is enabled, the endpoint becomes consistent. For more information, read Signing Keys.
+client.device_credentials.delete(...) -> AsyncHttpResponse[None]client.email_templates.create(...) -> AsyncHttpResponse[CreateEmailTemplateResponseContent]client.email_templates.get(...) -> AsyncHttpResponse[GetEmailTemplateResponseContent]client.email_templates.set(...) -> AsyncHttpResponse[SetEmailTemplateResponseContent]client.email_templates.update(...) -> AsyncHttpResponse[UpdateEmailTemplateResponseContent]client.event_streams.list(...) -> AsyncHttpResponse[typing.List[EventStreamResponseContent]]client.event_streams.create(...) -> AsyncHttpResponse[CreateEventStreamResponseContent]client.event_streams.get(...) -> AsyncHttpResponse[GetEventStreamResponseContent]client.event_streams.delete(...) -> AsyncHttpResponse[None]client.event_streams.update(...) -> AsyncHttpResponse[UpdateEventStreamResponseContent]client.event_streams.test(...) -> AsyncHttpResponse[CreateEventStreamTestEventResponseContent]client.flows.list(...) -> AsyncPager[FlowSummary, ListFlowsOffsetPaginatedResponseContent]client.flows.create(...) -> AsyncHttpResponse[CreateFlowResponseContent]client.flows.get(...) -> AsyncHttpResponse[GetFlowResponseContent]client.flows.delete(...) -> AsyncHttpResponse[None]client.flows.update(...) -> AsyncHttpResponse[UpdateFlowResponseContent]client.forms.list(...) -> AsyncPager[FormSummary, ListFormsOffsetPaginatedResponseContent]client.forms.create(...) -> AsyncHttpResponse[CreateFormResponseContent]client.forms.get(...) -> AsyncHttpResponse[GetFormResponseContent]client.forms.delete(...) -> AsyncHttpResponse[None]client.forms.update(...) -> AsyncHttpResponse[UpdateFormResponseContent]client.user_grants.list(...) -> AsyncPager[UserGrant, ListUserGrantsOffsetPaginatedResponseContent]client.user_grants.delete_by_user_id(...) -> AsyncHttpResponse[None]client.user_grants.delete(...) -> AsyncHttpResponse[None]client.hooks.list(...) -> AsyncPager[Hook, ListHooksOffsetPaginatedResponseContent]client.hooks.create(...) -> AsyncHttpResponse[CreateHookResponseContent]client.hooks.get(...) -> AsyncHttpResponse[GetHookResponseContent]client.hooks.delete(...) -> AsyncHttpResponse[None]client.hooks.update(...) -> AsyncHttpResponse[UpdateHookResponseContent]client.jobs.get(...) -> AsyncHttpResponse[GetJobResponseContent]client.log_streams.list() -> AsyncHttpResponse[typing.List[LogStreamResponseSchema]][{
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+}, {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+},
+{
+ "id": "string",
+ "name": "string",
+ "type": "eventgrid",
+ "status": "active|paused|suspended",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+},
+{
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+},
+{
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+},
+{
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+}]
+client.log_streams.create(...) -> AsyncHttpResponse[CreateLogStreamResponseContent]type of log stream being created determines the properties required in the sink payload.
+http Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "http",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+}
+eventbridge Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "eventbridge",
+ "sink": {
+ "awsRegion": "string",
+ "awsAccountId": "string"
+ }
+}
+The response will include an additional field awsPartnerEventSource in the sink: {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+}
+Azure Event Grid Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "eventgrid",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string"
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+}
+Datadog Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "datadog",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+}
+Splunk Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "splunk",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+}
+Sumo Logic Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "sumo",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+}
+client.log_streams.get(...) -> AsyncHttpResponse[GetLogStreamResponseContent]{
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+} {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+} {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+
+}{
+ "name": "string",
+ "type": "mixpanel",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string"
+ }
+ }
+
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "mixpanel",
+ "status": "active",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string" // the following is redacted on return
+ }
+ }
+
+ {
+ "name": "string",
+ "type": "segment",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "segment",
+ "status": "active",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+{
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+} {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+} status of a log stream maybe any of the following:
+1. active - Stream is currently enabled.
+2. paused - Stream is currently user disabled and will not attempt log delivery.
+3. suspended - Stream is currently disabled because of errors and will not attempt log delivery.
+client.log_streams.delete(...) -> AsyncHttpResponse[None]client.log_streams.update(...) -> AsyncHttpResponse[UpdateLogStreamResponseContent]eventbridge and eventgrid, updating the sink is not permitted.
+{
+ "status": "active|paused"
+}
+{
+ "name": "string"
+}
+http{
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONARRAY|JSONLINES",
+ "httpAuthorization": "string"
+ }
+}
+datadog{
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+}
+splunk{
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+}
+sumo{
+ "sink": {
+ "sumoSourceAddress": "string"
+ }
+}
+client.logs.list(...) -> AsyncPager[Log, ListLogOffsetPaginatedResponseContent]q parameter, or search from a specific log ID ("search from checkpoint").
+
+For more information on all possible event types, their respective acronyms, and descriptions, see Log Event Type Codes.
+
+fields and sort, see Searchable Fields.
+
+Auth0 limits the number of logs you can return by search criteria to 100 logs per request. Furthermore, you may paginate only through 1,000 search results. If you exceed this threshold, please redefine your search or use the get logs by checkpoint method.
+
+take parameter. If you use from at the same time as q, from takes precedence and q is ignored.from parameter.from and take will be ignored, and date ordering is not guaranteed.
+50. Max value: 100
+
+:1 for ascending and :-1 for descending. e.g. date:-1
+
+include_fields) in the result. Leave empty to retrieve all fields.
+
+true) or excluded (false)
+
+client.logs.get(...) -> AsyncHttpResponse[GetLogResponseContent]client.network_acls.list(...) -> AsyncPager[
+ NetworkAclsResponseContent, ListNetworkAclsOffsetPaginatedResponseContent
+]client.network_acls.create(...) -> AsyncHttpResponse[None]client.network_acls.get(...) -> AsyncHttpResponse[GetNetworkAclsResponseContent]client.network_acls.set(...) -> AsyncHttpResponse[SetNetworkAclsResponseContent]client.network_acls.delete(...) -> AsyncHttpResponse[None]client.network_acls.update(...) -> AsyncHttpResponse[UpdateNetworkAclResponseContent]client.organizations.list(...) -> AsyncPager[Organization, ListOrganizationsPaginatedResponseContent]from: Optional id from which to start selection.take: The total number of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1. We currently support sorting by the following fields: name, display_name and created_at.
+
+client.organizations.create(...) -> AsyncHttpResponse[CreateOrganizationResponseContent]client.organizations.get_by_name(...) -> AsyncHttpResponse[GetOrganizationByNameResponseContent]client.organizations.get(...) -> AsyncHttpResponse[GetOrganizationResponseContent]client.organizations.delete(...) -> AsyncHttpResponse[None]client.organizations.update(...) -> AsyncHttpResponse[UpdateOrganizationResponseContent]client.prompts.get_settings() -> AsyncHttpResponse[GetSettingsResponseContent]client.prompts.update_settings(...) -> AsyncHttpResponse[UpdateSettingsResponseContent]client.refresh_tokens.get(...) -> AsyncHttpResponse[GetRefreshTokenResponseContent]client.refresh_tokens.delete(...) -> AsyncHttpResponse[None]client.resource_servers.list(...) -> AsyncPager[ResourceServer, ListResourceServerOffsetPaginatedResponseContent]client.resource_servers.create(...) -> AsyncHttpResponse[CreateResourceServerResponseContent]client.resource_servers.get(...) -> AsyncHttpResponse[GetResourceServerResponseContent]client.resource_servers.delete(...) -> AsyncHttpResponse[None]client.resource_servers.update(...) -> AsyncHttpResponse[UpdateResourceServerResponseContent]client.roles.list(...) -> AsyncPager[Role, ListRolesOffsetPaginatedResponseContent]client.roles.create(...) -> AsyncHttpResponse[CreateRoleResponseContent]client.roles.get(...) -> AsyncHttpResponse[GetRoleResponseContent]client.roles.delete(...) -> AsyncHttpResponse[None]client.roles.update(...) -> AsyncHttpResponse[UpdateRoleResponseContent]client.rules.list(...) -> AsyncPager[Rule, ListRulesOffsetPaginatedResponseContent]client.rules.create(...) -> AsyncHttpResponse[CreateRuleResponseContent]login_success can change the rule's function signature to have user omitted.
+client.rules.get(...) -> AsyncHttpResponse[GetRuleResponseContent]client.rules.delete(...) -> AsyncHttpResponse[None]client.rules.update(...) -> AsyncHttpResponse[UpdateRuleResponseContent]client.rules_configs.list() -> AsyncHttpResponse[typing.List[RulesConfig]]client.rules_configs.set(...) -> AsyncHttpResponse[SetRulesConfigResponseContent]client.rules_configs.delete(...) -> AsyncHttpResponse[None]client.self_service_profiles.list(...) -> AsyncPager[SelfServiceProfile, ListSelfServiceProfilesPaginatedResponseContent]client.self_service_profiles.create(...) -> AsyncHttpResponse[CreateSelfServiceProfileResponseContent]client.self_service_profiles.get(...) -> AsyncHttpResponse[GetSelfServiceProfileResponseContent]client.self_service_profiles.delete(...) -> AsyncHttpResponse[None]client.self_service_profiles.update(...) -> AsyncHttpResponse[UpdateSelfServiceProfileResponseContent]client.sessions.get(...) -> AsyncHttpResponse[GetSessionResponseContent]client.sessions.delete(...) -> AsyncHttpResponse[None]client.sessions.update(...) -> AsyncHttpResponse[UpdateSessionResponseContent]client.sessions.revoke(...) -> AsyncHttpResponse[None]client.stats.get_active_users_count() -> AsyncHttpResponse[GetActiveUsersCountStatsResponseContent]client.stats.get_daily(...) -> AsyncHttpResponse[typing.List[DailyStats]]client.supplemental_signals.get() -> AsyncHttpResponse[GetSupplementalSignalsResponseContent]client.supplemental_signals.patch(...) -> AsyncHttpResponse[PatchSupplementalSignalsResponseContent]client.tickets.verify_email(...) -> AsyncHttpResponse[VerifyEmailTicketResponseContent]client.tickets.change_password(...) -> AsyncHttpResponse[ChangePasswordTicketResponseContent]client.token_exchange_profiles.list(...) -> AsyncPager[
+ TokenExchangeProfileResponseContent, ListTokenExchangeProfileResponseContent
+]from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+client.token_exchange_profiles.create(...) -> AsyncHttpResponse[CreateTokenExchangeProfileResponseContent]client.token_exchange_profiles.get(...) -> AsyncHttpResponse[GetTokenExchangeProfileResponseContent]client.token_exchange_profiles.delete(...) -> AsyncHttpResponse[None]client.token_exchange_profiles.update(...) -> AsyncHttpResponse[None]client.user_attribute_profiles.list(...) -> AsyncPager[
+ UserAttributeProfile, ListUserAttributeProfilesPaginatedResponseContent
+]client.user_attribute_profiles.create(...) -> AsyncHttpResponse[CreateUserAttributeProfileResponseContent]client.user_attribute_profiles.list_templates() -> AsyncHttpResponse[ListUserAttributeProfileTemplateResponseContent]client.user_attribute_profiles.get_template(...) -> AsyncHttpResponse[GetUserAttributeProfileTemplateResponseContent]client.user_attribute_profiles.get(...) -> AsyncHttpResponse[GetUserAttributeProfileResponseContent]client.user_attribute_profiles.delete(...) -> AsyncHttpResponse[None]client.user_attribute_profiles.update(...) -> AsyncHttpResponse[UpdateUserAttributeProfileResponseContent]client.user_blocks.list_by_identifier(...) -> AsyncHttpResponse[ListUserBlocksByIdentifierResponseContent]client.user_blocks.delete_by_identifier(...) -> AsyncHttpResponse[None]client.user_blocks.list(...) -> AsyncHttpResponse[ListUserBlocksResponseContent]client.user_blocks.delete(...) -> AsyncHttpResponse[None]client.users.list(...) -> AsyncPager[UserResponseSchema, ListUsersOffsetPaginatedResponseContent]q query parameter can be used to get users that match the specified criteria using query string syntax.
+
+Learn more about searching for users.
+
+Read about best practices when working with the API endpoints for retrieving users.
+
+Auth0 limits the number of users you can return. If you exceed this threshold, please redefine your search, use the export job, or the User Import / Export extension.
+field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1
+
+search_engine=v1. To filter by connection with search_engine=v2|v3, use q=identities.connection:"connection_name"
+
+client.users.create(...) -> AsyncHttpResponse[CreateUserResponseContent]connection is required but other parameters such as email and password are dependent upon the type of connection.
+client.users.list_users_by_email(...) -> AsyncHttpResponse[typing.List[UserResponseSchema]]client.users.get(...) -> AsyncHttpResponse[GetUserResponseContent]client.users.delete(...) -> AsyncHttpResponse[None]client.users.update(...) -> AsyncHttpResponse[UpdateUserResponseContent]user_metadata and app_metadata). These properties are merged instead of being replaced but be careful, the merge only occurs on the first level.email, email_verified, phone_number, phone_verified, username or password of a secondary identity, you need to specify the connection property too.email or phone_number you can specify, optionally, the client_id property.email_verified is not supported for enterprise and passwordless sms connections.blocked to false does not affect the user's blocked state from an excessive amount of incorrectly provided credentials. Use the "Unblock a user" endpoint from the "User Blocks" API to change the user's state.null as the value.{ "email_verified": true }
+
+user_metadata:
+{ "user_metadata" : { "profileCode": 1479 } }
+
+To add the field addresses the body to send should be:
+{ "user_metadata" : { "addresses": {"work_address": "100 Industrial Way"} }}
+
+The modified object ends up with the following user_metadata property:{
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": { "work_address": "100 Industrial Way" }
+ }
+}
+
+"home_address": "742 Evergreen Terrace" (using the addresses property) we should send the whole addresses object. Since this is a first-level object, the object will be merged in, but its own properties will not be. The body to send should be:
+{
+ "user_metadata": {
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+}
+
+The modified object ends up with the following user_metadata property:
+{
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+}
+client.users.regenerate_recovery_code(...) -> AsyncHttpResponse[RegenerateUsersRecoveryCodeResponseContent]client.users.revoke_access(...) -> AsyncHttpResponse[None]client.actions.versions.list(...) -> AsyncPager[ActionVersion, ListActionVersionsPaginatedResponseContent]client.actions.versions.get(...) -> AsyncHttpResponse[GetActionVersionResponseContent]client.actions.versions.deploy(...) -> AsyncHttpResponse[DeployActionVersionResponseContent]client.actions.executions.get(...) -> AsyncHttpResponse[GetActionExecutionResponseContent]client.actions.triggers.list() -> AsyncHttpResponse[ListActionTriggersResponseContent]client.actions.triggers.bindings.list(...) -> AsyncPager[ActionBinding, ListActionBindingsPaginatedResponseContent]client.actions.triggers.bindings.update_many(...) -> AsyncHttpResponse[UpdateActionBindingsResponseContent]client.anomaly.blocks.check_ip(...) -> AsyncHttpResponse[None]client.anomaly.blocks.unblock_ip(...) -> AsyncHttpResponse[None]client.attack_protection.bot_detection.get() -> AsyncHttpResponse[GetBotDetectionSettingsResponseContent]client.attack_protection.bot_detection.update(...) -> AsyncHttpResponse[UpdateBotDetectionSettingsResponseContent]client.attack_protection.breached_password_detection.get() -> AsyncHttpResponse[GetBreachedPasswordDetectionSettingsResponseContent]client.attack_protection.breached_password_detection.update(...) -> AsyncHttpResponse[UpdateBreachedPasswordDetectionSettingsResponseContent]block, user_notification, admin_notification.
+
+immediately, daily, weekly, monthly.
+
+client.attack_protection.brute_force_protection.get() -> AsyncHttpResponse[GetBruteForceSettingsResponseContent]client.attack_protection.brute_force_protection.update(...) -> AsyncHttpResponse[UpdateBruteForceSettingsResponseContent]block, user_notification.
+
+count_per_identifier_and_ip, count_per_identifier.
+
+client.attack_protection.captcha.get() -> AsyncHttpResponse[GetAttackProtectionCaptchaResponseContent]client.attack_protection.captcha.update(...) -> AsyncHttpResponse[UpdateAttackProtectionCaptchaResponseContent]client.attack_protection.suspicious_ip_throttling.get() -> AsyncHttpResponse[GetSuspiciousIpThrottlingSettingsResponseContent]client.attack_protection.suspicious_ip_throttling.update(...) -> AsyncHttpResponse[UpdateSuspiciousIpThrottlingSettingsResponseContent]block, admin_notification.
+
+client.branding.templates.get_universal_login() -> AsyncHttpResponse[GetUniversalLoginTemplateResponseContent]client.branding.templates.update_universal_login(...) -> AsyncHttpResponse[None]When content-type header is set to application/json:
+{
+ "template": "<!DOCTYPE html>{% assign resolved_dir = dir | default: "auto" %}<html lang="{{locale}}" dir="{{resolved_dir}}"><head>{%- auth0:head -%}</head><body class="_widget-auto-layout">{%- auth0:widget -%}</body></html>"
+}
+
+
+
+ When content-type header is set to text/html:
+
+<!DOCTYPE html>
+{% assign resolved_dir = dir | default: "auto" %}
+<html lang="{{locale}}" dir="{{resolved_dir}}">
+ <head>
+ {%- auth0:head -%}
+ </head>
+ <body class="_widget-auto-layout">
+ {%- auth0:widget -%}
+ </body>
+</html>
+
+client.branding.templates.delete_universal_login() -> AsyncHttpResponse[None]client.branding.themes.create(...) -> AsyncHttpResponse[CreateBrandingThemeResponseContent]client.branding.themes.get_default() -> AsyncHttpResponse[GetBrandingDefaultThemeResponseContent]client.branding.themes.get(...) -> AsyncHttpResponse[GetBrandingThemeResponseContent]client.branding.themes.delete(...) -> AsyncHttpResponse[None]client.branding.themes.update(...) -> AsyncHttpResponse[UpdateBrandingThemeResponseContent]client.branding.phone.providers.list(...) -> AsyncHttpResponse[ListBrandingPhoneProvidersResponseContent]client.branding.phone.providers.create(...) -> AsyncHttpResponse[CreateBrandingPhoneProviderResponseContent]credentials object requires different properties depending on the phone provider (which is specified using the name property).
+client.branding.phone.providers.get(...) -> AsyncHttpResponse[GetBrandingPhoneProviderResponseContent]client.branding.phone.providers.delete(...) -> AsyncHttpResponse[None]client.branding.phone.providers.update(...) -> AsyncHttpResponse[UpdateBrandingPhoneProviderResponseContent]credentials object requires different properties depending on the phone provider (which is specified using the name property).
+client.branding.phone.providers.test(...) -> AsyncHttpResponse[CreatePhoneProviderSendTestResponseContent]client.branding.phone.templates.list(...) -> AsyncHttpResponse[ListPhoneTemplatesResponseContent]client.branding.phone.templates.create(...) -> AsyncHttpResponse[CreatePhoneTemplateResponseContent]client.branding.phone.templates.get(...) -> AsyncHttpResponse[GetPhoneTemplateResponseContent]client.branding.phone.templates.delete(...) -> AsyncHttpResponse[None]client.branding.phone.templates.update(...) -> AsyncHttpResponse[UpdatePhoneTemplateResponseContent]client.branding.phone.templates.reset(...) -> AsyncHttpResponse[ResetPhoneTemplateResponseContent]client.branding.phone.templates.test(...) -> AsyncHttpResponse[CreatePhoneTemplateTestNotificationResponseContent]client.client_grants.organizations.list(...) -> AsyncPager[Organization, ListClientGrantOrganizationsPaginatedResponseContent]client.clients.credentials.list(...) -> AsyncHttpResponse[typing.List[ClientCredential]]client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+client.clients.credentials.create(...) -> AsyncHttpResponse[PostClientCredentialResponseContent]{
+ "credential_type": "public_key",
+ "name": "string",
+ "pem": "string",
+ "alg": "RS256",
+ "parse_expiry_from_cert": false,
+ "expires_at": "2022-12-31T23:59:59Z"
+}
+{
+ "credential_type": "x509_cert",
+ "name": "string",
+ "pem": "string"
+}CA-signed Certificate Sample (subject_dn): {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "subject_dn": "string"
+}Self-signed Certificate Sample: {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "pem": "string"
+}
+
+The credential will be created but not yet enabled for use until you set the corresponding properties in the client:
+client_authentication_methods property on the client. For more information, read Configure Private Key JWT Authentication and Configure mTLS Authenticationsigned_request_objectproperty on the client. For more information, read Configure JWT-secured Authorization Requests (JAR)client.clients.credentials.get(...) -> AsyncHttpResponse[GetClientCredentialResponseContent]client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+client.clients.credentials.delete(...) -> AsyncHttpResponse[None]client.clients.credentials.update(...) -> AsyncHttpResponse[PatchClientCredentialResponseContent]client.clients.connections.get(...) -> AsyncPager[ConnectionForList, ListClientConnectionsResponseContent]read:connections scope and any one of read:clients or read:client_summary.
+ from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+client.connections.clients.get(...) -> AsyncPager[ConnectionEnabledClient, GetConnectionEnabledClientsResponseContent]from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+client.connections.clients.update(...) -> AsyncHttpResponse[None]client.connections.directory_provisioning.get(...) -> AsyncHttpResponse[GetDirectoryProvisioningResponseContent]client.connections.directory_provisioning.create(...) -> AsyncHttpResponse[CreateDirectoryProvisioningResponseContent]client.connections.directory_provisioning.delete(...) -> AsyncHttpResponse[None]client.connections.directory_provisioning.update(...) -> AsyncHttpResponse[UpdateDirectoryProvisioningResponseContent]client.connections.directory_provisioning.get_default_mapping(...) -> AsyncHttpResponse[GetDirectoryProvisioningDefaultMappingResponseContent]client.connections.keys.get(...) -> AsyncHttpResponse[typing.List[ConnectionKey]]client.connections.keys.rotate(...) -> AsyncHttpResponse[RotateConnectionsKeysResponseContent]client.connections.scim_configuration.get(...) -> AsyncHttpResponse[GetScimConfigurationResponseContent]connectionId.
+client.connections.scim_configuration.create(...) -> AsyncHttpResponse[CreateScimConfigurationResponseContent]client.connections.scim_configuration.delete(...) -> AsyncHttpResponse[None]connectionId.
+client.connections.scim_configuration.update(...) -> AsyncHttpResponse[UpdateScimConfigurationResponseContent]connectionId.
+client.connections.scim_configuration.get_default_mapping(...) -> AsyncHttpResponse[GetScimConfigurationDefaultMappingResponseContent]connectionId.
+client.connections.users.delete_by_email(...) -> AsyncHttpResponse[None]client.connections.directory_provisioning.synchronizations.create(...) -> AsyncHttpResponse[CreateDirectorySynchronizationResponseContent]client.connections.scim_configuration.tokens.get(...) -> AsyncHttpResponse[GetScimTokensResponseContent]id.
+client.connections.scim_configuration.tokens.create(...) -> AsyncHttpResponse[CreateScimTokenResponseContent]client.connections.scim_configuration.tokens.delete(...) -> AsyncHttpResponse[None]id and tokenId.
+client.emails.provider.get(...) -> AsyncHttpResponse[GetEmailProviderResponseContent]client.emails.provider.create(...) -> AsyncHttpResponse[CreateEmailProviderResponseContent]credentials object
+requires different properties depending on the email provider (which is specified using the name property):
+mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+options, which will be used when sending an email:
+smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ client.emails.provider.delete() -> AsyncHttpResponse[None]client.emails.provider.update(...) -> AsyncHttpResponse[UpdateEmailProviderResponseContent]credentials object
+requires different properties depending on the email provider (which is specified using the name property):
+mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+options, which will be used when sending an email:
+smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ client.event_streams.deliveries.list(...) -> AsyncHttpResponse[typing.List[EventStreamDelivery]]client.event_streams.deliveries.get_history(...) -> AsyncHttpResponse[GetEventStreamDeliveryHistoryResponseContent]client.event_streams.redeliveries.create(...) -> AsyncHttpResponse[CreateEventStreamRedeliveryResponseContent]client.event_streams.redeliveries.create_by_id(...) -> AsyncHttpResponse[None]client.flows.executions.list(...) -> AsyncPager[FlowExecutionSummary, ListFlowExecutionsPaginatedResponseContent]client.flows.executions.get(...) -> AsyncHttpResponse[GetFlowExecutionResponseContent]client.flows.executions.delete(...) -> AsyncHttpResponse[None]client.flows.vault.connections.list(...) -> AsyncPager[
+ FlowsVaultConnectionSummary,
+ ListFlowsVaultConnectionsOffsetPaginatedResponseContent,
+]client.flows.vault.connections.create(...) -> AsyncHttpResponse[CreateFlowsVaultConnectionResponseContent]client.flows.vault.connections.get(...) -> AsyncHttpResponse[GetFlowsVaultConnectionResponseContent]client.flows.vault.connections.delete(...) -> AsyncHttpResponse[None]client.flows.vault.connections.update(...) -> AsyncHttpResponse[UpdateFlowsVaultConnectionResponseContent]client.guardian.enrollments.create_ticket(...) -> AsyncHttpResponse[CreateGuardianEnrollmentTicketResponseContent]client.guardian.enrollments.get(...) -> AsyncHttpResponse[GetGuardianEnrollmentResponseContent]client.guardian.enrollments.delete(...) -> AsyncHttpResponse[None]client.guardian.factors.list() -> AsyncHttpResponse[typing.List[GuardianFactor]]client.guardian.factors.set(...) -> AsyncHttpResponse[SetGuardianFactorResponseContent]client.guardian.policies.list() -> AsyncHttpResponse[ListGuardianPoliciesResponseContent]all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+client.guardian.policies.set(...) -> AsyncHttpResponse[SetGuardianPoliciesResponseContent]all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+client.guardian.factors.phone.get_message_types() -> AsyncHttpResponse[GetGuardianFactorPhoneMessageTypesResponseContent]client.guardian.factors.phone.set_message_types(...) -> AsyncHttpResponse[SetGuardianFactorPhoneMessageTypesResponseContent]client.guardian.factors.phone.get_twilio_provider() -> AsyncHttpResponse[GetGuardianFactorsProviderPhoneTwilioResponseContent]client.guardian.factors.phone.set_twilio_provider(...) -> AsyncHttpResponse[SetGuardianFactorsProviderPhoneTwilioResponseContent]client.guardian.factors.phone.get_selected_provider() -> AsyncHttpResponse[GetGuardianFactorsProviderPhoneResponseContent]client.guardian.factors.phone.set_provider(...) -> AsyncHttpResponse[SetGuardianFactorsProviderPhoneResponseContent]client.guardian.factors.phone.get_templates() -> AsyncHttpResponse[GetGuardianFactorPhoneTemplatesResponseContent]client.guardian.factors.phone.set_templates(...) -> AsyncHttpResponse[SetGuardianFactorPhoneTemplatesResponseContent]client.guardian.factors.push_notification.get_apns_provider() -> AsyncHttpResponse[GetGuardianFactorsProviderApnsResponseContent]client.guardian.factors.push_notification.set_apns_provider(...) -> AsyncHttpResponse[SetGuardianFactorsProviderPushNotificationApnsResponseContent]client.guardian.factors.push_notification.set_fcm_provider(...) -> AsyncHttpResponse[SetGuardianFactorsProviderPushNotificationFcmResponseContent]client.guardian.factors.push_notification.set_fcmv_1_provider(...) -> AsyncHttpResponse[
+ SetGuardianFactorsProviderPushNotificationFcmv1ResponseContent
+]client.guardian.factors.push_notification.get_sns_provider() -> AsyncHttpResponse[GetGuardianFactorsProviderSnsResponseContent]client.guardian.factors.push_notification.set_sns_provider(...) -> AsyncHttpResponse[SetGuardianFactorsProviderPushNotificationSnsResponseContent]client.guardian.factors.push_notification.update_sns_provider(...) -> AsyncHttpResponse[
+ UpdateGuardianFactorsProviderPushNotificationSnsResponseContent
+]client.guardian.factors.push_notification.get_selected_provider() -> AsyncHttpResponse[GetGuardianFactorsProviderPushNotificationResponseContent]client.guardian.factors.push_notification.set_provider(...) -> AsyncHttpResponse[SetGuardianFactorsProviderPushNotificationResponseContent]client.guardian.factors.sms.get_twilio_provider() -> AsyncHttpResponse[GetGuardianFactorsProviderSmsTwilioResponseContent]client.guardian.factors.sms.set_twilio_provider(...) -> AsyncHttpResponse[SetGuardianFactorsProviderSmsTwilioResponseContent]client.guardian.factors.sms.get_selected_provider() -> AsyncHttpResponse[GetGuardianFactorsProviderSmsResponseContent]client.guardian.factors.sms.set_provider(...) -> AsyncHttpResponse[SetGuardianFactorsProviderSmsResponseContent]client.guardian.factors.sms.get_templates() -> AsyncHttpResponse[GetGuardianFactorSmsTemplatesResponseContent]client.guardian.factors.sms.set_templates(...) -> AsyncHttpResponse[SetGuardianFactorSmsTemplatesResponseContent]client.guardian.factors.duo.settings.get() -> AsyncHttpResponse[GetGuardianFactorDuoSettingsResponseContent]client.guardian.factors.duo.settings.set(...) -> AsyncHttpResponse[SetGuardianFactorDuoSettingsResponseContent]client.guardian.factors.duo.settings.update(...) -> AsyncHttpResponse[UpdateGuardianFactorDuoSettingsResponseContent]client.hooks.secrets.get(...) -> AsyncHttpResponse[GetHookSecretResponseContent]client.hooks.secrets.create(...) -> AsyncHttpResponse[None]client.hooks.secrets.delete(...) -> AsyncHttpResponse[None]client.hooks.secrets.update(...) -> AsyncHttpResponse[None]client.jobs.users_exports.create(...) -> AsyncHttpResponse[CreateExportUsersResponseContent]client.jobs.users_imports.create(...) -> AsyncHttpResponse[CreateImportUsersResponseContent]client.jobs.verification_email.create(...) -> AsyncHttpResponse[CreateVerificationEmailResponseContent]client.jobs.errors.get(...) -> AsyncHttpResponse[ErrorsGetResponse]client.keys.custom_signing.get() -> AsyncHttpResponse[GetCustomSigningKeysResponseContent]client.keys.custom_signing.set(...) -> AsyncHttpResponse[SetCustomSigningKeysResponseContent]client.keys.custom_signing.delete() -> AsyncHttpResponse[None]client.keys.encryption.list(...) -> AsyncPager[EncryptionKey, ListEncryptionKeyOffsetPaginatedResponseContent]client.keys.encryption.create(...) -> AsyncHttpResponse[CreateEncryptionKeyResponseContent]client.keys.encryption.rekey() -> AsyncHttpResponse[None]client.keys.encryption.get(...) -> AsyncHttpResponse[GetEncryptionKeyResponseContent]client.keys.encryption.import_(...) -> AsyncHttpResponse[ImportEncryptionKeyResponseContent]client.keys.encryption.delete(...) -> AsyncHttpResponse[None]client.keys.encryption.create_public_wrapping_key(...) -> AsyncHttpResponse[CreateEncryptionKeyPublicWrappingResponseContent]client.keys.signing.list() -> AsyncHttpResponse[typing.List[SigningKeys]]client.keys.signing.rotate() -> AsyncHttpResponse[RotateSigningKeysResponseContent]client.keys.signing.get(...) -> AsyncHttpResponse[GetSigningKeysResponseContent]client.keys.signing.revoke(...) -> AsyncHttpResponse[RevokedSigningKeysResponseContent]client.organizations.client_grants.list(...) -> AsyncPager[
+ OrganizationClientGrant,
+ ListOrganizationClientGrantsOffsetPaginatedResponseContent,
+]client.organizations.client_grants.create(...) -> AsyncHttpResponse[AssociateOrganizationClientGrantResponseContent]client.organizations.client_grants.delete(...) -> AsyncHttpResponse[None]client.organizations.discovery_domains.list(...) -> AsyncPager[
+ OrganizationDiscoveryDomain, ListOrganizationDiscoveryDomainsResponseContent
+]client.organizations.discovery_domains.create(...) -> AsyncHttpResponse[CreateOrganizationDiscoveryDomainResponseContent]status field must be either pending or verified.
+client.organizations.discovery_domains.get(...) -> AsyncHttpResponse[GetOrganizationDiscoveryDomainResponseContent]client.organizations.discovery_domains.delete(...) -> AsyncHttpResponse[None]client.organizations.discovery_domains.update(...) -> AsyncHttpResponse[UpdateOrganizationDiscoveryDomainResponseContent]status field must be either pending or verified.
+client.organizations.enabled_connections.list(...) -> AsyncPager[
+ OrganizationConnection,
+ ListOrganizationConnectionsOffsetPaginatedResponseContent,
+]client.organizations.enabled_connections.add(...) -> AsyncHttpResponse[AddOrganizationConnectionResponseContent]client.organizations.enabled_connections.get(...) -> AsyncHttpResponse[GetOrganizationConnectionResponseContent]client.organizations.enabled_connections.delete(...) -> AsyncHttpResponse[None]client.organizations.enabled_connections.update(...) -> AsyncHttpResponse[UpdateOrganizationConnectionResponseContent]client.organizations.invitations.list(...) -> AsyncPager[
+ OrganizationInvitation,
+ ListOrganizationInvitationsOffsetPaginatedResponseContent,
+]client.organizations.invitations.create(...) -> AsyncHttpResponse[CreateOrganizationInvitationResponseContent]client.organizations.invitations.get(...) -> AsyncHttpResponse[GetOrganizationInvitationResponseContent]client.organizations.invitations.delete(...) -> AsyncHttpResponse[None]client.organizations.members.list(...) -> AsyncPager[OrganizationMember, ListOrganizationMembersPaginatedResponseContent]fields parameter to optionally define the specific member details retrieved. If fields is left blank, all fields (except roles) are returned.
+ fields=roles to retrieve the roles assigned to each listed member. To use this parameter, you must include the read:organization_member_roles scope in the token.
+ from parameter. If there are more results, a next value will be included in the response. You can use this for subsequent API calls. When next is no longer included in the response, this indicates there are no more pages remaining.
+client.organizations.members.create(...) -> AsyncHttpResponse[None]client.organizations.members.delete(...) -> AsyncHttpResponse[None]client.organizations.members.roles.list(...) -> AsyncPager[Role, ListOrganizationMemberRolesOffsetPaginatedResponseContent]client.organizations.members.roles.assign(...) -> AsyncHttpResponse[None]client.organizations.members.roles.delete(...) -> AsyncHttpResponse[None]client.prompts.rendering.list(...) -> AsyncPager[AculResponseContent, ListAculsOffsetPaginatedResponseContent]client.prompts.rendering.bulk_update(...) -> AsyncHttpResponse[BulkUpdateAculResponseContent]client.prompts.rendering.get(...) -> AsyncHttpResponse[GetAculResponseContent]client.prompts.rendering.update(...) -> AsyncHttpResponse[UpdateAculResponseContent]client.prompts.custom_text.get(...) -> AsyncHttpResponse[GetCustomTextsByLanguageResponseContent]client.prompts.custom_text.set(...) -> AsyncHttpResponse[None]client.prompts.partials.get(...) -> AsyncHttpResponse[GetPartialsResponseContent]client.prompts.partials.set(...) -> AsyncHttpResponse[None]client.risk_assessments.settings.get() -> AsyncHttpResponse[GetRiskAssessmentsSettingsResponseContent]client.risk_assessments.settings.update(...) -> AsyncHttpResponse[UpdateRiskAssessmentsSettingsResponseContent]client.risk_assessments.settings.new_device.get() -> AsyncHttpResponse[GetRiskAssessmentsSettingsNewDeviceResponseContent]client.risk_assessments.settings.new_device.update(...) -> AsyncHttpResponse[UpdateRiskAssessmentsSettingsNewDeviceResponseContent]client.roles.permissions.list(...) -> AsyncPager[
+ PermissionsResponsePayload,
+ ListRolePermissionsOffsetPaginatedResponseContent,
+]client.roles.permissions.add(...) -> AsyncHttpResponse[None]client.roles.permissions.delete(...) -> AsyncHttpResponse[None]client.roles.users.list(...) -> AsyncPager[RoleUser, ListRoleUsersPaginatedResponseContent]from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+client.roles.users.assign(...) -> AsyncHttpResponse[None]client.self_service_profiles.custom_text.list(...) -> AsyncHttpResponse[ListSelfServiceProfileCustomTextResponseContent]client.self_service_profiles.custom_text.set(...) -> AsyncHttpResponse[SetSelfServiceProfileCustomTextResponseContent]client.self_service_profiles.sso_ticket.create(...) -> AsyncHttpResponse[CreateSelfServiceProfileSsoTicketResponseContent]client.self_service_profiles.sso_ticket.revoke(...) -> AsyncHttpResponse[None]client.tenants.settings.get(...) -> AsyncHttpResponse[GetTenantSettingsResponseContent]client.tenants.settings.update(...) -> AsyncHttpResponse[UpdateTenantSettingsResponseContent]client.users.authentication_methods.list(...) -> AsyncPager[
+ UserAuthenticationMethod,
+ ListUserAuthenticationMethodsOffsetPaginatedResponseContent,
+]client.users.authentication_methods.create(...) -> AsyncHttpResponse[CreateUserAuthenticationMethodResponseContent]client.users.authentication_methods.set(...) -> AsyncHttpResponse[typing.List[SetUserAuthenticationMethodResponseContent]]client.users.authentication_methods.delete_all(...) -> AsyncHttpResponse[None]client.users.authentication_methods.get(...) -> AsyncHttpResponse[GetUserAuthenticationMethodResponseContent]client.users.authentication_methods.delete(...) -> AsyncHttpResponse[None]client.users.authentication_methods.update(...) -> AsyncHttpResponse[UpdateUserAuthenticationMethodResponseContent]client.users.authenticators.delete_all(...) -> AsyncHttpResponse[None]client.users.connected_accounts.list(...) -> AsyncPager[ConnectedAccount, ListUserConnectedAccountsResponseContent]client.users.enrollments.get(...) -> AsyncHttpResponse[typing.List[UsersEnrollment]]client.users.federated_connections_tokensets.list(...) -> AsyncHttpResponse[typing.List[FederatedConnectionTokenSet]]client.users.federated_connections_tokensets.delete(...) -> AsyncHttpResponse[None]client.users.identities.link(...) -> AsyncHttpResponse[typing.List[UserIdentity]]update:current_user_identities scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer PRIMARY_ACCOUNT_JWT"
+ {
+ "link_with": "SECONDARY_ACCOUNT_JWT"
+ }
+
+ In this case, only the link_with param is required in the body, which also contains the JWT obtained upon the secondary account's authentication.
+ update:users scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer YOUR_API_V2_TOKEN"
+ {
+ "provider": "SECONDARY_ACCOUNT_PROVIDER",
+ "connection_id": "SECONDARY_ACCOUNT_CONNECTION_ID(OPTIONAL)",
+ "user_id": "SECONDARY_ACCOUNT_USER_ID"
+ }
+
+ In this case you need to send provider and user_id in the body. Optionally you can also send the connection_id param which is suitable for identifying a particular database connection for the 'auth0' provider.
+ client.users.identities.delete(...) -> AsyncHttpResponse[DeleteUserIdentityResponseContent]client.users.logs.list(...) -> AsyncPager[Log, UserListLogOffsetPaginatedResponseContent]client.users.multifactor.invalidate_remember_browser(...) -> AsyncHttpResponse[None]client.users.multifactor.delete_provider(...) -> AsyncHttpResponse[None]client.users.organizations.list(...) -> AsyncPager[Organization, ListUserOrganizationsOffsetPaginatedResponseContent]client.users.permissions.list(...) -> AsyncPager[
+ UserPermissionSchema, ListUserPermissionsOffsetPaginatedResponseContent
+]client.users.permissions.create(...) -> AsyncHttpResponse[None]client.users.permissions.delete(...) -> AsyncHttpResponse[None]client.users.risk_assessments.clear(...) -> AsyncHttpResponse[None]client.users.roles.list(...) -> AsyncPager[Role, ListUserRolesOffsetPaginatedResponseContent]client.users.roles.assign(...) -> AsyncHttpResponse[None]client.users.roles.delete(...) -> AsyncHttpResponse[None]client.users.refresh_token.list(...) -> AsyncPager[
+ RefreshTokenResponseContent, ListRefreshTokensPaginatedResponseContent
+]client.users.refresh_token.delete(...) -> AsyncHttpResponse[None]client.users.sessions.list(...) -> AsyncPager[SessionResponseContent, ListUserSessionsPaginatedResponseContent]client.users.sessions.delete(...) -> AsyncHttpResponse[None]client.verifiable_credentials.verification.templates.list(...) -> AsyncPager[
+ VerifiableCredentialTemplateResponse,
+ ListVerifiableCredentialTemplatesPaginatedResponseContent,
+]client.verifiable_credentials.verification.templates.create(...) -> AsyncHttpResponse[CreateVerifiableCredentialTemplateResponseContent]client.verifiable_credentials.verification.templates.get(...) -> AsyncHttpResponse[GetVerifiableCredentialTemplateResponseContent]client.verifiable_credentials.verification.templates.delete(...) -> AsyncHttpResponse[None]client.verifiable_credentials.verification.templates.update(...) -> AsyncHttpResponse[UpdateVerifiableCredentialTemplateResponseContent]block, user_notification, admin_notification.
+
+ admin_notification_frequency : typing.Optional[typing.Sequence[BreachedPasswordDetectionAdminNotificationFrequencyEnum]]
+ When "admin_notification" is enabled, determines how often email notifications are sent.
+ Possible values: immediately, daily, weekly, monthly.
+
+ method : typing.Optional[BreachedPasswordDetectionMethodEnum]
+
+ stage : typing.Optional[BreachedPasswordDetectionStage]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBreachedPasswordDetectionSettingsResponseContent
+ Breached password detection settings successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.attack_protection.breached_password_detection.update()
+ """
+ _response = self._raw_client.update(
+ enabled=enabled,
+ shields=shields,
+ admin_notification_frequency=admin_notification_frequency,
+ method=method,
+ stage=stage,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncBreachedPasswordDetectionClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawBreachedPasswordDetectionClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawBreachedPasswordDetectionClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawBreachedPasswordDetectionClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetBreachedPasswordDetectionSettingsResponseContent:
+ """
+ Retrieve details of the Breached Password Detection configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBreachedPasswordDetectionSettingsResponseContent
+ Breached password detection settings successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.attack_protection.breached_password_detection.get()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = True,
+ shields: typing.Optional[typing.Sequence[BreachedPasswordDetectionShieldsEnum]] = OMIT,
+ admin_notification_frequency: typing.Optional[
+ typing.Sequence[BreachedPasswordDetectionAdminNotificationFrequencyEnum]
+ ] = OMIT,
+ method: typing.Optional[BreachedPasswordDetectionMethodEnum] = OMIT,
+ stage: typing.Optional[BreachedPasswordDetectionStage] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateBreachedPasswordDetectionSettingsResponseContent:
+ """
+ Update details of the Breached Password Detection configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not breached password detection is active.
+
+ shields : typing.Optional[typing.Sequence[BreachedPasswordDetectionShieldsEnum]]
+ Action to take when a breached password is detected during a login.
+ Possible values: block, user_notification, admin_notification.
+
+ admin_notification_frequency : typing.Optional[typing.Sequence[BreachedPasswordDetectionAdminNotificationFrequencyEnum]]
+ When "admin_notification" is enabled, determines how often email notifications are sent.
+ Possible values: immediately, daily, weekly, monthly.
+
+ method : typing.Optional[BreachedPasswordDetectionMethodEnum]
+
+ stage : typing.Optional[BreachedPasswordDetectionStage]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBreachedPasswordDetectionSettingsResponseContent
+ Breached password detection settings successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.attack_protection.breached_password_detection.update()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ enabled=enabled,
+ shields=shields,
+ admin_notification_frequency=admin_notification_frequency,
+ method=method,
+ stage=stage,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/attack_protection/breached_password_detection/raw_client.py b/src/auth0/management/attack_protection/breached_password_detection/raw_client.py
new file mode 100644
index 00000000..2c13d773
--- /dev/null
+++ b/src/auth0/management/attack_protection/breached_password_detection/raw_client.py
@@ -0,0 +1,412 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.breached_password_detection_admin_notification_frequency_enum import (
+ BreachedPasswordDetectionAdminNotificationFrequencyEnum,
+)
+from ...types.breached_password_detection_method_enum import BreachedPasswordDetectionMethodEnum
+from ...types.breached_password_detection_shields_enum import BreachedPasswordDetectionShieldsEnum
+from ...types.breached_password_detection_stage import BreachedPasswordDetectionStage
+from ...types.get_breached_password_detection_settings_response_content import (
+ GetBreachedPasswordDetectionSettingsResponseContent,
+)
+from ...types.update_breached_password_detection_settings_response_content import (
+ UpdateBreachedPasswordDetectionSettingsResponseContent,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawBreachedPasswordDetectionClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetBreachedPasswordDetectionSettingsResponseContent]:
+ """
+ Retrieve details of the Breached Password Detection configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetBreachedPasswordDetectionSettingsResponseContent]
+ Breached password detection settings successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "attack-protection/breached-password-detection",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBreachedPasswordDetectionSettingsResponseContent,
+ parse_obj_as(
+ type_=GetBreachedPasswordDetectionSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = True,
+ shields: typing.Optional[typing.Sequence[BreachedPasswordDetectionShieldsEnum]] = OMIT,
+ admin_notification_frequency: typing.Optional[
+ typing.Sequence[BreachedPasswordDetectionAdminNotificationFrequencyEnum]
+ ] = OMIT,
+ method: typing.Optional[BreachedPasswordDetectionMethodEnum] = OMIT,
+ stage: typing.Optional[BreachedPasswordDetectionStage] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateBreachedPasswordDetectionSettingsResponseContent]:
+ """
+ Update details of the Breached Password Detection configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not breached password detection is active.
+
+ shields : typing.Optional[typing.Sequence[BreachedPasswordDetectionShieldsEnum]]
+ Action to take when a breached password is detected during a login.
+ Possible values: block, user_notification, admin_notification.
+
+ admin_notification_frequency : typing.Optional[typing.Sequence[BreachedPasswordDetectionAdminNotificationFrequencyEnum]]
+ When "admin_notification" is enabled, determines how often email notifications are sent.
+ Possible values: immediately, daily, weekly, monthly.
+
+ method : typing.Optional[BreachedPasswordDetectionMethodEnum]
+
+ stage : typing.Optional[BreachedPasswordDetectionStage]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateBreachedPasswordDetectionSettingsResponseContent]
+ Breached password detection settings successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "attack-protection/breached-password-detection",
+ method="PATCH",
+ json={
+ "enabled": enabled,
+ "shields": shields,
+ "admin_notification_frequency": admin_notification_frequency,
+ "method": method,
+ "stage": convert_and_respect_annotation_metadata(
+ object_=stage, annotation=BreachedPasswordDetectionStage, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBreachedPasswordDetectionSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateBreachedPasswordDetectionSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawBreachedPasswordDetectionClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetBreachedPasswordDetectionSettingsResponseContent]:
+ """
+ Retrieve details of the Breached Password Detection configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetBreachedPasswordDetectionSettingsResponseContent]
+ Breached password detection settings successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "attack-protection/breached-password-detection",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBreachedPasswordDetectionSettingsResponseContent,
+ parse_obj_as(
+ type_=GetBreachedPasswordDetectionSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = True,
+ shields: typing.Optional[typing.Sequence[BreachedPasswordDetectionShieldsEnum]] = OMIT,
+ admin_notification_frequency: typing.Optional[
+ typing.Sequence[BreachedPasswordDetectionAdminNotificationFrequencyEnum]
+ ] = OMIT,
+ method: typing.Optional[BreachedPasswordDetectionMethodEnum] = OMIT,
+ stage: typing.Optional[BreachedPasswordDetectionStage] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateBreachedPasswordDetectionSettingsResponseContent]:
+ """
+ Update details of the Breached Password Detection configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not breached password detection is active.
+
+ shields : typing.Optional[typing.Sequence[BreachedPasswordDetectionShieldsEnum]]
+ Action to take when a breached password is detected during a login.
+ Possible values: block, user_notification, admin_notification.
+
+ admin_notification_frequency : typing.Optional[typing.Sequence[BreachedPasswordDetectionAdminNotificationFrequencyEnum]]
+ When "admin_notification" is enabled, determines how often email notifications are sent.
+ Possible values: immediately, daily, weekly, monthly.
+
+ method : typing.Optional[BreachedPasswordDetectionMethodEnum]
+
+ stage : typing.Optional[BreachedPasswordDetectionStage]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateBreachedPasswordDetectionSettingsResponseContent]
+ Breached password detection settings successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "attack-protection/breached-password-detection",
+ method="PATCH",
+ json={
+ "enabled": enabled,
+ "shields": shields,
+ "admin_notification_frequency": admin_notification_frequency,
+ "method": method,
+ "stage": convert_and_respect_annotation_metadata(
+ object_=stage, annotation=BreachedPasswordDetectionStage, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBreachedPasswordDetectionSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateBreachedPasswordDetectionSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/attack_protection/brute_force_protection/__init__.py b/src/auth0/management/attack_protection/brute_force_protection/__init__.py
new file mode 100644
index 00000000..3cf54dd9
--- /dev/null
+++ b/src/auth0/management/attack_protection/brute_force_protection/__init__.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from .types import UpdateBruteForceSettingsRequestContentMode, UpdateBruteForceSettingsRequestContentShieldsItem
+_dynamic_imports: typing.Dict[str, str] = {
+ "UpdateBruteForceSettingsRequestContentMode": ".types",
+ "UpdateBruteForceSettingsRequestContentShieldsItem": ".types",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["UpdateBruteForceSettingsRequestContentMode", "UpdateBruteForceSettingsRequestContentShieldsItem"]
diff --git a/src/auth0/management/attack_protection/brute_force_protection/client.py b/src/auth0/management/attack_protection/brute_force_protection/client.py
new file mode 100644
index 00000000..a36afd49
--- /dev/null
+++ b/src/auth0/management/attack_protection/brute_force_protection/client.py
@@ -0,0 +1,236 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.get_brute_force_settings_response_content import GetBruteForceSettingsResponseContent
+from ...types.update_brute_force_settings_response_content import UpdateBruteForceSettingsResponseContent
+from .raw_client import AsyncRawBruteForceProtectionClient, RawBruteForceProtectionClient
+from .types.update_brute_force_settings_request_content_mode import UpdateBruteForceSettingsRequestContentMode
+from .types.update_brute_force_settings_request_content_shields_item import (
+ UpdateBruteForceSettingsRequestContentShieldsItem,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class BruteForceProtectionClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawBruteForceProtectionClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawBruteForceProtectionClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawBruteForceProtectionClient
+ """
+ return self._raw_client
+
+ def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> GetBruteForceSettingsResponseContent:
+ """
+ Retrieve details of the Brute-force Protection configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBruteForceSettingsResponseContent
+ Brute force configuration successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.attack_protection.brute_force_protection.get()
+ """
+ _response = self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = OMIT,
+ shields: typing.Optional[typing.Sequence[UpdateBruteForceSettingsRequestContentShieldsItem]] = OMIT,
+ allowlist: typing.Optional[typing.Sequence[str]] = OMIT,
+ mode: typing.Optional[UpdateBruteForceSettingsRequestContentMode] = OMIT,
+ max_attempts: typing.Optional[int] = 10,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateBruteForceSettingsResponseContent:
+ """
+ Update the Brute-force Protection configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not brute force attack protections are active.
+
+ shields : typing.Optional[typing.Sequence[UpdateBruteForceSettingsRequestContentShieldsItem]]
+ Action to take when a brute force protection threshold is violated.
+ Possible values: block, user_notification.
+
+ allowlist : typing.Optional[typing.Sequence[str]]
+ List of trusted IP addresses that will not have attack protection enforced against them.
+
+ mode : typing.Optional[UpdateBruteForceSettingsRequestContentMode]
+ Account Lockout: Determines whether or not IP address is used when counting failed attempts.
+ Possible values: count_per_identifier_and_ip, count_per_identifier.
+
+ max_attempts : typing.Optional[int]
+ Maximum number of unsuccessful attempts.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBruteForceSettingsResponseContent
+ Brute force configuration successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.attack_protection.brute_force_protection.update()
+ """
+ _response = self._raw_client.update(
+ enabled=enabled,
+ shields=shields,
+ allowlist=allowlist,
+ mode=mode,
+ max_attempts=max_attempts,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncBruteForceProtectionClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawBruteForceProtectionClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawBruteForceProtectionClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawBruteForceProtectionClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetBruteForceSettingsResponseContent:
+ """
+ Retrieve details of the Brute-force Protection configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBruteForceSettingsResponseContent
+ Brute force configuration successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.attack_protection.brute_force_protection.get()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = OMIT,
+ shields: typing.Optional[typing.Sequence[UpdateBruteForceSettingsRequestContentShieldsItem]] = OMIT,
+ allowlist: typing.Optional[typing.Sequence[str]] = OMIT,
+ mode: typing.Optional[UpdateBruteForceSettingsRequestContentMode] = OMIT,
+ max_attempts: typing.Optional[int] = 10,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateBruteForceSettingsResponseContent:
+ """
+ Update the Brute-force Protection configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not brute force attack protections are active.
+
+ shields : typing.Optional[typing.Sequence[UpdateBruteForceSettingsRequestContentShieldsItem]]
+ Action to take when a brute force protection threshold is violated.
+ Possible values: block, user_notification.
+
+ allowlist : typing.Optional[typing.Sequence[str]]
+ List of trusted IP addresses that will not have attack protection enforced against them.
+
+ mode : typing.Optional[UpdateBruteForceSettingsRequestContentMode]
+ Account Lockout: Determines whether or not IP address is used when counting failed attempts.
+ Possible values: count_per_identifier_and_ip, count_per_identifier.
+
+ max_attempts : typing.Optional[int]
+ Maximum number of unsuccessful attempts.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBruteForceSettingsResponseContent
+ Brute force configuration successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.attack_protection.brute_force_protection.update()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ enabled=enabled,
+ shields=shields,
+ allowlist=allowlist,
+ mode=mode,
+ max_attempts=max_attempts,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/attack_protection/brute_force_protection/raw_client.py b/src/auth0/management/attack_protection/brute_force_protection/raw_client.py
new file mode 100644
index 00000000..969ccb1e
--- /dev/null
+++ b/src/auth0/management/attack_protection/brute_force_protection/raw_client.py
@@ -0,0 +1,401 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.get_brute_force_settings_response_content import GetBruteForceSettingsResponseContent
+from ...types.update_brute_force_settings_response_content import UpdateBruteForceSettingsResponseContent
+from .types.update_brute_force_settings_request_content_mode import UpdateBruteForceSettingsRequestContentMode
+from .types.update_brute_force_settings_request_content_shields_item import (
+ UpdateBruteForceSettingsRequestContentShieldsItem,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawBruteForceProtectionClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetBruteForceSettingsResponseContent]:
+ """
+ Retrieve details of the Brute-force Protection configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetBruteForceSettingsResponseContent]
+ Brute force configuration successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "attack-protection/brute-force-protection",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBruteForceSettingsResponseContent,
+ parse_obj_as(
+ type_=GetBruteForceSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = OMIT,
+ shields: typing.Optional[typing.Sequence[UpdateBruteForceSettingsRequestContentShieldsItem]] = OMIT,
+ allowlist: typing.Optional[typing.Sequence[str]] = OMIT,
+ mode: typing.Optional[UpdateBruteForceSettingsRequestContentMode] = OMIT,
+ max_attempts: typing.Optional[int] = 10,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateBruteForceSettingsResponseContent]:
+ """
+ Update the Brute-force Protection configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not brute force attack protections are active.
+
+ shields : typing.Optional[typing.Sequence[UpdateBruteForceSettingsRequestContentShieldsItem]]
+ Action to take when a brute force protection threshold is violated.
+ Possible values: block, user_notification.
+
+ allowlist : typing.Optional[typing.Sequence[str]]
+ List of trusted IP addresses that will not have attack protection enforced against them.
+
+ mode : typing.Optional[UpdateBruteForceSettingsRequestContentMode]
+ Account Lockout: Determines whether or not IP address is used when counting failed attempts.
+ Possible values: count_per_identifier_and_ip, count_per_identifier.
+
+ max_attempts : typing.Optional[int]
+ Maximum number of unsuccessful attempts.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateBruteForceSettingsResponseContent]
+ Brute force configuration successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "attack-protection/brute-force-protection",
+ method="PATCH",
+ json={
+ "enabled": enabled,
+ "shields": shields,
+ "allowlist": allowlist,
+ "mode": mode,
+ "max_attempts": max_attempts,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBruteForceSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateBruteForceSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawBruteForceProtectionClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetBruteForceSettingsResponseContent]:
+ """
+ Retrieve details of the Brute-force Protection configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetBruteForceSettingsResponseContent]
+ Brute force configuration successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "attack-protection/brute-force-protection",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBruteForceSettingsResponseContent,
+ parse_obj_as(
+ type_=GetBruteForceSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = OMIT,
+ shields: typing.Optional[typing.Sequence[UpdateBruteForceSettingsRequestContentShieldsItem]] = OMIT,
+ allowlist: typing.Optional[typing.Sequence[str]] = OMIT,
+ mode: typing.Optional[UpdateBruteForceSettingsRequestContentMode] = OMIT,
+ max_attempts: typing.Optional[int] = 10,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateBruteForceSettingsResponseContent]:
+ """
+ Update the Brute-force Protection configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not brute force attack protections are active.
+
+ shields : typing.Optional[typing.Sequence[UpdateBruteForceSettingsRequestContentShieldsItem]]
+ Action to take when a brute force protection threshold is violated.
+ Possible values: block, user_notification.
+
+ allowlist : typing.Optional[typing.Sequence[str]]
+ List of trusted IP addresses that will not have attack protection enforced against them.
+
+ mode : typing.Optional[UpdateBruteForceSettingsRequestContentMode]
+ Account Lockout: Determines whether or not IP address is used when counting failed attempts.
+ Possible values: count_per_identifier_and_ip, count_per_identifier.
+
+ max_attempts : typing.Optional[int]
+ Maximum number of unsuccessful attempts.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateBruteForceSettingsResponseContent]
+ Brute force configuration successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "attack-protection/brute-force-protection",
+ method="PATCH",
+ json={
+ "enabled": enabled,
+ "shields": shields,
+ "allowlist": allowlist,
+ "mode": mode,
+ "max_attempts": max_attempts,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBruteForceSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateBruteForceSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/attack_protection/brute_force_protection/types/__init__.py b/src/auth0/management/attack_protection/brute_force_protection/types/__init__.py
new file mode 100644
index 00000000..372c55bd
--- /dev/null
+++ b/src/auth0/management/attack_protection/brute_force_protection/types/__init__.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from .update_brute_force_settings_request_content_mode import UpdateBruteForceSettingsRequestContentMode
+ from .update_brute_force_settings_request_content_shields_item import (
+ UpdateBruteForceSettingsRequestContentShieldsItem,
+ )
+_dynamic_imports: typing.Dict[str, str] = {
+ "UpdateBruteForceSettingsRequestContentMode": ".update_brute_force_settings_request_content_mode",
+ "UpdateBruteForceSettingsRequestContentShieldsItem": ".update_brute_force_settings_request_content_shields_item",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["UpdateBruteForceSettingsRequestContentMode", "UpdateBruteForceSettingsRequestContentShieldsItem"]
diff --git a/src/auth0/management/attack_protection/brute_force_protection/types/update_brute_force_settings_request_content_mode.py b/src/auth0/management/attack_protection/brute_force_protection/types/update_brute_force_settings_request_content_mode.py
new file mode 100644
index 00000000..c24b5cff
--- /dev/null
+++ b/src/auth0/management/attack_protection/brute_force_protection/types/update_brute_force_settings_request_content_mode.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UpdateBruteForceSettingsRequestContentMode = typing.Union[
+ typing.Literal["count_per_identifier_and_ip", "count_per_identifier"], typing.Any
+]
diff --git a/src/auth0/management/attack_protection/brute_force_protection/types/update_brute_force_settings_request_content_shields_item.py b/src/auth0/management/attack_protection/brute_force_protection/types/update_brute_force_settings_request_content_shields_item.py
new file mode 100644
index 00000000..d8f46b96
--- /dev/null
+++ b/src/auth0/management/attack_protection/brute_force_protection/types/update_brute_force_settings_request_content_shields_item.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UpdateBruteForceSettingsRequestContentShieldsItem = typing.Union[
+ typing.Literal["block", "user_notification"], typing.Any
+]
diff --git a/src/auth0/management/attack_protection/captcha/__init__.py b/src/auth0/management/attack_protection/captcha/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/attack_protection/captcha/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/attack_protection/captcha/client.py b/src/auth0/management/attack_protection/captcha/client.py
new file mode 100644
index 00000000..1080994b
--- /dev/null
+++ b/src/auth0/management/attack_protection/captcha/client.py
@@ -0,0 +1,256 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.attack_protection_captcha_auth_challenge_request import AttackProtectionCaptchaAuthChallengeRequest
+from ...types.attack_protection_captcha_provider_id import AttackProtectionCaptchaProviderId
+from ...types.attack_protection_captcha_simple_captcha_response_content import (
+ AttackProtectionCaptchaSimpleCaptchaResponseContent,
+)
+from ...types.attack_protection_update_captcha_arkose import AttackProtectionUpdateCaptchaArkose
+from ...types.attack_protection_update_captcha_friendly_captcha import AttackProtectionUpdateCaptchaFriendlyCaptcha
+from ...types.attack_protection_update_captcha_hcaptcha import AttackProtectionUpdateCaptchaHcaptcha
+from ...types.attack_protection_update_captcha_recaptcha_enterprise import (
+ AttackProtectionUpdateCaptchaRecaptchaEnterprise,
+)
+from ...types.attack_protection_update_captcha_recaptcha_v_2 import AttackProtectionUpdateCaptchaRecaptchaV2
+from ...types.get_attack_protection_captcha_response_content import GetAttackProtectionCaptchaResponseContent
+from ...types.update_attack_protection_captcha_response_content import UpdateAttackProtectionCaptchaResponseContent
+from .raw_client import AsyncRawCaptchaClient, RawCaptchaClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class CaptchaClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawCaptchaClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawCaptchaClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawCaptchaClient
+ """
+ return self._raw_client
+
+ def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetAttackProtectionCaptchaResponseContent:
+ """
+ Get the CAPTCHA configuration for your client.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetAttackProtectionCaptchaResponseContent
+ Captcha configuration successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.attack_protection.captcha.get()
+ """
+ _response = self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ *,
+ active_provider_id: typing.Optional[AttackProtectionCaptchaProviderId] = OMIT,
+ arkose: typing.Optional[AttackProtectionUpdateCaptchaArkose] = OMIT,
+ auth_challenge: typing.Optional[AttackProtectionCaptchaAuthChallengeRequest] = OMIT,
+ hcaptcha: typing.Optional[AttackProtectionUpdateCaptchaHcaptcha] = OMIT,
+ friendly_captcha: typing.Optional[AttackProtectionUpdateCaptchaFriendlyCaptcha] = OMIT,
+ recaptcha_enterprise: typing.Optional[AttackProtectionUpdateCaptchaRecaptchaEnterprise] = OMIT,
+ recaptcha_v_2: typing.Optional[AttackProtectionUpdateCaptchaRecaptchaV2] = OMIT,
+ simple_captcha: typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateAttackProtectionCaptchaResponseContent:
+ """
+ Update existing CAPTCHA configuration for your client.
+
+ Parameters
+ ----------
+ active_provider_id : typing.Optional[AttackProtectionCaptchaProviderId]
+
+ arkose : typing.Optional[AttackProtectionUpdateCaptchaArkose]
+
+ auth_challenge : typing.Optional[AttackProtectionCaptchaAuthChallengeRequest]
+
+ hcaptcha : typing.Optional[AttackProtectionUpdateCaptchaHcaptcha]
+
+ friendly_captcha : typing.Optional[AttackProtectionUpdateCaptchaFriendlyCaptcha]
+
+ recaptcha_enterprise : typing.Optional[AttackProtectionUpdateCaptchaRecaptchaEnterprise]
+
+ recaptcha_v_2 : typing.Optional[AttackProtectionUpdateCaptchaRecaptchaV2]
+
+ simple_captcha : typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateAttackProtectionCaptchaResponseContent
+ Captcha configuration successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.attack_protection.captcha.update()
+ """
+ _response = self._raw_client.update(
+ active_provider_id=active_provider_id,
+ arkose=arkose,
+ auth_challenge=auth_challenge,
+ hcaptcha=hcaptcha,
+ friendly_captcha=friendly_captcha,
+ recaptcha_enterprise=recaptcha_enterprise,
+ recaptcha_v_2=recaptcha_v_2,
+ simple_captcha=simple_captcha,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncCaptchaClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawCaptchaClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawCaptchaClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawCaptchaClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetAttackProtectionCaptchaResponseContent:
+ """
+ Get the CAPTCHA configuration for your client.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetAttackProtectionCaptchaResponseContent
+ Captcha configuration successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.attack_protection.captcha.get()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ *,
+ active_provider_id: typing.Optional[AttackProtectionCaptchaProviderId] = OMIT,
+ arkose: typing.Optional[AttackProtectionUpdateCaptchaArkose] = OMIT,
+ auth_challenge: typing.Optional[AttackProtectionCaptchaAuthChallengeRequest] = OMIT,
+ hcaptcha: typing.Optional[AttackProtectionUpdateCaptchaHcaptcha] = OMIT,
+ friendly_captcha: typing.Optional[AttackProtectionUpdateCaptchaFriendlyCaptcha] = OMIT,
+ recaptcha_enterprise: typing.Optional[AttackProtectionUpdateCaptchaRecaptchaEnterprise] = OMIT,
+ recaptcha_v_2: typing.Optional[AttackProtectionUpdateCaptchaRecaptchaV2] = OMIT,
+ simple_captcha: typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateAttackProtectionCaptchaResponseContent:
+ """
+ Update existing CAPTCHA configuration for your client.
+
+ Parameters
+ ----------
+ active_provider_id : typing.Optional[AttackProtectionCaptchaProviderId]
+
+ arkose : typing.Optional[AttackProtectionUpdateCaptchaArkose]
+
+ auth_challenge : typing.Optional[AttackProtectionCaptchaAuthChallengeRequest]
+
+ hcaptcha : typing.Optional[AttackProtectionUpdateCaptchaHcaptcha]
+
+ friendly_captcha : typing.Optional[AttackProtectionUpdateCaptchaFriendlyCaptcha]
+
+ recaptcha_enterprise : typing.Optional[AttackProtectionUpdateCaptchaRecaptchaEnterprise]
+
+ recaptcha_v_2 : typing.Optional[AttackProtectionUpdateCaptchaRecaptchaV2]
+
+ simple_captcha : typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateAttackProtectionCaptchaResponseContent
+ Captcha configuration successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.attack_protection.captcha.update()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ active_provider_id=active_provider_id,
+ arkose=arkose,
+ auth_challenge=auth_challenge,
+ hcaptcha=hcaptcha,
+ friendly_captcha=friendly_captcha,
+ recaptcha_enterprise=recaptcha_enterprise,
+ recaptcha_v_2=recaptcha_v_2,
+ simple_captcha=simple_captcha,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/attack_protection/captcha/raw_client.py b/src/auth0/management/attack_protection/captcha/raw_client.py
new file mode 100644
index 00000000..a3b90078
--- /dev/null
+++ b/src/auth0/management/attack_protection/captcha/raw_client.py
@@ -0,0 +1,470 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.attack_protection_captcha_auth_challenge_request import AttackProtectionCaptchaAuthChallengeRequest
+from ...types.attack_protection_captcha_provider_id import AttackProtectionCaptchaProviderId
+from ...types.attack_protection_captcha_simple_captcha_response_content import (
+ AttackProtectionCaptchaSimpleCaptchaResponseContent,
+)
+from ...types.attack_protection_update_captcha_arkose import AttackProtectionUpdateCaptchaArkose
+from ...types.attack_protection_update_captcha_friendly_captcha import AttackProtectionUpdateCaptchaFriendlyCaptcha
+from ...types.attack_protection_update_captcha_hcaptcha import AttackProtectionUpdateCaptchaHcaptcha
+from ...types.attack_protection_update_captcha_recaptcha_enterprise import (
+ AttackProtectionUpdateCaptchaRecaptchaEnterprise,
+)
+from ...types.attack_protection_update_captcha_recaptcha_v_2 import AttackProtectionUpdateCaptchaRecaptchaV2
+from ...types.get_attack_protection_captcha_response_content import GetAttackProtectionCaptchaResponseContent
+from ...types.update_attack_protection_captcha_response_content import UpdateAttackProtectionCaptchaResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawCaptchaClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetAttackProtectionCaptchaResponseContent]:
+ """
+ Get the CAPTCHA configuration for your client.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetAttackProtectionCaptchaResponseContent]
+ Captcha configuration successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "attack-protection/captcha",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetAttackProtectionCaptchaResponseContent,
+ parse_obj_as(
+ type_=GetAttackProtectionCaptchaResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ *,
+ active_provider_id: typing.Optional[AttackProtectionCaptchaProviderId] = OMIT,
+ arkose: typing.Optional[AttackProtectionUpdateCaptchaArkose] = OMIT,
+ auth_challenge: typing.Optional[AttackProtectionCaptchaAuthChallengeRequest] = OMIT,
+ hcaptcha: typing.Optional[AttackProtectionUpdateCaptchaHcaptcha] = OMIT,
+ friendly_captcha: typing.Optional[AttackProtectionUpdateCaptchaFriendlyCaptcha] = OMIT,
+ recaptcha_enterprise: typing.Optional[AttackProtectionUpdateCaptchaRecaptchaEnterprise] = OMIT,
+ recaptcha_v_2: typing.Optional[AttackProtectionUpdateCaptchaRecaptchaV2] = OMIT,
+ simple_captcha: typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateAttackProtectionCaptchaResponseContent]:
+ """
+ Update existing CAPTCHA configuration for your client.
+
+ Parameters
+ ----------
+ active_provider_id : typing.Optional[AttackProtectionCaptchaProviderId]
+
+ arkose : typing.Optional[AttackProtectionUpdateCaptchaArkose]
+
+ auth_challenge : typing.Optional[AttackProtectionCaptchaAuthChallengeRequest]
+
+ hcaptcha : typing.Optional[AttackProtectionUpdateCaptchaHcaptcha]
+
+ friendly_captcha : typing.Optional[AttackProtectionUpdateCaptchaFriendlyCaptcha]
+
+ recaptcha_enterprise : typing.Optional[AttackProtectionUpdateCaptchaRecaptchaEnterprise]
+
+ recaptcha_v_2 : typing.Optional[AttackProtectionUpdateCaptchaRecaptchaV2]
+
+ simple_captcha : typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateAttackProtectionCaptchaResponseContent]
+ Captcha configuration successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "attack-protection/captcha",
+ method="PATCH",
+ json={
+ "active_provider_id": active_provider_id,
+ "arkose": convert_and_respect_annotation_metadata(
+ object_=arkose, annotation=AttackProtectionUpdateCaptchaArkose, direction="write"
+ ),
+ "auth_challenge": convert_and_respect_annotation_metadata(
+ object_=auth_challenge, annotation=AttackProtectionCaptchaAuthChallengeRequest, direction="write"
+ ),
+ "hcaptcha": convert_and_respect_annotation_metadata(
+ object_=hcaptcha, annotation=AttackProtectionUpdateCaptchaHcaptcha, direction="write"
+ ),
+ "friendly_captcha": convert_and_respect_annotation_metadata(
+ object_=friendly_captcha, annotation=AttackProtectionUpdateCaptchaFriendlyCaptcha, direction="write"
+ ),
+ "recaptcha_enterprise": convert_and_respect_annotation_metadata(
+ object_=recaptcha_enterprise,
+ annotation=AttackProtectionUpdateCaptchaRecaptchaEnterprise,
+ direction="write",
+ ),
+ "recaptcha_v2": convert_and_respect_annotation_metadata(
+ object_=recaptcha_v_2, annotation=AttackProtectionUpdateCaptchaRecaptchaV2, direction="write"
+ ),
+ "simple_captcha": simple_captcha,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateAttackProtectionCaptchaResponseContent,
+ parse_obj_as(
+ type_=UpdateAttackProtectionCaptchaResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawCaptchaClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetAttackProtectionCaptchaResponseContent]:
+ """
+ Get the CAPTCHA configuration for your client.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetAttackProtectionCaptchaResponseContent]
+ Captcha configuration successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "attack-protection/captcha",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetAttackProtectionCaptchaResponseContent,
+ parse_obj_as(
+ type_=GetAttackProtectionCaptchaResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ *,
+ active_provider_id: typing.Optional[AttackProtectionCaptchaProviderId] = OMIT,
+ arkose: typing.Optional[AttackProtectionUpdateCaptchaArkose] = OMIT,
+ auth_challenge: typing.Optional[AttackProtectionCaptchaAuthChallengeRequest] = OMIT,
+ hcaptcha: typing.Optional[AttackProtectionUpdateCaptchaHcaptcha] = OMIT,
+ friendly_captcha: typing.Optional[AttackProtectionUpdateCaptchaFriendlyCaptcha] = OMIT,
+ recaptcha_enterprise: typing.Optional[AttackProtectionUpdateCaptchaRecaptchaEnterprise] = OMIT,
+ recaptcha_v_2: typing.Optional[AttackProtectionUpdateCaptchaRecaptchaV2] = OMIT,
+ simple_captcha: typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateAttackProtectionCaptchaResponseContent]:
+ """
+ Update existing CAPTCHA configuration for your client.
+
+ Parameters
+ ----------
+ active_provider_id : typing.Optional[AttackProtectionCaptchaProviderId]
+
+ arkose : typing.Optional[AttackProtectionUpdateCaptchaArkose]
+
+ auth_challenge : typing.Optional[AttackProtectionCaptchaAuthChallengeRequest]
+
+ hcaptcha : typing.Optional[AttackProtectionUpdateCaptchaHcaptcha]
+
+ friendly_captcha : typing.Optional[AttackProtectionUpdateCaptchaFriendlyCaptcha]
+
+ recaptcha_enterprise : typing.Optional[AttackProtectionUpdateCaptchaRecaptchaEnterprise]
+
+ recaptcha_v_2 : typing.Optional[AttackProtectionUpdateCaptchaRecaptchaV2]
+
+ simple_captcha : typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateAttackProtectionCaptchaResponseContent]
+ Captcha configuration successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "attack-protection/captcha",
+ method="PATCH",
+ json={
+ "active_provider_id": active_provider_id,
+ "arkose": convert_and_respect_annotation_metadata(
+ object_=arkose, annotation=AttackProtectionUpdateCaptchaArkose, direction="write"
+ ),
+ "auth_challenge": convert_and_respect_annotation_metadata(
+ object_=auth_challenge, annotation=AttackProtectionCaptchaAuthChallengeRequest, direction="write"
+ ),
+ "hcaptcha": convert_and_respect_annotation_metadata(
+ object_=hcaptcha, annotation=AttackProtectionUpdateCaptchaHcaptcha, direction="write"
+ ),
+ "friendly_captcha": convert_and_respect_annotation_metadata(
+ object_=friendly_captcha, annotation=AttackProtectionUpdateCaptchaFriendlyCaptcha, direction="write"
+ ),
+ "recaptcha_enterprise": convert_and_respect_annotation_metadata(
+ object_=recaptcha_enterprise,
+ annotation=AttackProtectionUpdateCaptchaRecaptchaEnterprise,
+ direction="write",
+ ),
+ "recaptcha_v2": convert_and_respect_annotation_metadata(
+ object_=recaptcha_v_2, annotation=AttackProtectionUpdateCaptchaRecaptchaV2, direction="write"
+ ),
+ "simple_captcha": simple_captcha,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateAttackProtectionCaptchaResponseContent,
+ parse_obj_as(
+ type_=UpdateAttackProtectionCaptchaResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/attack_protection/client.py b/src/auth0/management/attack_protection/client.py
new file mode 100644
index 00000000..030e1cab
--- /dev/null
+++ b/src/auth0/management/attack_protection/client.py
@@ -0,0 +1,144 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .raw_client import AsyncRawAttackProtectionClient, RawAttackProtectionClient
+
+if typing.TYPE_CHECKING:
+ from .bot_detection.client import AsyncBotDetectionClient, BotDetectionClient
+ from .breached_password_detection.client import (
+ AsyncBreachedPasswordDetectionClient,
+ BreachedPasswordDetectionClient,
+ )
+ from .brute_force_protection.client import AsyncBruteForceProtectionClient, BruteForceProtectionClient
+ from .captcha.client import AsyncCaptchaClient, CaptchaClient
+ from .suspicious_ip_throttling.client import AsyncSuspiciousIpThrottlingClient, SuspiciousIpThrottlingClient
+
+
+class AttackProtectionClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawAttackProtectionClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._bot_detection: typing.Optional[BotDetectionClient] = None
+ self._breached_password_detection: typing.Optional[BreachedPasswordDetectionClient] = None
+ self._brute_force_protection: typing.Optional[BruteForceProtectionClient] = None
+ self._captcha: typing.Optional[CaptchaClient] = None
+ self._suspicious_ip_throttling: typing.Optional[SuspiciousIpThrottlingClient] = None
+
+ @property
+ def with_raw_response(self) -> RawAttackProtectionClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawAttackProtectionClient
+ """
+ return self._raw_client
+
+ @property
+ def bot_detection(self):
+ if self._bot_detection is None:
+ from .bot_detection.client import BotDetectionClient # noqa: E402
+
+ self._bot_detection = BotDetectionClient(client_wrapper=self._client_wrapper)
+ return self._bot_detection
+
+ @property
+ def breached_password_detection(self):
+ if self._breached_password_detection is None:
+ from .breached_password_detection.client import BreachedPasswordDetectionClient # noqa: E402
+
+ self._breached_password_detection = BreachedPasswordDetectionClient(client_wrapper=self._client_wrapper)
+ return self._breached_password_detection
+
+ @property
+ def brute_force_protection(self):
+ if self._brute_force_protection is None:
+ from .brute_force_protection.client import BruteForceProtectionClient # noqa: E402
+
+ self._brute_force_protection = BruteForceProtectionClient(client_wrapper=self._client_wrapper)
+ return self._brute_force_protection
+
+ @property
+ def captcha(self):
+ if self._captcha is None:
+ from .captcha.client import CaptchaClient # noqa: E402
+
+ self._captcha = CaptchaClient(client_wrapper=self._client_wrapper)
+ return self._captcha
+
+ @property
+ def suspicious_ip_throttling(self):
+ if self._suspicious_ip_throttling is None:
+ from .suspicious_ip_throttling.client import SuspiciousIpThrottlingClient # noqa: E402
+
+ self._suspicious_ip_throttling = SuspiciousIpThrottlingClient(client_wrapper=self._client_wrapper)
+ return self._suspicious_ip_throttling
+
+
+class AsyncAttackProtectionClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawAttackProtectionClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._bot_detection: typing.Optional[AsyncBotDetectionClient] = None
+ self._breached_password_detection: typing.Optional[AsyncBreachedPasswordDetectionClient] = None
+ self._brute_force_protection: typing.Optional[AsyncBruteForceProtectionClient] = None
+ self._captcha: typing.Optional[AsyncCaptchaClient] = None
+ self._suspicious_ip_throttling: typing.Optional[AsyncSuspiciousIpThrottlingClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawAttackProtectionClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawAttackProtectionClient
+ """
+ return self._raw_client
+
+ @property
+ def bot_detection(self):
+ if self._bot_detection is None:
+ from .bot_detection.client import AsyncBotDetectionClient # noqa: E402
+
+ self._bot_detection = AsyncBotDetectionClient(client_wrapper=self._client_wrapper)
+ return self._bot_detection
+
+ @property
+ def breached_password_detection(self):
+ if self._breached_password_detection is None:
+ from .breached_password_detection.client import AsyncBreachedPasswordDetectionClient # noqa: E402
+
+ self._breached_password_detection = AsyncBreachedPasswordDetectionClient(
+ client_wrapper=self._client_wrapper
+ )
+ return self._breached_password_detection
+
+ @property
+ def brute_force_protection(self):
+ if self._brute_force_protection is None:
+ from .brute_force_protection.client import AsyncBruteForceProtectionClient # noqa: E402
+
+ self._brute_force_protection = AsyncBruteForceProtectionClient(client_wrapper=self._client_wrapper)
+ return self._brute_force_protection
+
+ @property
+ def captcha(self):
+ if self._captcha is None:
+ from .captcha.client import AsyncCaptchaClient # noqa: E402
+
+ self._captcha = AsyncCaptchaClient(client_wrapper=self._client_wrapper)
+ return self._captcha
+
+ @property
+ def suspicious_ip_throttling(self):
+ if self._suspicious_ip_throttling is None:
+ from .suspicious_ip_throttling.client import AsyncSuspiciousIpThrottlingClient # noqa: E402
+
+ self._suspicious_ip_throttling = AsyncSuspiciousIpThrottlingClient(client_wrapper=self._client_wrapper)
+ return self._suspicious_ip_throttling
diff --git a/src/auth0/management/attack_protection/raw_client.py b/src/auth0/management/attack_protection/raw_client.py
new file mode 100644
index 00000000..e354a62f
--- /dev/null
+++ b/src/auth0/management/attack_protection/raw_client.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+
+
+class RawAttackProtectionClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+
+class AsyncRawAttackProtectionClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
diff --git a/src/auth0/management/attack_protection/suspicious_ip_throttling/__init__.py b/src/auth0/management/attack_protection/suspicious_ip_throttling/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/attack_protection/suspicious_ip_throttling/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/attack_protection/suspicious_ip_throttling/client.py b/src/auth0/management/attack_protection/suspicious_ip_throttling/client.py
new file mode 100644
index 00000000..54583e68
--- /dev/null
+++ b/src/auth0/management/attack_protection/suspicious_ip_throttling/client.py
@@ -0,0 +1,217 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.get_suspicious_ip_throttling_settings_response_content import (
+ GetSuspiciousIpThrottlingSettingsResponseContent,
+)
+from ...types.suspicious_ip_throttling_allowlist import SuspiciousIpThrottlingAllowlist
+from ...types.suspicious_ip_throttling_shields_enum import SuspiciousIpThrottlingShieldsEnum
+from ...types.suspicious_ip_throttling_stage import SuspiciousIpThrottlingStage
+from ...types.update_suspicious_ip_throttling_settings_response_content import (
+ UpdateSuspiciousIpThrottlingSettingsResponseContent,
+)
+from .raw_client import AsyncRawSuspiciousIpThrottlingClient, RawSuspiciousIpThrottlingClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class SuspiciousIpThrottlingClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSuspiciousIpThrottlingClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawSuspiciousIpThrottlingClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSuspiciousIpThrottlingClient
+ """
+ return self._raw_client
+
+ def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetSuspiciousIpThrottlingSettingsResponseContent:
+ """
+ Retrieve details of the Suspicious IP Throttling configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSuspiciousIpThrottlingSettingsResponseContent
+ Suspicious IP throttling configuration successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.attack_protection.suspicious_ip_throttling.get()
+ """
+ _response = self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = OMIT,
+ shields: typing.Optional[typing.Sequence[SuspiciousIpThrottlingShieldsEnum]] = OMIT,
+ allowlist: typing.Optional[SuspiciousIpThrottlingAllowlist] = OMIT,
+ stage: typing.Optional[SuspiciousIpThrottlingStage] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateSuspiciousIpThrottlingSettingsResponseContent:
+ """
+ Update the details of the Suspicious IP Throttling configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not suspicious IP throttling attack protections are active.
+
+ shields : typing.Optional[typing.Sequence[SuspiciousIpThrottlingShieldsEnum]]
+ Action to take when a suspicious IP throttling threshold is violated.
+ Possible values: block, admin_notification.
+
+ allowlist : typing.Optional[SuspiciousIpThrottlingAllowlist]
+
+ stage : typing.Optional[SuspiciousIpThrottlingStage]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateSuspiciousIpThrottlingSettingsResponseContent
+ Suspicious IP throttling configuration successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.attack_protection.suspicious_ip_throttling.update()
+ """
+ _response = self._raw_client.update(
+ enabled=enabled, shields=shields, allowlist=allowlist, stage=stage, request_options=request_options
+ )
+ return _response.data
+
+
+class AsyncSuspiciousIpThrottlingClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSuspiciousIpThrottlingClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawSuspiciousIpThrottlingClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSuspiciousIpThrottlingClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetSuspiciousIpThrottlingSettingsResponseContent:
+ """
+ Retrieve details of the Suspicious IP Throttling configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSuspiciousIpThrottlingSettingsResponseContent
+ Suspicious IP throttling configuration successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.attack_protection.suspicious_ip_throttling.get()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = OMIT,
+ shields: typing.Optional[typing.Sequence[SuspiciousIpThrottlingShieldsEnum]] = OMIT,
+ allowlist: typing.Optional[SuspiciousIpThrottlingAllowlist] = OMIT,
+ stage: typing.Optional[SuspiciousIpThrottlingStage] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateSuspiciousIpThrottlingSettingsResponseContent:
+ """
+ Update the details of the Suspicious IP Throttling configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not suspicious IP throttling attack protections are active.
+
+ shields : typing.Optional[typing.Sequence[SuspiciousIpThrottlingShieldsEnum]]
+ Action to take when a suspicious IP throttling threshold is violated.
+ Possible values: block, admin_notification.
+
+ allowlist : typing.Optional[SuspiciousIpThrottlingAllowlist]
+
+ stage : typing.Optional[SuspiciousIpThrottlingStage]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateSuspiciousIpThrottlingSettingsResponseContent
+ Suspicious IP throttling configuration successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.attack_protection.suspicious_ip_throttling.update()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ enabled=enabled, shields=shields, allowlist=allowlist, stage=stage, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/attack_protection/suspicious_ip_throttling/raw_client.py b/src/auth0/management/attack_protection/suspicious_ip_throttling/raw_client.py
new file mode 100644
index 00000000..8c08ced3
--- /dev/null
+++ b/src/auth0/management/attack_protection/suspicious_ip_throttling/raw_client.py
@@ -0,0 +1,393 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.get_suspicious_ip_throttling_settings_response_content import (
+ GetSuspiciousIpThrottlingSettingsResponseContent,
+)
+from ...types.suspicious_ip_throttling_allowlist import SuspiciousIpThrottlingAllowlist
+from ...types.suspicious_ip_throttling_shields_enum import SuspiciousIpThrottlingShieldsEnum
+from ...types.suspicious_ip_throttling_stage import SuspiciousIpThrottlingStage
+from ...types.update_suspicious_ip_throttling_settings_response_content import (
+ UpdateSuspiciousIpThrottlingSettingsResponseContent,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawSuspiciousIpThrottlingClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetSuspiciousIpThrottlingSettingsResponseContent]:
+ """
+ Retrieve details of the Suspicious IP Throttling configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetSuspiciousIpThrottlingSettingsResponseContent]
+ Suspicious IP throttling configuration successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "attack-protection/suspicious-ip-throttling",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSuspiciousIpThrottlingSettingsResponseContent,
+ parse_obj_as(
+ type_=GetSuspiciousIpThrottlingSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = OMIT,
+ shields: typing.Optional[typing.Sequence[SuspiciousIpThrottlingShieldsEnum]] = OMIT,
+ allowlist: typing.Optional[SuspiciousIpThrottlingAllowlist] = OMIT,
+ stage: typing.Optional[SuspiciousIpThrottlingStage] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateSuspiciousIpThrottlingSettingsResponseContent]:
+ """
+ Update the details of the Suspicious IP Throttling configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not suspicious IP throttling attack protections are active.
+
+ shields : typing.Optional[typing.Sequence[SuspiciousIpThrottlingShieldsEnum]]
+ Action to take when a suspicious IP throttling threshold is violated.
+ Possible values: block, admin_notification.
+
+ allowlist : typing.Optional[SuspiciousIpThrottlingAllowlist]
+
+ stage : typing.Optional[SuspiciousIpThrottlingStage]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateSuspiciousIpThrottlingSettingsResponseContent]
+ Suspicious IP throttling configuration successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "attack-protection/suspicious-ip-throttling",
+ method="PATCH",
+ json={
+ "enabled": enabled,
+ "shields": shields,
+ "allowlist": allowlist,
+ "stage": convert_and_respect_annotation_metadata(
+ object_=stage, annotation=SuspiciousIpThrottlingStage, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateSuspiciousIpThrottlingSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateSuspiciousIpThrottlingSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSuspiciousIpThrottlingClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetSuspiciousIpThrottlingSettingsResponseContent]:
+ """
+ Retrieve details of the Suspicious IP Throttling configuration of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetSuspiciousIpThrottlingSettingsResponseContent]
+ Suspicious IP throttling configuration successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "attack-protection/suspicious-ip-throttling",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSuspiciousIpThrottlingSettingsResponseContent,
+ parse_obj_as(
+ type_=GetSuspiciousIpThrottlingSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ *,
+ enabled: typing.Optional[bool] = OMIT,
+ shields: typing.Optional[typing.Sequence[SuspiciousIpThrottlingShieldsEnum]] = OMIT,
+ allowlist: typing.Optional[SuspiciousIpThrottlingAllowlist] = OMIT,
+ stage: typing.Optional[SuspiciousIpThrottlingStage] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateSuspiciousIpThrottlingSettingsResponseContent]:
+ """
+ Update the details of the Suspicious IP Throttling configuration of your tenant.
+
+ Parameters
+ ----------
+ enabled : typing.Optional[bool]
+ Whether or not suspicious IP throttling attack protections are active.
+
+ shields : typing.Optional[typing.Sequence[SuspiciousIpThrottlingShieldsEnum]]
+ Action to take when a suspicious IP throttling threshold is violated.
+ Possible values: block, admin_notification.
+
+ allowlist : typing.Optional[SuspiciousIpThrottlingAllowlist]
+
+ stage : typing.Optional[SuspiciousIpThrottlingStage]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateSuspiciousIpThrottlingSettingsResponseContent]
+ Suspicious IP throttling configuration successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "attack-protection/suspicious-ip-throttling",
+ method="PATCH",
+ json={
+ "enabled": enabled,
+ "shields": shields,
+ "allowlist": allowlist,
+ "stage": convert_and_respect_annotation_metadata(
+ object_=stage, annotation=SuspiciousIpThrottlingStage, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateSuspiciousIpThrottlingSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateSuspiciousIpThrottlingSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/branding/__init__.py b/src/auth0/management/branding/__init__.py
new file mode 100644
index 00000000..b0ebd90b
--- /dev/null
+++ b/src/auth0/management/branding/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import phone, templates, themes
+_dynamic_imports: typing.Dict[str, str] = {"phone": ".phone", "templates": ".templates", "themes": ".themes"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["phone", "templates", "themes"]
diff --git a/src/auth0/management/branding/client.py b/src/auth0/management/branding/client.py
new file mode 100644
index 00000000..e1f5fd04
--- /dev/null
+++ b/src/auth0/management/branding/client.py
@@ -0,0 +1,268 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.get_branding_response_content import GetBrandingResponseContent
+from ..types.update_branding_colors import UpdateBrandingColors
+from ..types.update_branding_font import UpdateBrandingFont
+from ..types.update_branding_response_content import UpdateBrandingResponseContent
+from .raw_client import AsyncRawBrandingClient, RawBrandingClient
+
+if typing.TYPE_CHECKING:
+ from .phone.client import AsyncPhoneClient, PhoneClient
+ from .templates.client import AsyncTemplatesClient, TemplatesClient
+ from .themes.client import AsyncThemesClient, ThemesClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class BrandingClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawBrandingClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._templates: typing.Optional[TemplatesClient] = None
+ self._themes: typing.Optional[ThemesClient] = None
+ self._phone: typing.Optional[PhoneClient] = None
+
+ @property
+ def with_raw_response(self) -> RawBrandingClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawBrandingClient
+ """
+ return self._raw_client
+
+ def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> GetBrandingResponseContent:
+ """
+ Retrieve branding settings.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBrandingResponseContent
+ Branding settings successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.get()
+ """
+ _response = self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ *,
+ colors: typing.Optional[UpdateBrandingColors] = OMIT,
+ favicon_url: typing.Optional[str] = OMIT,
+ logo_url: typing.Optional[str] = OMIT,
+ font: typing.Optional[UpdateBrandingFont] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateBrandingResponseContent:
+ """
+ Update branding settings.
+
+ Parameters
+ ----------
+ colors : typing.Optional[UpdateBrandingColors]
+
+ favicon_url : typing.Optional[str]
+ URL for the favicon. Must use HTTPS.
+
+ logo_url : typing.Optional[str]
+ URL for the logo. Must use HTTPS.
+
+ font : typing.Optional[UpdateBrandingFont]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBrandingResponseContent
+ Branding settings successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.update()
+ """
+ _response = self._raw_client.update(
+ colors=colors, favicon_url=favicon_url, logo_url=logo_url, font=font, request_options=request_options
+ )
+ return _response.data
+
+ @property
+ def templates(self):
+ if self._templates is None:
+ from .templates.client import TemplatesClient # noqa: E402
+
+ self._templates = TemplatesClient(client_wrapper=self._client_wrapper)
+ return self._templates
+
+ @property
+ def themes(self):
+ if self._themes is None:
+ from .themes.client import ThemesClient # noqa: E402
+
+ self._themes = ThemesClient(client_wrapper=self._client_wrapper)
+ return self._themes
+
+ @property
+ def phone(self):
+ if self._phone is None:
+ from .phone.client import PhoneClient # noqa: E402
+
+ self._phone = PhoneClient(client_wrapper=self._client_wrapper)
+ return self._phone
+
+
+class AsyncBrandingClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawBrandingClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._templates: typing.Optional[AsyncTemplatesClient] = None
+ self._themes: typing.Optional[AsyncThemesClient] = None
+ self._phone: typing.Optional[AsyncPhoneClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawBrandingClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawBrandingClient
+ """
+ return self._raw_client
+
+ async def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> GetBrandingResponseContent:
+ """
+ Retrieve branding settings.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBrandingResponseContent
+ Branding settings successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.get()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ *,
+ colors: typing.Optional[UpdateBrandingColors] = OMIT,
+ favicon_url: typing.Optional[str] = OMIT,
+ logo_url: typing.Optional[str] = OMIT,
+ font: typing.Optional[UpdateBrandingFont] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateBrandingResponseContent:
+ """
+ Update branding settings.
+
+ Parameters
+ ----------
+ colors : typing.Optional[UpdateBrandingColors]
+
+ favicon_url : typing.Optional[str]
+ URL for the favicon. Must use HTTPS.
+
+ logo_url : typing.Optional[str]
+ URL for the logo. Must use HTTPS.
+
+ font : typing.Optional[UpdateBrandingFont]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBrandingResponseContent
+ Branding settings successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.update()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ colors=colors, favicon_url=favicon_url, logo_url=logo_url, font=font, request_options=request_options
+ )
+ return _response.data
+
+ @property
+ def templates(self):
+ if self._templates is None:
+ from .templates.client import AsyncTemplatesClient # noqa: E402
+
+ self._templates = AsyncTemplatesClient(client_wrapper=self._client_wrapper)
+ return self._templates
+
+ @property
+ def themes(self):
+ if self._themes is None:
+ from .themes.client import AsyncThemesClient # noqa: E402
+
+ self._themes = AsyncThemesClient(client_wrapper=self._client_wrapper)
+ return self._themes
+
+ @property
+ def phone(self):
+ if self._phone is None:
+ from .phone.client import AsyncPhoneClient # noqa: E402
+
+ self._phone = AsyncPhoneClient(client_wrapper=self._client_wrapper)
+ return self._phone
diff --git a/src/auth0/management/branding/phone/__init__.py b/src/auth0/management/branding/phone/__init__.py
new file mode 100644
index 00000000..a26e474f
--- /dev/null
+++ b/src/auth0/management/branding/phone/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import providers, templates
+_dynamic_imports: typing.Dict[str, str] = {"providers": ".providers", "templates": ".templates"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["providers", "templates"]
diff --git a/src/auth0/management/branding/phone/client.py b/src/auth0/management/branding/phone/client.py
new file mode 100644
index 00000000..b6933d1c
--- /dev/null
+++ b/src/auth0/management/branding/phone/client.py
@@ -0,0 +1,82 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .raw_client import AsyncRawPhoneClient, RawPhoneClient
+
+if typing.TYPE_CHECKING:
+ from .providers.client import AsyncProvidersClient, ProvidersClient
+ from .templates.client import AsyncTemplatesClient, TemplatesClient
+
+
+class PhoneClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawPhoneClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._providers: typing.Optional[ProvidersClient] = None
+ self._templates: typing.Optional[TemplatesClient] = None
+
+ @property
+ def with_raw_response(self) -> RawPhoneClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawPhoneClient
+ """
+ return self._raw_client
+
+ @property
+ def providers(self):
+ if self._providers is None:
+ from .providers.client import ProvidersClient # noqa: E402
+
+ self._providers = ProvidersClient(client_wrapper=self._client_wrapper)
+ return self._providers
+
+ @property
+ def templates(self):
+ if self._templates is None:
+ from .templates.client import TemplatesClient # noqa: E402
+
+ self._templates = TemplatesClient(client_wrapper=self._client_wrapper)
+ return self._templates
+
+
+class AsyncPhoneClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawPhoneClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._providers: typing.Optional[AsyncProvidersClient] = None
+ self._templates: typing.Optional[AsyncTemplatesClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawPhoneClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawPhoneClient
+ """
+ return self._raw_client
+
+ @property
+ def providers(self):
+ if self._providers is None:
+ from .providers.client import AsyncProvidersClient # noqa: E402
+
+ self._providers = AsyncProvidersClient(client_wrapper=self._client_wrapper)
+ return self._providers
+
+ @property
+ def templates(self):
+ if self._templates is None:
+ from .templates.client import AsyncTemplatesClient # noqa: E402
+
+ self._templates = AsyncTemplatesClient(client_wrapper=self._client_wrapper)
+ return self._templates
diff --git a/src/auth0/management/branding/phone/providers/__init__.py b/src/auth0/management/branding/phone/providers/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/branding/phone/providers/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/branding/phone/providers/client.py b/src/auth0/management/branding/phone/providers/client.py
new file mode 100644
index 00000000..e81ac998
--- /dev/null
+++ b/src/auth0/management/branding/phone/providers/client.py
@@ -0,0 +1,593 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.request_options import RequestOptions
+from ....types.create_branding_phone_provider_response_content import CreateBrandingPhoneProviderResponseContent
+from ....types.create_phone_provider_send_test_response_content import CreatePhoneProviderSendTestResponseContent
+from ....types.get_branding_phone_provider_response_content import GetBrandingPhoneProviderResponseContent
+from ....types.list_branding_phone_providers_response_content import ListBrandingPhoneProvidersResponseContent
+from ....types.phone_provider_configuration import PhoneProviderConfiguration
+from ....types.phone_provider_credentials import PhoneProviderCredentials
+from ....types.phone_provider_delivery_method_enum import PhoneProviderDeliveryMethodEnum
+from ....types.phone_provider_name_enum import PhoneProviderNameEnum
+from ....types.update_branding_phone_provider_response_content import UpdateBrandingPhoneProviderResponseContent
+from .raw_client import AsyncRawProvidersClient, RawProvidersClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ProvidersClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawProvidersClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawProvidersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawProvidersClient
+ """
+ return self._raw_client
+
+ def list(
+ self, *, disabled: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListBrandingPhoneProvidersResponseContent:
+ """
+ Retrieve a list of phone providers details set for a Tenant. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListBrandingPhoneProvidersResponseContent
+ Phone providers have been successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.providers.list(
+ disabled=True,
+ )
+ """
+ _response = self._raw_client.list(disabled=disabled, request_options=request_options)
+ return _response.data
+
+ def create(
+ self,
+ *,
+ name: PhoneProviderNameEnum,
+ credentials: PhoneProviderCredentials,
+ disabled: typing.Optional[bool] = OMIT,
+ configuration: typing.Optional[PhoneProviderConfiguration] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateBrandingPhoneProviderResponseContent:
+ """
+ Create a phone provider.
+ The credentials object requires different properties depending on the phone provider (which is specified using the name property).
+
+ Parameters
+ ----------
+ name : PhoneProviderNameEnum
+
+ credentials : PhoneProviderCredentials
+
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ configuration : typing.Optional[PhoneProviderConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateBrandingPhoneProviderResponseContent
+ Phone notification provider successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0, TwilioProviderCredentials
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.providers.create(
+ name="twilio",
+ credentials=TwilioProviderCredentials(
+ auth_token="auth_token",
+ ),
+ )
+ """
+ _response = self._raw_client.create(
+ name=name,
+ credentials=credentials,
+ disabled=disabled,
+ configuration=configuration,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetBrandingPhoneProviderResponseContent:
+ """
+ Retrieve phone provider details. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBrandingPhoneProviderResponseContent
+ Phone provider successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.providers.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete the configured phone provider.
+
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.providers.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[PhoneProviderNameEnum] = OMIT,
+ disabled: typing.Optional[bool] = OMIT,
+ credentials: typing.Optional[PhoneProviderCredentials] = OMIT,
+ configuration: typing.Optional[PhoneProviderConfiguration] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateBrandingPhoneProviderResponseContent:
+ """
+ Update a phone provider.
+ The credentials object requires different properties depending on the phone provider (which is specified using the name property).
+
+ Parameters
+ ----------
+ id : str
+
+ name : typing.Optional[PhoneProviderNameEnum]
+
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ credentials : typing.Optional[PhoneProviderCredentials]
+
+ configuration : typing.Optional[PhoneProviderConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBrandingPhoneProviderResponseContent
+ Phone provider successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.providers.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ name=name,
+ disabled=disabled,
+ credentials=credentials,
+ configuration=configuration,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def test(
+ self,
+ id: str,
+ *,
+ to: str,
+ delivery_method: typing.Optional[PhoneProviderDeliveryMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreatePhoneProviderSendTestResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ to : str
+ The recipient phone number to receive a given notification.
+
+ delivery_method : typing.Optional[PhoneProviderDeliveryMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreatePhoneProviderSendTestResponseContent
+ Phone notification sent.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.providers.test(
+ id="id",
+ to="to",
+ )
+ """
+ _response = self._raw_client.test(id, to=to, delivery_method=delivery_method, request_options=request_options)
+ return _response.data
+
+
+class AsyncProvidersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawProvidersClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawProvidersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawProvidersClient
+ """
+ return self._raw_client
+
+ async def list(
+ self, *, disabled: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListBrandingPhoneProvidersResponseContent:
+ """
+ Retrieve a list of phone providers details set for a Tenant. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListBrandingPhoneProvidersResponseContent
+ Phone providers have been successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.providers.list(
+ disabled=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(disabled=disabled, request_options=request_options)
+ return _response.data
+
+ async def create(
+ self,
+ *,
+ name: PhoneProviderNameEnum,
+ credentials: PhoneProviderCredentials,
+ disabled: typing.Optional[bool] = OMIT,
+ configuration: typing.Optional[PhoneProviderConfiguration] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateBrandingPhoneProviderResponseContent:
+ """
+ Create a phone provider.
+ The credentials object requires different properties depending on the phone provider (which is specified using the name property).
+
+ Parameters
+ ----------
+ name : PhoneProviderNameEnum
+
+ credentials : PhoneProviderCredentials
+
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ configuration : typing.Optional[PhoneProviderConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateBrandingPhoneProviderResponseContent
+ Phone notification provider successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, TwilioProviderCredentials
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.providers.create(
+ name="twilio",
+ credentials=TwilioProviderCredentials(
+ auth_token="auth_token",
+ ),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name,
+ credentials=credentials,
+ disabled=disabled,
+ configuration=configuration,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetBrandingPhoneProviderResponseContent:
+ """
+ Retrieve phone provider details. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBrandingPhoneProviderResponseContent
+ Phone provider successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.providers.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete the configured phone provider.
+
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.providers.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[PhoneProviderNameEnum] = OMIT,
+ disabled: typing.Optional[bool] = OMIT,
+ credentials: typing.Optional[PhoneProviderCredentials] = OMIT,
+ configuration: typing.Optional[PhoneProviderConfiguration] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateBrandingPhoneProviderResponseContent:
+ """
+ Update a phone provider.
+ The credentials object requires different properties depending on the phone provider (which is specified using the name property).
+
+ Parameters
+ ----------
+ id : str
+
+ name : typing.Optional[PhoneProviderNameEnum]
+
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ credentials : typing.Optional[PhoneProviderCredentials]
+
+ configuration : typing.Optional[PhoneProviderConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBrandingPhoneProviderResponseContent
+ Phone provider successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.providers.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ name=name,
+ disabled=disabled,
+ credentials=credentials,
+ configuration=configuration,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def test(
+ self,
+ id: str,
+ *,
+ to: str,
+ delivery_method: typing.Optional[PhoneProviderDeliveryMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreatePhoneProviderSendTestResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ to : str
+ The recipient phone number to receive a given notification.
+
+ delivery_method : typing.Optional[PhoneProviderDeliveryMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreatePhoneProviderSendTestResponseContent
+ Phone notification sent.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.providers.test(
+ id="id",
+ to="to",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.test(
+ id, to=to, delivery_method=delivery_method, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/branding/phone/providers/raw_client.py b/src/auth0/management/branding/phone/providers/raw_client.py
new file mode 100644
index 00000000..c6216f66
--- /dev/null
+++ b/src/auth0/management/branding/phone/providers/raw_client.py
@@ -0,0 +1,1296 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ....core.api_error import ApiError
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.http_response import AsyncHttpResponse, HttpResponse
+from ....core.jsonable_encoder import jsonable_encoder
+from ....core.pydantic_utilities import parse_obj_as
+from ....core.request_options import RequestOptions
+from ....core.serialization import convert_and_respect_annotation_metadata
+from ....errors.bad_request_error import BadRequestError
+from ....errors.conflict_error import ConflictError
+from ....errors.forbidden_error import ForbiddenError
+from ....errors.not_found_error import NotFoundError
+from ....errors.too_many_requests_error import TooManyRequestsError
+from ....errors.unauthorized_error import UnauthorizedError
+from ....types.create_branding_phone_provider_response_content import CreateBrandingPhoneProviderResponseContent
+from ....types.create_phone_provider_send_test_response_content import CreatePhoneProviderSendTestResponseContent
+from ....types.get_branding_phone_provider_response_content import GetBrandingPhoneProviderResponseContent
+from ....types.list_branding_phone_providers_response_content import ListBrandingPhoneProvidersResponseContent
+from ....types.phone_provider_configuration import PhoneProviderConfiguration
+from ....types.phone_provider_credentials import PhoneProviderCredentials
+from ....types.phone_provider_delivery_method_enum import PhoneProviderDeliveryMethodEnum
+from ....types.phone_provider_name_enum import PhoneProviderNameEnum
+from ....types.update_branding_phone_provider_response_content import UpdateBrandingPhoneProviderResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawProvidersClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self, *, disabled: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[ListBrandingPhoneProvidersResponseContent]:
+ """
+ Retrieve a list of phone providers details set for a Tenant. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListBrandingPhoneProvidersResponseContent]
+ Phone providers have been successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding/phone/providers",
+ method="GET",
+ params={
+ "disabled": disabled,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListBrandingPhoneProvidersResponseContent,
+ parse_obj_as(
+ type_=ListBrandingPhoneProvidersResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: PhoneProviderNameEnum,
+ credentials: PhoneProviderCredentials,
+ disabled: typing.Optional[bool] = OMIT,
+ configuration: typing.Optional[PhoneProviderConfiguration] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateBrandingPhoneProviderResponseContent]:
+ """
+ Create a phone provider.
+ The credentials object requires different properties depending on the phone provider (which is specified using the name property).
+
+ Parameters
+ ----------
+ name : PhoneProviderNameEnum
+
+ credentials : PhoneProviderCredentials
+
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ configuration : typing.Optional[PhoneProviderConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateBrandingPhoneProviderResponseContent]
+ Phone notification provider successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding/phone/providers",
+ method="POST",
+ json={
+ "name": name,
+ "disabled": disabled,
+ "configuration": convert_and_respect_annotation_metadata(
+ object_=configuration, annotation=PhoneProviderConfiguration, direction="write"
+ ),
+ "credentials": convert_and_respect_annotation_metadata(
+ object_=credentials, annotation=PhoneProviderCredentials, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateBrandingPhoneProviderResponseContent,
+ parse_obj_as(
+ type_=CreateBrandingPhoneProviderResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetBrandingPhoneProviderResponseContent]:
+ """
+ Retrieve phone provider details. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetBrandingPhoneProviderResponseContent]
+ Phone provider successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/phone/providers/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBrandingPhoneProviderResponseContent,
+ parse_obj_as(
+ type_=GetBrandingPhoneProviderResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete the configured phone provider.
+
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/phone/providers/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[PhoneProviderNameEnum] = OMIT,
+ disabled: typing.Optional[bool] = OMIT,
+ credentials: typing.Optional[PhoneProviderCredentials] = OMIT,
+ configuration: typing.Optional[PhoneProviderConfiguration] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateBrandingPhoneProviderResponseContent]:
+ """
+ Update a phone provider.
+ The credentials object requires different properties depending on the phone provider (which is specified using the name property).
+
+ Parameters
+ ----------
+ id : str
+
+ name : typing.Optional[PhoneProviderNameEnum]
+
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ credentials : typing.Optional[PhoneProviderCredentials]
+
+ configuration : typing.Optional[PhoneProviderConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateBrandingPhoneProviderResponseContent]
+ Phone provider successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/phone/providers/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "disabled": disabled,
+ "credentials": convert_and_respect_annotation_metadata(
+ object_=credentials, annotation=PhoneProviderCredentials, direction="write"
+ ),
+ "configuration": convert_and_respect_annotation_metadata(
+ object_=configuration, annotation=PhoneProviderConfiguration, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBrandingPhoneProviderResponseContent,
+ parse_obj_as(
+ type_=UpdateBrandingPhoneProviderResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def test(
+ self,
+ id: str,
+ *,
+ to: str,
+ delivery_method: typing.Optional[PhoneProviderDeliveryMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreatePhoneProviderSendTestResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ to : str
+ The recipient phone number to receive a given notification.
+
+ delivery_method : typing.Optional[PhoneProviderDeliveryMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreatePhoneProviderSendTestResponseContent]
+ Phone notification sent.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/phone/providers/{jsonable_encoder(id)}/try",
+ method="POST",
+ json={
+ "to": to,
+ "delivery_method": delivery_method,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreatePhoneProviderSendTestResponseContent,
+ parse_obj_as(
+ type_=CreatePhoneProviderSendTestResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawProvidersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self, *, disabled: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[ListBrandingPhoneProvidersResponseContent]:
+ """
+ Retrieve a list of phone providers details set for a Tenant. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListBrandingPhoneProvidersResponseContent]
+ Phone providers have been successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding/phone/providers",
+ method="GET",
+ params={
+ "disabled": disabled,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListBrandingPhoneProvidersResponseContent,
+ parse_obj_as(
+ type_=ListBrandingPhoneProvidersResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: PhoneProviderNameEnum,
+ credentials: PhoneProviderCredentials,
+ disabled: typing.Optional[bool] = OMIT,
+ configuration: typing.Optional[PhoneProviderConfiguration] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateBrandingPhoneProviderResponseContent]:
+ """
+ Create a phone provider.
+ The credentials object requires different properties depending on the phone provider (which is specified using the name property).
+
+ Parameters
+ ----------
+ name : PhoneProviderNameEnum
+
+ credentials : PhoneProviderCredentials
+
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ configuration : typing.Optional[PhoneProviderConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateBrandingPhoneProviderResponseContent]
+ Phone notification provider successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding/phone/providers",
+ method="POST",
+ json={
+ "name": name,
+ "disabled": disabled,
+ "configuration": convert_and_respect_annotation_metadata(
+ object_=configuration, annotation=PhoneProviderConfiguration, direction="write"
+ ),
+ "credentials": convert_and_respect_annotation_metadata(
+ object_=credentials, annotation=PhoneProviderCredentials, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateBrandingPhoneProviderResponseContent,
+ parse_obj_as(
+ type_=CreateBrandingPhoneProviderResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetBrandingPhoneProviderResponseContent]:
+ """
+ Retrieve phone provider details. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetBrandingPhoneProviderResponseContent]
+ Phone provider successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/phone/providers/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBrandingPhoneProviderResponseContent,
+ parse_obj_as(
+ type_=GetBrandingPhoneProviderResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete the configured phone provider.
+
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/phone/providers/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[PhoneProviderNameEnum] = OMIT,
+ disabled: typing.Optional[bool] = OMIT,
+ credentials: typing.Optional[PhoneProviderCredentials] = OMIT,
+ configuration: typing.Optional[PhoneProviderConfiguration] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateBrandingPhoneProviderResponseContent]:
+ """
+ Update a phone provider.
+ The credentials object requires different properties depending on the phone provider (which is specified using the name property).
+
+ Parameters
+ ----------
+ id : str
+
+ name : typing.Optional[PhoneProviderNameEnum]
+
+ disabled : typing.Optional[bool]
+ Whether the provider is enabled (false) or disabled (true).
+
+ credentials : typing.Optional[PhoneProviderCredentials]
+
+ configuration : typing.Optional[PhoneProviderConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateBrandingPhoneProviderResponseContent]
+ Phone provider successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/phone/providers/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "disabled": disabled,
+ "credentials": convert_and_respect_annotation_metadata(
+ object_=credentials, annotation=PhoneProviderCredentials, direction="write"
+ ),
+ "configuration": convert_and_respect_annotation_metadata(
+ object_=configuration, annotation=PhoneProviderConfiguration, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBrandingPhoneProviderResponseContent,
+ parse_obj_as(
+ type_=UpdateBrandingPhoneProviderResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def test(
+ self,
+ id: str,
+ *,
+ to: str,
+ delivery_method: typing.Optional[PhoneProviderDeliveryMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreatePhoneProviderSendTestResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ to : str
+ The recipient phone number to receive a given notification.
+
+ delivery_method : typing.Optional[PhoneProviderDeliveryMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreatePhoneProviderSendTestResponseContent]
+ Phone notification sent.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/phone/providers/{jsonable_encoder(id)}/try",
+ method="POST",
+ json={
+ "to": to,
+ "delivery_method": delivery_method,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreatePhoneProviderSendTestResponseContent,
+ parse_obj_as(
+ type_=CreatePhoneProviderSendTestResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/branding/phone/raw_client.py b/src/auth0/management/branding/phone/raw_client.py
new file mode 100644
index 00000000..ec04dfbb
--- /dev/null
+++ b/src/auth0/management/branding/phone/raw_client.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+
+
+class RawPhoneClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+
+class AsyncRawPhoneClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
diff --git a/src/auth0/management/branding/phone/templates/__init__.py b/src/auth0/management/branding/phone/templates/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/branding/phone/templates/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/branding/phone/templates/client.py b/src/auth0/management/branding/phone/templates/client.py
new file mode 100644
index 00000000..cf5b1e75
--- /dev/null
+++ b/src/auth0/management/branding/phone/templates/client.py
@@ -0,0 +1,607 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.request_options import RequestOptions
+from ....types.create_phone_template_response_content import CreatePhoneTemplateResponseContent
+from ....types.create_phone_template_test_notification_response_content import (
+ CreatePhoneTemplateTestNotificationResponseContent,
+)
+from ....types.get_phone_template_response_content import GetPhoneTemplateResponseContent
+from ....types.list_phone_templates_response_content import ListPhoneTemplatesResponseContent
+from ....types.partial_phone_template_content import PartialPhoneTemplateContent
+from ....types.phone_provider_delivery_method_enum import PhoneProviderDeliveryMethodEnum
+from ....types.phone_template_content import PhoneTemplateContent
+from ....types.phone_template_notification_type_enum import PhoneTemplateNotificationTypeEnum
+from ....types.reset_phone_template_request_content import ResetPhoneTemplateRequestContent
+from ....types.reset_phone_template_response_content import ResetPhoneTemplateResponseContent
+from ....types.update_phone_template_response_content import UpdatePhoneTemplateResponseContent
+from .raw_client import AsyncRawTemplatesClient, RawTemplatesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class TemplatesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawTemplatesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawTemplatesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawTemplatesClient
+ """
+ return self._raw_client
+
+ def list(
+ self, *, disabled: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListPhoneTemplatesResponseContent:
+ """
+ Parameters
+ ----------
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListPhoneTemplatesResponseContent
+ The phone notification templates were retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.templates.list(
+ disabled=True,
+ )
+ """
+ _response = self._raw_client.list(disabled=disabled, request_options=request_options)
+ return _response.data
+
+ def create(
+ self,
+ *,
+ type: typing.Optional[PhoneTemplateNotificationTypeEnum] = OMIT,
+ disabled: typing.Optional[bool] = False,
+ content: typing.Optional[PhoneTemplateContent] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreatePhoneTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ type : typing.Optional[PhoneTemplateNotificationTypeEnum]
+
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ content : typing.Optional[PhoneTemplateContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreatePhoneTemplateResponseContent
+ The phone notification template was created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.templates.create()
+ """
+ _response = self._raw_client.create(
+ type=type, disabled=disabled, content=content, request_options=request_options
+ )
+ return _response.data
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetPhoneTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetPhoneTemplateResponseContent
+ The phone notification template were retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.templates.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.templates.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ content: typing.Optional[PartialPhoneTemplateContent] = OMIT,
+ disabled: typing.Optional[bool] = False,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdatePhoneTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ content : typing.Optional[PartialPhoneTemplateContent]
+
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdatePhoneTemplateResponseContent
+ The phone notification template was updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.templates.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(id, content=content, disabled=disabled, request_options=request_options)
+ return _response.data
+
+ def reset(
+ self,
+ id: str,
+ *,
+ request: ResetPhoneTemplateRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ResetPhoneTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request : ResetPhoneTemplateRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ResetPhoneTemplateResponseContent
+ The phone notification template was reset.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.templates.reset(
+ id="id",
+ request={"key": "value"},
+ )
+ """
+ _response = self._raw_client.reset(id, request=request, request_options=request_options)
+ return _response.data
+
+ def test(
+ self,
+ id: str,
+ *,
+ to: str,
+ delivery_method: typing.Optional[PhoneProviderDeliveryMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreatePhoneTemplateTestNotificationResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ to : str
+ Destination of the testing phone notification
+
+ delivery_method : typing.Optional[PhoneProviderDeliveryMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreatePhoneTemplateTestNotificationResponseContent
+ The phone testing notification for the template was sent
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.phone.templates.test(
+ id="id",
+ to="to",
+ )
+ """
+ _response = self._raw_client.test(id, to=to, delivery_method=delivery_method, request_options=request_options)
+ return _response.data
+
+
+class AsyncTemplatesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawTemplatesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawTemplatesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawTemplatesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self, *, disabled: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListPhoneTemplatesResponseContent:
+ """
+ Parameters
+ ----------
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListPhoneTemplatesResponseContent
+ The phone notification templates were retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.templates.list(
+ disabled=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(disabled=disabled, request_options=request_options)
+ return _response.data
+
+ async def create(
+ self,
+ *,
+ type: typing.Optional[PhoneTemplateNotificationTypeEnum] = OMIT,
+ disabled: typing.Optional[bool] = False,
+ content: typing.Optional[PhoneTemplateContent] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreatePhoneTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ type : typing.Optional[PhoneTemplateNotificationTypeEnum]
+
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ content : typing.Optional[PhoneTemplateContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreatePhoneTemplateResponseContent
+ The phone notification template was created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.templates.create()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ type=type, disabled=disabled, content=content, request_options=request_options
+ )
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetPhoneTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetPhoneTemplateResponseContent
+ The phone notification template were retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.templates.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.templates.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ content: typing.Optional[PartialPhoneTemplateContent] = OMIT,
+ disabled: typing.Optional[bool] = False,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdatePhoneTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ content : typing.Optional[PartialPhoneTemplateContent]
+
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdatePhoneTemplateResponseContent
+ The phone notification template was updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.templates.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id, content=content, disabled=disabled, request_options=request_options
+ )
+ return _response.data
+
+ async def reset(
+ self,
+ id: str,
+ *,
+ request: ResetPhoneTemplateRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ResetPhoneTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request : ResetPhoneTemplateRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ResetPhoneTemplateResponseContent
+ The phone notification template was reset.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.templates.reset(
+ id="id",
+ request={"key": "value"},
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.reset(id, request=request, request_options=request_options)
+ return _response.data
+
+ async def test(
+ self,
+ id: str,
+ *,
+ to: str,
+ delivery_method: typing.Optional[PhoneProviderDeliveryMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreatePhoneTemplateTestNotificationResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+
+ to : str
+ Destination of the testing phone notification
+
+ delivery_method : typing.Optional[PhoneProviderDeliveryMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreatePhoneTemplateTestNotificationResponseContent
+ The phone testing notification for the template was sent
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.phone.templates.test(
+ id="id",
+ to="to",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.test(
+ id, to=to, delivery_method=delivery_method, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/branding/phone/templates/raw_client.py b/src/auth0/management/branding/phone/templates/raw_client.py
new file mode 100644
index 00000000..934f40e4
--- /dev/null
+++ b/src/auth0/management/branding/phone/templates/raw_client.py
@@ -0,0 +1,1404 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ....core.api_error import ApiError
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.http_response import AsyncHttpResponse, HttpResponse
+from ....core.jsonable_encoder import jsonable_encoder
+from ....core.pydantic_utilities import parse_obj_as
+from ....core.request_options import RequestOptions
+from ....core.serialization import convert_and_respect_annotation_metadata
+from ....errors.bad_request_error import BadRequestError
+from ....errors.conflict_error import ConflictError
+from ....errors.forbidden_error import ForbiddenError
+from ....errors.not_found_error import NotFoundError
+from ....errors.too_many_requests_error import TooManyRequestsError
+from ....errors.unauthorized_error import UnauthorizedError
+from ....types.create_phone_template_response_content import CreatePhoneTemplateResponseContent
+from ....types.create_phone_template_test_notification_response_content import (
+ CreatePhoneTemplateTestNotificationResponseContent,
+)
+from ....types.get_phone_template_response_content import GetPhoneTemplateResponseContent
+from ....types.list_phone_templates_response_content import ListPhoneTemplatesResponseContent
+from ....types.partial_phone_template_content import PartialPhoneTemplateContent
+from ....types.phone_provider_delivery_method_enum import PhoneProviderDeliveryMethodEnum
+from ....types.phone_template_content import PhoneTemplateContent
+from ....types.phone_template_notification_type_enum import PhoneTemplateNotificationTypeEnum
+from ....types.reset_phone_template_request_content import ResetPhoneTemplateRequestContent
+from ....types.reset_phone_template_response_content import ResetPhoneTemplateResponseContent
+from ....types.update_phone_template_response_content import UpdatePhoneTemplateResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawTemplatesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self, *, disabled: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[ListPhoneTemplatesResponseContent]:
+ """
+ Parameters
+ ----------
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListPhoneTemplatesResponseContent]
+ The phone notification templates were retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding/phone/templates",
+ method="GET",
+ params={
+ "disabled": disabled,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListPhoneTemplatesResponseContent,
+ parse_obj_as(
+ type_=ListPhoneTemplatesResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ type: typing.Optional[PhoneTemplateNotificationTypeEnum] = OMIT,
+ disabled: typing.Optional[bool] = False,
+ content: typing.Optional[PhoneTemplateContent] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreatePhoneTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ type : typing.Optional[PhoneTemplateNotificationTypeEnum]
+
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ content : typing.Optional[PhoneTemplateContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreatePhoneTemplateResponseContent]
+ The phone notification template was created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding/phone/templates",
+ method="POST",
+ json={
+ "type": type,
+ "disabled": disabled,
+ "content": convert_and_respect_annotation_metadata(
+ object_=content, annotation=PhoneTemplateContent, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreatePhoneTemplateResponseContent,
+ parse_obj_as(
+ type_=CreatePhoneTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetPhoneTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetPhoneTemplateResponseContent]
+ The phone notification template were retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetPhoneTemplateResponseContent,
+ parse_obj_as(
+ type_=GetPhoneTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ content: typing.Optional[PartialPhoneTemplateContent] = OMIT,
+ disabled: typing.Optional[bool] = False,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdatePhoneTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ content : typing.Optional[PartialPhoneTemplateContent]
+
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdatePhoneTemplateResponseContent]
+ The phone notification template was updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "content": convert_and_respect_annotation_metadata(
+ object_=content, annotation=PartialPhoneTemplateContent, direction="write"
+ ),
+ "disabled": disabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdatePhoneTemplateResponseContent,
+ parse_obj_as(
+ type_=UpdatePhoneTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def reset(
+ self,
+ id: str,
+ *,
+ request: ResetPhoneTemplateRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[ResetPhoneTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request : ResetPhoneTemplateRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ResetPhoneTemplateResponseContent]
+ The phone notification template was reset.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}/reset",
+ method="PATCH",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ResetPhoneTemplateResponseContent,
+ parse_obj_as(
+ type_=ResetPhoneTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def test(
+ self,
+ id: str,
+ *,
+ to: str,
+ delivery_method: typing.Optional[PhoneProviderDeliveryMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreatePhoneTemplateTestNotificationResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ to : str
+ Destination of the testing phone notification
+
+ delivery_method : typing.Optional[PhoneProviderDeliveryMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreatePhoneTemplateTestNotificationResponseContent]
+ The phone testing notification for the template was sent
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}/try",
+ method="POST",
+ json={
+ "to": to,
+ "delivery_method": delivery_method,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreatePhoneTemplateTestNotificationResponseContent,
+ parse_obj_as(
+ type_=CreatePhoneTemplateTestNotificationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawTemplatesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self, *, disabled: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[ListPhoneTemplatesResponseContent]:
+ """
+ Parameters
+ ----------
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListPhoneTemplatesResponseContent]
+ The phone notification templates were retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding/phone/templates",
+ method="GET",
+ params={
+ "disabled": disabled,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListPhoneTemplatesResponseContent,
+ parse_obj_as(
+ type_=ListPhoneTemplatesResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ type: typing.Optional[PhoneTemplateNotificationTypeEnum] = OMIT,
+ disabled: typing.Optional[bool] = False,
+ content: typing.Optional[PhoneTemplateContent] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreatePhoneTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ type : typing.Optional[PhoneTemplateNotificationTypeEnum]
+
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ content : typing.Optional[PhoneTemplateContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreatePhoneTemplateResponseContent]
+ The phone notification template was created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding/phone/templates",
+ method="POST",
+ json={
+ "type": type,
+ "disabled": disabled,
+ "content": convert_and_respect_annotation_metadata(
+ object_=content, annotation=PhoneTemplateContent, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreatePhoneTemplateResponseContent,
+ parse_obj_as(
+ type_=CreatePhoneTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetPhoneTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetPhoneTemplateResponseContent]
+ The phone notification template were retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetPhoneTemplateResponseContent,
+ parse_obj_as(
+ type_=GetPhoneTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ content: typing.Optional[PartialPhoneTemplateContent] = OMIT,
+ disabled: typing.Optional[bool] = False,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdatePhoneTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ content : typing.Optional[PartialPhoneTemplateContent]
+
+ disabled : typing.Optional[bool]
+ Whether the template is enabled (false) or disabled (true).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdatePhoneTemplateResponseContent]
+ The phone notification template was updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "content": convert_and_respect_annotation_metadata(
+ object_=content, annotation=PartialPhoneTemplateContent, direction="write"
+ ),
+ "disabled": disabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdatePhoneTemplateResponseContent,
+ parse_obj_as(
+ type_=UpdatePhoneTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def reset(
+ self,
+ id: str,
+ *,
+ request: ResetPhoneTemplateRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[ResetPhoneTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ request : ResetPhoneTemplateRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ResetPhoneTemplateResponseContent]
+ The phone notification template was reset.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}/reset",
+ method="PATCH",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ResetPhoneTemplateResponseContent,
+ parse_obj_as(
+ type_=ResetPhoneTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def test(
+ self,
+ id: str,
+ *,
+ to: str,
+ delivery_method: typing.Optional[PhoneProviderDeliveryMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreatePhoneTemplateTestNotificationResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+
+ to : str
+ Destination of the testing phone notification
+
+ delivery_method : typing.Optional[PhoneProviderDeliveryMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreatePhoneTemplateTestNotificationResponseContent]
+ The phone testing notification for the template was sent
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/phone/templates/{jsonable_encoder(id)}/try",
+ method="POST",
+ json={
+ "to": to,
+ "delivery_method": delivery_method,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreatePhoneTemplateTestNotificationResponseContent,
+ parse_obj_as(
+ type_=CreatePhoneTemplateTestNotificationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/branding/raw_client.py b/src/auth0/management/branding/raw_client.py
new file mode 100644
index 00000000..05a9bc69
--- /dev/null
+++ b/src/auth0/management/branding/raw_client.py
@@ -0,0 +1,390 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.get_branding_response_content import GetBrandingResponseContent
+from ..types.update_branding_colors import UpdateBrandingColors
+from ..types.update_branding_font import UpdateBrandingFont
+from ..types.update_branding_response_content import UpdateBrandingResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawBrandingClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetBrandingResponseContent]:
+ """
+ Retrieve branding settings.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetBrandingResponseContent]
+ Branding settings successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBrandingResponseContent,
+ parse_obj_as(
+ type_=GetBrandingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ *,
+ colors: typing.Optional[UpdateBrandingColors] = OMIT,
+ favicon_url: typing.Optional[str] = OMIT,
+ logo_url: typing.Optional[str] = OMIT,
+ font: typing.Optional[UpdateBrandingFont] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateBrandingResponseContent]:
+ """
+ Update branding settings.
+
+ Parameters
+ ----------
+ colors : typing.Optional[UpdateBrandingColors]
+
+ favicon_url : typing.Optional[str]
+ URL for the favicon. Must use HTTPS.
+
+ logo_url : typing.Optional[str]
+ URL for the logo. Must use HTTPS.
+
+ font : typing.Optional[UpdateBrandingFont]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateBrandingResponseContent]
+ Branding settings successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding",
+ method="PATCH",
+ json={
+ "colors": convert_and_respect_annotation_metadata(
+ object_=colors, annotation=typing.Optional[UpdateBrandingColors], direction="write"
+ ),
+ "favicon_url": favicon_url,
+ "logo_url": logo_url,
+ "font": convert_and_respect_annotation_metadata(
+ object_=font, annotation=typing.Optional[UpdateBrandingFont], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBrandingResponseContent,
+ parse_obj_as(
+ type_=UpdateBrandingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawBrandingClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetBrandingResponseContent]:
+ """
+ Retrieve branding settings.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetBrandingResponseContent]
+ Branding settings successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBrandingResponseContent,
+ parse_obj_as(
+ type_=GetBrandingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ *,
+ colors: typing.Optional[UpdateBrandingColors] = OMIT,
+ favicon_url: typing.Optional[str] = OMIT,
+ logo_url: typing.Optional[str] = OMIT,
+ font: typing.Optional[UpdateBrandingFont] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateBrandingResponseContent]:
+ """
+ Update branding settings.
+
+ Parameters
+ ----------
+ colors : typing.Optional[UpdateBrandingColors]
+
+ favicon_url : typing.Optional[str]
+ URL for the favicon. Must use HTTPS.
+
+ logo_url : typing.Optional[str]
+ URL for the logo. Must use HTTPS.
+
+ font : typing.Optional[UpdateBrandingFont]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateBrandingResponseContent]
+ Branding settings successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding",
+ method="PATCH",
+ json={
+ "colors": convert_and_respect_annotation_metadata(
+ object_=colors, annotation=typing.Optional[UpdateBrandingColors], direction="write"
+ ),
+ "favicon_url": favicon_url,
+ "logo_url": logo_url,
+ "font": convert_and_respect_annotation_metadata(
+ object_=font, annotation=typing.Optional[UpdateBrandingFont], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBrandingResponseContent,
+ parse_obj_as(
+ type_=UpdateBrandingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/branding/templates/__init__.py b/src/auth0/management/branding/templates/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/branding/templates/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/branding/templates/client.py b/src/auth0/management/branding/templates/client.py
new file mode 100644
index 00000000..2fda9cc8
--- /dev/null
+++ b/src/auth0/management/branding/templates/client.py
@@ -0,0 +1,280 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.get_universal_login_template_response_content import GetUniversalLoginTemplateResponseContent
+from ...types.update_universal_login_template_request_content import UpdateUniversalLoginTemplateRequestContent
+from .raw_client import AsyncRawTemplatesClient, RawTemplatesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class TemplatesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawTemplatesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawTemplatesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawTemplatesClient
+ """
+ return self._raw_client
+
+ def get_universal_login(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetUniversalLoginTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUniversalLoginTemplateResponseContent
+ Template successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.templates.get_universal_login()
+ """
+ _response = self._raw_client.get_universal_login(request_options=request_options)
+ return _response.data
+
+ def update_universal_login(
+ self,
+ *,
+ request: UpdateUniversalLoginTemplateRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Update the Universal Login branding template.
+
+ When content-type header is set to application/json:
+ {
+ "template": "<!DOCTYPE html>{% assign resolved_dir = dir | default: "auto" %}<html lang="{{locale}}" dir="{{resolved_dir}}"><head>{%- auth0:head -%}</head><body class="_widget-auto-layout">{%- auth0:widget -%}</body></html>"
+ }
+
+
+
+ When content-type header is set to text/html:
+
+ <!DOCTYPE html>
+ {% assign resolved_dir = dir | default: "auto" %}
+ <html lang="{{locale}}" dir="{{resolved_dir}}">
+ <head>
+ {%- auth0:head -%}
+ </head>
+ <body class="_widget-auto-layout">
+ {%- auth0:widget -%}
+ </body>
+ </html>
+
+
+ Parameters
+ ----------
+ request : UpdateUniversalLoginTemplateRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.templates.update_universal_login(
+ request="string",
+ )
+ """
+ _response = self._raw_client.update_universal_login(request=request, request_options=request_options)
+ return _response.data
+
+ def delete_universal_login(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.templates.delete_universal_login()
+ """
+ _response = self._raw_client.delete_universal_login(request_options=request_options)
+ return _response.data
+
+
+class AsyncTemplatesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawTemplatesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawTemplatesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawTemplatesClient
+ """
+ return self._raw_client
+
+ async def get_universal_login(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetUniversalLoginTemplateResponseContent:
+ """
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUniversalLoginTemplateResponseContent
+ Template successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.templates.get_universal_login()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_universal_login(request_options=request_options)
+ return _response.data
+
+ async def update_universal_login(
+ self,
+ *,
+ request: UpdateUniversalLoginTemplateRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Update the Universal Login branding template.
+
+ When content-type header is set to application/json:
+ {
+ "template": "<!DOCTYPE html>{% assign resolved_dir = dir | default: "auto" %}<html lang="{{locale}}" dir="{{resolved_dir}}"><head>{%- auth0:head -%}</head><body class="_widget-auto-layout">{%- auth0:widget -%}</body></html>"
+ }
+
+
+
+ When content-type header is set to text/html:
+
+ <!DOCTYPE html>
+ {% assign resolved_dir = dir | default: "auto" %}
+ <html lang="{{locale}}" dir="{{resolved_dir}}">
+ <head>
+ {%- auth0:head -%}
+ </head>
+ <body class="_widget-auto-layout">
+ {%- auth0:widget -%}
+ </body>
+ </html>
+
+
+ Parameters
+ ----------
+ request : UpdateUniversalLoginTemplateRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.templates.update_universal_login(
+ request="string",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update_universal_login(request=request, request_options=request_options)
+ return _response.data
+
+ async def delete_universal_login(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.templates.delete_universal_login()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete_universal_login(request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/branding/templates/raw_client.py b/src/auth0/management/branding/templates/raw_client.py
new file mode 100644
index 00000000..8dae3ed0
--- /dev/null
+++ b/src/auth0/management/branding/templates/raw_client.py
@@ -0,0 +1,607 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.conflict_error import ConflictError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.payment_required_error import PaymentRequiredError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.get_universal_login_template_response_content import GetUniversalLoginTemplateResponseContent
+from ...types.update_universal_login_template_request_content import UpdateUniversalLoginTemplateRequestContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawTemplatesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get_universal_login(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetUniversalLoginTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetUniversalLoginTemplateResponseContent]
+ Template successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding/templates/universal-login",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUniversalLoginTemplateResponseContent,
+ parse_obj_as(
+ type_=GetUniversalLoginTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update_universal_login(
+ self,
+ *,
+ request: UpdateUniversalLoginTemplateRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Update the Universal Login branding template.
+
+ When content-type header is set to application/json:
+ {
+ "template": "<!DOCTYPE html>{% assign resolved_dir = dir | default: "auto" %}<html lang="{{locale}}" dir="{{resolved_dir}}"><head>{%- auth0:head -%}</head><body class="_widget-auto-layout">{%- auth0:widget -%}</body></html>"
+ }
+
+
+
+ When content-type header is set to text/html:
+
+ <!DOCTYPE html>
+ {% assign resolved_dir = dir | default: "auto" %}
+ <html lang="{{locale}}" dir="{{resolved_dir}}">
+ <head>
+ {%- auth0:head -%}
+ </head>
+ <body class="_widget-auto-layout">
+ {%- auth0:widget -%}
+ </body>
+ </html>
+
+
+ Parameters
+ ----------
+ request : UpdateUniversalLoginTemplateRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding/templates/universal-login",
+ method="PUT",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=UpdateUniversalLoginTemplateRequestContent, direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete_universal_login(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding/templates/universal-login",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawTemplatesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get_universal_login(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetUniversalLoginTemplateResponseContent]:
+ """
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetUniversalLoginTemplateResponseContent]
+ Template successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding/templates/universal-login",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUniversalLoginTemplateResponseContent,
+ parse_obj_as(
+ type_=GetUniversalLoginTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update_universal_login(
+ self,
+ *,
+ request: UpdateUniversalLoginTemplateRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Update the Universal Login branding template.
+
+ When content-type header is set to application/json:
+ {
+ "template": "<!DOCTYPE html>{% assign resolved_dir = dir | default: "auto" %}<html lang="{{locale}}" dir="{{resolved_dir}}"><head>{%- auth0:head -%}</head><body class="_widget-auto-layout">{%- auth0:widget -%}</body></html>"
+ }
+
+
+
+ When content-type header is set to text/html:
+
+ <!DOCTYPE html>
+ {% assign resolved_dir = dir | default: "auto" %}
+ <html lang="{{locale}}" dir="{{resolved_dir}}">
+ <head>
+ {%- auth0:head -%}
+ </head>
+ <body class="_widget-auto-layout">
+ {%- auth0:widget -%}
+ </body>
+ </html>
+
+
+ Parameters
+ ----------
+ request : UpdateUniversalLoginTemplateRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding/templates/universal-login",
+ method="PUT",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=UpdateUniversalLoginTemplateRequestContent, direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete_universal_login(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding/templates/universal-login",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/branding/themes/__init__.py b/src/auth0/management/branding/themes/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/branding/themes/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/branding/themes/client.py b/src/auth0/management/branding/themes/client.py
new file mode 100644
index 00000000..d062a473
--- /dev/null
+++ b/src/auth0/management/branding/themes/client.py
@@ -0,0 +1,849 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.branding_theme_borders import BrandingThemeBorders
+from ...types.branding_theme_colors import BrandingThemeColors
+from ...types.branding_theme_fonts import BrandingThemeFonts
+from ...types.branding_theme_page_background import BrandingThemePageBackground
+from ...types.branding_theme_widget import BrandingThemeWidget
+from ...types.create_branding_theme_response_content import CreateBrandingThemeResponseContent
+from ...types.get_branding_default_theme_response_content import GetBrandingDefaultThemeResponseContent
+from ...types.get_branding_theme_response_content import GetBrandingThemeResponseContent
+from ...types.update_branding_theme_response_content import UpdateBrandingThemeResponseContent
+from .raw_client import AsyncRawThemesClient, RawThemesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ThemesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawThemesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawThemesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawThemesClient
+ """
+ return self._raw_client
+
+ def create(
+ self,
+ *,
+ borders: BrandingThemeBorders,
+ colors: BrandingThemeColors,
+ fonts: BrandingThemeFonts,
+ page_background: BrandingThemePageBackground,
+ widget: BrandingThemeWidget,
+ display_name: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateBrandingThemeResponseContent:
+ """
+ Create branding theme.
+
+ Parameters
+ ----------
+ borders : BrandingThemeBorders
+
+ colors : BrandingThemeColors
+
+ fonts : BrandingThemeFonts
+
+ page_background : BrandingThemePageBackground
+
+ widget : BrandingThemeWidget
+
+ display_name : typing.Optional[str]
+ Display Name
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateBrandingThemeResponseContent
+ Branding settings successfully updated.
+
+ Examples
+ --------
+ from auth0 import (
+ Auth0,
+ BrandingThemeBorders,
+ BrandingThemeColors,
+ BrandingThemeFontBodyText,
+ BrandingThemeFontButtonsText,
+ BrandingThemeFontInputLabels,
+ BrandingThemeFontLinks,
+ BrandingThemeFonts,
+ BrandingThemeFontSubtitle,
+ BrandingThemeFontTitle,
+ BrandingThemePageBackground,
+ BrandingThemeWidget,
+ )
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.themes.create(
+ borders=BrandingThemeBorders(
+ button_border_radius=1.1,
+ button_border_weight=1.1,
+ buttons_style="pill",
+ input_border_radius=1.1,
+ input_border_weight=1.1,
+ inputs_style="pill",
+ show_widget_shadow=True,
+ widget_border_weight=1.1,
+ widget_corner_radius=1.1,
+ ),
+ colors=BrandingThemeColors(
+ body_text="body_text",
+ error="error",
+ header="header",
+ icons="icons",
+ input_background="input_background",
+ input_border="input_border",
+ input_filled_text="input_filled_text",
+ input_labels_placeholders="input_labels_placeholders",
+ links_focused_components="links_focused_components",
+ primary_button="primary_button",
+ primary_button_label="primary_button_label",
+ secondary_button_border="secondary_button_border",
+ secondary_button_label="secondary_button_label",
+ success="success",
+ widget_background="widget_background",
+ widget_border="widget_border",
+ ),
+ fonts=BrandingThemeFonts(
+ body_text=BrandingThemeFontBodyText(
+ bold=True,
+ size=1.1,
+ ),
+ buttons_text=BrandingThemeFontButtonsText(
+ bold=True,
+ size=1.1,
+ ),
+ font_url="font_url",
+ input_labels=BrandingThemeFontInputLabels(
+ bold=True,
+ size=1.1,
+ ),
+ links=BrandingThemeFontLinks(
+ bold=True,
+ size=1.1,
+ ),
+ links_style="normal",
+ reference_text_size=1.1,
+ subtitle=BrandingThemeFontSubtitle(
+ bold=True,
+ size=1.1,
+ ),
+ title=BrandingThemeFontTitle(
+ bold=True,
+ size=1.1,
+ ),
+ ),
+ page_background=BrandingThemePageBackground(
+ background_color="background_color",
+ background_image_url="background_image_url",
+ page_layout="center",
+ ),
+ widget=BrandingThemeWidget(
+ header_text_alignment="center",
+ logo_height=1.1,
+ logo_position="center",
+ logo_url="logo_url",
+ social_buttons_layout="bottom",
+ ),
+ )
+ """
+ _response = self._raw_client.create(
+ borders=borders,
+ colors=colors,
+ fonts=fonts,
+ page_background=page_background,
+ widget=widget,
+ display_name=display_name,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get_default(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetBrandingDefaultThemeResponseContent:
+ """
+ Retrieve default branding theme.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBrandingDefaultThemeResponseContent
+ Branding theme successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.themes.get_default()
+ """
+ _response = self._raw_client.get_default(request_options=request_options)
+ return _response.data
+
+ def get(
+ self, theme_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetBrandingThemeResponseContent:
+ """
+ Retrieve branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBrandingThemeResponseContent
+ Branding theme successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.themes.get(
+ theme_id="themeId",
+ )
+ """
+ _response = self._raw_client.get(theme_id, request_options=request_options)
+ return _response.data
+
+ def delete(self, theme_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.themes.delete(
+ theme_id="themeId",
+ )
+ """
+ _response = self._raw_client.delete(theme_id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ theme_id: str,
+ *,
+ borders: BrandingThemeBorders,
+ colors: BrandingThemeColors,
+ fonts: BrandingThemeFonts,
+ page_background: BrandingThemePageBackground,
+ widget: BrandingThemeWidget,
+ display_name: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateBrandingThemeResponseContent:
+ """
+ Update branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ borders : BrandingThemeBorders
+
+ colors : BrandingThemeColors
+
+ fonts : BrandingThemeFonts
+
+ page_background : BrandingThemePageBackground
+
+ widget : BrandingThemeWidget
+
+ display_name : typing.Optional[str]
+ Display Name
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBrandingThemeResponseContent
+ Branding settings successfully updated.
+
+ Examples
+ --------
+ from auth0 import (
+ Auth0,
+ BrandingThemeBorders,
+ BrandingThemeColors,
+ BrandingThemeFontBodyText,
+ BrandingThemeFontButtonsText,
+ BrandingThemeFontInputLabels,
+ BrandingThemeFontLinks,
+ BrandingThemeFonts,
+ BrandingThemeFontSubtitle,
+ BrandingThemeFontTitle,
+ BrandingThemePageBackground,
+ BrandingThemeWidget,
+ )
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.branding.themes.update(
+ theme_id="themeId",
+ borders=BrandingThemeBorders(
+ button_border_radius=1.1,
+ button_border_weight=1.1,
+ buttons_style="pill",
+ input_border_radius=1.1,
+ input_border_weight=1.1,
+ inputs_style="pill",
+ show_widget_shadow=True,
+ widget_border_weight=1.1,
+ widget_corner_radius=1.1,
+ ),
+ colors=BrandingThemeColors(
+ body_text="body_text",
+ error="error",
+ header="header",
+ icons="icons",
+ input_background="input_background",
+ input_border="input_border",
+ input_filled_text="input_filled_text",
+ input_labels_placeholders="input_labels_placeholders",
+ links_focused_components="links_focused_components",
+ primary_button="primary_button",
+ primary_button_label="primary_button_label",
+ secondary_button_border="secondary_button_border",
+ secondary_button_label="secondary_button_label",
+ success="success",
+ widget_background="widget_background",
+ widget_border="widget_border",
+ ),
+ fonts=BrandingThemeFonts(
+ body_text=BrandingThemeFontBodyText(
+ bold=True,
+ size=1.1,
+ ),
+ buttons_text=BrandingThemeFontButtonsText(
+ bold=True,
+ size=1.1,
+ ),
+ font_url="font_url",
+ input_labels=BrandingThemeFontInputLabels(
+ bold=True,
+ size=1.1,
+ ),
+ links=BrandingThemeFontLinks(
+ bold=True,
+ size=1.1,
+ ),
+ links_style="normal",
+ reference_text_size=1.1,
+ subtitle=BrandingThemeFontSubtitle(
+ bold=True,
+ size=1.1,
+ ),
+ title=BrandingThemeFontTitle(
+ bold=True,
+ size=1.1,
+ ),
+ ),
+ page_background=BrandingThemePageBackground(
+ background_color="background_color",
+ background_image_url="background_image_url",
+ page_layout="center",
+ ),
+ widget=BrandingThemeWidget(
+ header_text_alignment="center",
+ logo_height=1.1,
+ logo_position="center",
+ logo_url="logo_url",
+ social_buttons_layout="bottom",
+ ),
+ )
+ """
+ _response = self._raw_client.update(
+ theme_id,
+ borders=borders,
+ colors=colors,
+ fonts=fonts,
+ page_background=page_background,
+ widget=widget,
+ display_name=display_name,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncThemesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawThemesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawThemesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawThemesClient
+ """
+ return self._raw_client
+
+ async def create(
+ self,
+ *,
+ borders: BrandingThemeBorders,
+ colors: BrandingThemeColors,
+ fonts: BrandingThemeFonts,
+ page_background: BrandingThemePageBackground,
+ widget: BrandingThemeWidget,
+ display_name: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateBrandingThemeResponseContent:
+ """
+ Create branding theme.
+
+ Parameters
+ ----------
+ borders : BrandingThemeBorders
+
+ colors : BrandingThemeColors
+
+ fonts : BrandingThemeFonts
+
+ page_background : BrandingThemePageBackground
+
+ widget : BrandingThemeWidget
+
+ display_name : typing.Optional[str]
+ Display Name
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateBrandingThemeResponseContent
+ Branding settings successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import (
+ AsyncAuth0,
+ BrandingThemeBorders,
+ BrandingThemeColors,
+ BrandingThemeFontBodyText,
+ BrandingThemeFontButtonsText,
+ BrandingThemeFontInputLabels,
+ BrandingThemeFontLinks,
+ BrandingThemeFonts,
+ BrandingThemeFontSubtitle,
+ BrandingThemeFontTitle,
+ BrandingThemePageBackground,
+ BrandingThemeWidget,
+ )
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.themes.create(
+ borders=BrandingThemeBorders(
+ button_border_radius=1.1,
+ button_border_weight=1.1,
+ buttons_style="pill",
+ input_border_radius=1.1,
+ input_border_weight=1.1,
+ inputs_style="pill",
+ show_widget_shadow=True,
+ widget_border_weight=1.1,
+ widget_corner_radius=1.1,
+ ),
+ colors=BrandingThemeColors(
+ body_text="body_text",
+ error="error",
+ header="header",
+ icons="icons",
+ input_background="input_background",
+ input_border="input_border",
+ input_filled_text="input_filled_text",
+ input_labels_placeholders="input_labels_placeholders",
+ links_focused_components="links_focused_components",
+ primary_button="primary_button",
+ primary_button_label="primary_button_label",
+ secondary_button_border="secondary_button_border",
+ secondary_button_label="secondary_button_label",
+ success="success",
+ widget_background="widget_background",
+ widget_border="widget_border",
+ ),
+ fonts=BrandingThemeFonts(
+ body_text=BrandingThemeFontBodyText(
+ bold=True,
+ size=1.1,
+ ),
+ buttons_text=BrandingThemeFontButtonsText(
+ bold=True,
+ size=1.1,
+ ),
+ font_url="font_url",
+ input_labels=BrandingThemeFontInputLabels(
+ bold=True,
+ size=1.1,
+ ),
+ links=BrandingThemeFontLinks(
+ bold=True,
+ size=1.1,
+ ),
+ links_style="normal",
+ reference_text_size=1.1,
+ subtitle=BrandingThemeFontSubtitle(
+ bold=True,
+ size=1.1,
+ ),
+ title=BrandingThemeFontTitle(
+ bold=True,
+ size=1.1,
+ ),
+ ),
+ page_background=BrandingThemePageBackground(
+ background_color="background_color",
+ background_image_url="background_image_url",
+ page_layout="center",
+ ),
+ widget=BrandingThemeWidget(
+ header_text_alignment="center",
+ logo_height=1.1,
+ logo_position="center",
+ logo_url="logo_url",
+ social_buttons_layout="bottom",
+ ),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ borders=borders,
+ colors=colors,
+ fonts=fonts,
+ page_background=page_background,
+ widget=widget,
+ display_name=display_name,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get_default(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetBrandingDefaultThemeResponseContent:
+ """
+ Retrieve default branding theme.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBrandingDefaultThemeResponseContent
+ Branding theme successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.themes.get_default()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_default(request_options=request_options)
+ return _response.data
+
+ async def get(
+ self, theme_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetBrandingThemeResponseContent:
+ """
+ Retrieve branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetBrandingThemeResponseContent
+ Branding theme successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.themes.get(
+ theme_id="themeId",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(theme_id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, theme_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.themes.delete(
+ theme_id="themeId",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(theme_id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ theme_id: str,
+ *,
+ borders: BrandingThemeBorders,
+ colors: BrandingThemeColors,
+ fonts: BrandingThemeFonts,
+ page_background: BrandingThemePageBackground,
+ widget: BrandingThemeWidget,
+ display_name: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateBrandingThemeResponseContent:
+ """
+ Update branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ borders : BrandingThemeBorders
+
+ colors : BrandingThemeColors
+
+ fonts : BrandingThemeFonts
+
+ page_background : BrandingThemePageBackground
+
+ widget : BrandingThemeWidget
+
+ display_name : typing.Optional[str]
+ Display Name
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateBrandingThemeResponseContent
+ Branding settings successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import (
+ AsyncAuth0,
+ BrandingThemeBorders,
+ BrandingThemeColors,
+ BrandingThemeFontBodyText,
+ BrandingThemeFontButtonsText,
+ BrandingThemeFontInputLabels,
+ BrandingThemeFontLinks,
+ BrandingThemeFonts,
+ BrandingThemeFontSubtitle,
+ BrandingThemeFontTitle,
+ BrandingThemePageBackground,
+ BrandingThemeWidget,
+ )
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.branding.themes.update(
+ theme_id="themeId",
+ borders=BrandingThemeBorders(
+ button_border_radius=1.1,
+ button_border_weight=1.1,
+ buttons_style="pill",
+ input_border_radius=1.1,
+ input_border_weight=1.1,
+ inputs_style="pill",
+ show_widget_shadow=True,
+ widget_border_weight=1.1,
+ widget_corner_radius=1.1,
+ ),
+ colors=BrandingThemeColors(
+ body_text="body_text",
+ error="error",
+ header="header",
+ icons="icons",
+ input_background="input_background",
+ input_border="input_border",
+ input_filled_text="input_filled_text",
+ input_labels_placeholders="input_labels_placeholders",
+ links_focused_components="links_focused_components",
+ primary_button="primary_button",
+ primary_button_label="primary_button_label",
+ secondary_button_border="secondary_button_border",
+ secondary_button_label="secondary_button_label",
+ success="success",
+ widget_background="widget_background",
+ widget_border="widget_border",
+ ),
+ fonts=BrandingThemeFonts(
+ body_text=BrandingThemeFontBodyText(
+ bold=True,
+ size=1.1,
+ ),
+ buttons_text=BrandingThemeFontButtonsText(
+ bold=True,
+ size=1.1,
+ ),
+ font_url="font_url",
+ input_labels=BrandingThemeFontInputLabels(
+ bold=True,
+ size=1.1,
+ ),
+ links=BrandingThemeFontLinks(
+ bold=True,
+ size=1.1,
+ ),
+ links_style="normal",
+ reference_text_size=1.1,
+ subtitle=BrandingThemeFontSubtitle(
+ bold=True,
+ size=1.1,
+ ),
+ title=BrandingThemeFontTitle(
+ bold=True,
+ size=1.1,
+ ),
+ ),
+ page_background=BrandingThemePageBackground(
+ background_color="background_color",
+ background_image_url="background_image_url",
+ page_layout="center",
+ ),
+ widget=BrandingThemeWidget(
+ header_text_alignment="center",
+ logo_height=1.1,
+ logo_position="center",
+ logo_url="logo_url",
+ social_buttons_layout="bottom",
+ ),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ theme_id,
+ borders=borders,
+ colors=colors,
+ fonts=fonts,
+ page_background=page_background,
+ widget=widget,
+ display_name=display_name,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/branding/themes/raw_client.py b/src/auth0/management/branding/themes/raw_client.py
new file mode 100644
index 00000000..76ea0fb9
--- /dev/null
+++ b/src/auth0/management/branding/themes/raw_client.py
@@ -0,0 +1,1058 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.conflict_error import ConflictError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.branding_theme_borders import BrandingThemeBorders
+from ...types.branding_theme_colors import BrandingThemeColors
+from ...types.branding_theme_fonts import BrandingThemeFonts
+from ...types.branding_theme_page_background import BrandingThemePageBackground
+from ...types.branding_theme_widget import BrandingThemeWidget
+from ...types.create_branding_theme_response_content import CreateBrandingThemeResponseContent
+from ...types.get_branding_default_theme_response_content import GetBrandingDefaultThemeResponseContent
+from ...types.get_branding_theme_response_content import GetBrandingThemeResponseContent
+from ...types.update_branding_theme_response_content import UpdateBrandingThemeResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawThemesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def create(
+ self,
+ *,
+ borders: BrandingThemeBorders,
+ colors: BrandingThemeColors,
+ fonts: BrandingThemeFonts,
+ page_background: BrandingThemePageBackground,
+ widget: BrandingThemeWidget,
+ display_name: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateBrandingThemeResponseContent]:
+ """
+ Create branding theme.
+
+ Parameters
+ ----------
+ borders : BrandingThemeBorders
+
+ colors : BrandingThemeColors
+
+ fonts : BrandingThemeFonts
+
+ page_background : BrandingThemePageBackground
+
+ widget : BrandingThemeWidget
+
+ display_name : typing.Optional[str]
+ Display Name
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateBrandingThemeResponseContent]
+ Branding settings successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding/themes",
+ method="POST",
+ json={
+ "borders": convert_and_respect_annotation_metadata(
+ object_=borders, annotation=BrandingThemeBorders, direction="write"
+ ),
+ "colors": convert_and_respect_annotation_metadata(
+ object_=colors, annotation=BrandingThemeColors, direction="write"
+ ),
+ "displayName": display_name,
+ "fonts": convert_and_respect_annotation_metadata(
+ object_=fonts, annotation=BrandingThemeFonts, direction="write"
+ ),
+ "page_background": convert_and_respect_annotation_metadata(
+ object_=page_background, annotation=BrandingThemePageBackground, direction="write"
+ ),
+ "widget": convert_and_respect_annotation_metadata(
+ object_=widget, annotation=BrandingThemeWidget, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateBrandingThemeResponseContent,
+ parse_obj_as(
+ type_=CreateBrandingThemeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get_default(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetBrandingDefaultThemeResponseContent]:
+ """
+ Retrieve default branding theme.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetBrandingDefaultThemeResponseContent]
+ Branding theme successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "branding/themes/default",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBrandingDefaultThemeResponseContent,
+ parse_obj_as(
+ type_=GetBrandingDefaultThemeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, theme_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetBrandingThemeResponseContent]:
+ """
+ Retrieve branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetBrandingThemeResponseContent]
+ Branding theme successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/themes/{jsonable_encoder(theme_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBrandingThemeResponseContent,
+ parse_obj_as(
+ type_=GetBrandingThemeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, theme_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/themes/{jsonable_encoder(theme_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ theme_id: str,
+ *,
+ borders: BrandingThemeBorders,
+ colors: BrandingThemeColors,
+ fonts: BrandingThemeFonts,
+ page_background: BrandingThemePageBackground,
+ widget: BrandingThemeWidget,
+ display_name: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateBrandingThemeResponseContent]:
+ """
+ Update branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ borders : BrandingThemeBorders
+
+ colors : BrandingThemeColors
+
+ fonts : BrandingThemeFonts
+
+ page_background : BrandingThemePageBackground
+
+ widget : BrandingThemeWidget
+
+ display_name : typing.Optional[str]
+ Display Name
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateBrandingThemeResponseContent]
+ Branding settings successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"branding/themes/{jsonable_encoder(theme_id)}",
+ method="PATCH",
+ json={
+ "borders": convert_and_respect_annotation_metadata(
+ object_=borders, annotation=BrandingThemeBorders, direction="write"
+ ),
+ "colors": convert_and_respect_annotation_metadata(
+ object_=colors, annotation=BrandingThemeColors, direction="write"
+ ),
+ "displayName": display_name,
+ "fonts": convert_and_respect_annotation_metadata(
+ object_=fonts, annotation=BrandingThemeFonts, direction="write"
+ ),
+ "page_background": convert_and_respect_annotation_metadata(
+ object_=page_background, annotation=BrandingThemePageBackground, direction="write"
+ ),
+ "widget": convert_and_respect_annotation_metadata(
+ object_=widget, annotation=BrandingThemeWidget, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBrandingThemeResponseContent,
+ parse_obj_as(
+ type_=UpdateBrandingThemeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawThemesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def create(
+ self,
+ *,
+ borders: BrandingThemeBorders,
+ colors: BrandingThemeColors,
+ fonts: BrandingThemeFonts,
+ page_background: BrandingThemePageBackground,
+ widget: BrandingThemeWidget,
+ display_name: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateBrandingThemeResponseContent]:
+ """
+ Create branding theme.
+
+ Parameters
+ ----------
+ borders : BrandingThemeBorders
+
+ colors : BrandingThemeColors
+
+ fonts : BrandingThemeFonts
+
+ page_background : BrandingThemePageBackground
+
+ widget : BrandingThemeWidget
+
+ display_name : typing.Optional[str]
+ Display Name
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateBrandingThemeResponseContent]
+ Branding settings successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding/themes",
+ method="POST",
+ json={
+ "borders": convert_and_respect_annotation_metadata(
+ object_=borders, annotation=BrandingThemeBorders, direction="write"
+ ),
+ "colors": convert_and_respect_annotation_metadata(
+ object_=colors, annotation=BrandingThemeColors, direction="write"
+ ),
+ "displayName": display_name,
+ "fonts": convert_and_respect_annotation_metadata(
+ object_=fonts, annotation=BrandingThemeFonts, direction="write"
+ ),
+ "page_background": convert_and_respect_annotation_metadata(
+ object_=page_background, annotation=BrandingThemePageBackground, direction="write"
+ ),
+ "widget": convert_and_respect_annotation_metadata(
+ object_=widget, annotation=BrandingThemeWidget, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateBrandingThemeResponseContent,
+ parse_obj_as(
+ type_=CreateBrandingThemeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get_default(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetBrandingDefaultThemeResponseContent]:
+ """
+ Retrieve default branding theme.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetBrandingDefaultThemeResponseContent]
+ Branding theme successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "branding/themes/default",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBrandingDefaultThemeResponseContent,
+ parse_obj_as(
+ type_=GetBrandingDefaultThemeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, theme_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetBrandingThemeResponseContent]:
+ """
+ Retrieve branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetBrandingThemeResponseContent]
+ Branding theme successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/themes/{jsonable_encoder(theme_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetBrandingThemeResponseContent,
+ parse_obj_as(
+ type_=GetBrandingThemeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, theme_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/themes/{jsonable_encoder(theme_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ theme_id: str,
+ *,
+ borders: BrandingThemeBorders,
+ colors: BrandingThemeColors,
+ fonts: BrandingThemeFonts,
+ page_background: BrandingThemePageBackground,
+ widget: BrandingThemeWidget,
+ display_name: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateBrandingThemeResponseContent]:
+ """
+ Update branding theme.
+
+ Parameters
+ ----------
+ theme_id : str
+ The ID of the theme
+
+ borders : BrandingThemeBorders
+
+ colors : BrandingThemeColors
+
+ fonts : BrandingThemeFonts
+
+ page_background : BrandingThemePageBackground
+
+ widget : BrandingThemeWidget
+
+ display_name : typing.Optional[str]
+ Display Name
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateBrandingThemeResponseContent]
+ Branding settings successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"branding/themes/{jsonable_encoder(theme_id)}",
+ method="PATCH",
+ json={
+ "borders": convert_and_respect_annotation_metadata(
+ object_=borders, annotation=BrandingThemeBorders, direction="write"
+ ),
+ "colors": convert_and_respect_annotation_metadata(
+ object_=colors, annotation=BrandingThemeColors, direction="write"
+ ),
+ "displayName": display_name,
+ "fonts": convert_and_respect_annotation_metadata(
+ object_=fonts, annotation=BrandingThemeFonts, direction="write"
+ ),
+ "page_background": convert_and_respect_annotation_metadata(
+ object_=page_background, annotation=BrandingThemePageBackground, direction="write"
+ ),
+ "widget": convert_and_respect_annotation_metadata(
+ object_=widget, annotation=BrandingThemeWidget, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateBrandingThemeResponseContent,
+ parse_obj_as(
+ type_=UpdateBrandingThemeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/client.py b/src/auth0/management/client.py
new file mode 100644
index 00000000..54af0330
--- /dev/null
+++ b/src/auth0/management/client.py
@@ -0,0 +1,952 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+import httpx
+from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .environment import Auth0Environment
+
+if typing.TYPE_CHECKING:
+ from .actions.client import ActionsClient, AsyncActionsClient
+ from .anomaly.client import AnomalyClient, AsyncAnomalyClient
+ from .attack_protection.client import AsyncAttackProtectionClient, AttackProtectionClient
+ from .branding.client import AsyncBrandingClient, BrandingClient
+ from .client_grants.client import AsyncClientGrantsClient, ClientGrantsClient
+ from .clients.client import AsyncClientsClient, ClientsClient
+ from .connection_profiles.client import AsyncConnectionProfilesClient, ConnectionProfilesClient
+ from .connections.client import AsyncConnectionsClient, ConnectionsClient
+ from .custom_domains.client import AsyncCustomDomainsClient, CustomDomainsClient
+ from .device_credentials.client import AsyncDeviceCredentialsClient, DeviceCredentialsClient
+ from .email_templates.client import AsyncEmailTemplatesClient, EmailTemplatesClient
+ from .emails.client import AsyncEmailsClient, EmailsClient
+ from .event_streams.client import AsyncEventStreamsClient, EventStreamsClient
+ from .flows.client import AsyncFlowsClient, FlowsClient
+ from .forms.client import AsyncFormsClient, FormsClient
+ from .guardian.client import AsyncGuardianClient, GuardianClient
+ from .hooks.client import AsyncHooksClient, HooksClient
+ from .jobs.client import AsyncJobsClient, JobsClient
+ from .keys.client import AsyncKeysClient, KeysClient
+ from .log_streams.client import AsyncLogStreamsClient, LogStreamsClient
+ from .logs.client import AsyncLogsClient, LogsClient
+ from .network_acls.client import AsyncNetworkAclsClient, NetworkAclsClient
+ from .organizations.client import AsyncOrganizationsClient, OrganizationsClient
+ from .prompts.client import AsyncPromptsClient, PromptsClient
+ from .refresh_tokens.client import AsyncRefreshTokensClient, RefreshTokensClient
+ from .resource_servers.client import AsyncResourceServersClient, ResourceServersClient
+ from .risk_assessments.client import AsyncRiskAssessmentsClient, RiskAssessmentsClient
+ from .roles.client import AsyncRolesClient, RolesClient
+ from .rules.client import AsyncRulesClient, RulesClient
+ from .rules_configs.client import AsyncRulesConfigsClient, RulesConfigsClient
+ from .self_service_profiles.client import AsyncSelfServiceProfilesClient, SelfServiceProfilesClient
+ from .sessions.client import AsyncSessionsClient, SessionsClient
+ from .stats.client import AsyncStatsClient, StatsClient
+ from .supplemental_signals.client import AsyncSupplementalSignalsClient, SupplementalSignalsClient
+ from .tenants.client import AsyncTenantsClient, TenantsClient
+ from .tickets.client import AsyncTicketsClient, TicketsClient
+ from .token_exchange_profiles.client import AsyncTokenExchangeProfilesClient, TokenExchangeProfilesClient
+ from .user_attribute_profiles.client import AsyncUserAttributeProfilesClient, UserAttributeProfilesClient
+ from .user_blocks.client import AsyncUserBlocksClient, UserBlocksClient
+ from .user_grants.client import AsyncUserGrantsClient, UserGrantsClient
+ from .users.client import AsyncUsersClient, UsersClient
+ from .verifiable_credentials.client import AsyncVerifiableCredentialsClient, VerifiableCredentialsClient
+
+
+class Auth0:
+ """
+ Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propagate to these functions.
+
+ Parameters
+ ----------
+ base_url : typing.Optional[str]
+ The base url to use for requests from the client.
+
+ environment : Auth0Environment
+ The environment to use for requests from the client. from .environment import Auth0Environment
+
+
+
+ Defaults to Auth0Environment.DEFAULT
+
+
+
+ token : typing.Union[str, typing.Callable[[], str]]
+ headers : typing.Optional[typing.Dict[str, str]]
+ Additional headers to send with every request.
+
+ timeout : typing.Optional[float]
+ The timeout to be used, in seconds, for requests. By default the timeout is 60 seconds, unless a custom httpx client is used, in which case this default is not enforced.
+
+ follow_redirects : typing.Optional[bool]
+ Whether the default httpx client follows redirects or not, this is irrelevant if a custom httpx client is passed in.
+
+ httpx_client : typing.Optional[httpx.Client]
+ The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ """
+
+ def __init__(
+ self,
+ *,
+ base_url: typing.Optional[str] = None,
+ environment: Auth0Environment = Auth0Environment.DEFAULT,
+ token: typing.Union[str, typing.Callable[[], str]],
+ headers: typing.Optional[typing.Dict[str, str]] = None,
+ timeout: typing.Optional[float] = None,
+ follow_redirects: typing.Optional[bool] = True,
+ httpx_client: typing.Optional[httpx.Client] = None,
+ ):
+ _defaulted_timeout = (
+ timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read
+ )
+ self._client_wrapper = SyncClientWrapper(
+ base_url=_get_base_url(base_url=base_url, environment=environment),
+ token=token,
+ headers=headers,
+ httpx_client=httpx_client
+ if httpx_client is not None
+ else httpx.Client(timeout=_defaulted_timeout, follow_redirects=follow_redirects)
+ if follow_redirects is not None
+ else httpx.Client(timeout=_defaulted_timeout),
+ timeout=_defaulted_timeout,
+ )
+ self._actions: typing.Optional[ActionsClient] = None
+ self._branding: typing.Optional[BrandingClient] = None
+ self._client_grants: typing.Optional[ClientGrantsClient] = None
+ self._clients: typing.Optional[ClientsClient] = None
+ self._connection_profiles: typing.Optional[ConnectionProfilesClient] = None
+ self._connections: typing.Optional[ConnectionsClient] = None
+ self._custom_domains: typing.Optional[CustomDomainsClient] = None
+ self._device_credentials: typing.Optional[DeviceCredentialsClient] = None
+ self._email_templates: typing.Optional[EmailTemplatesClient] = None
+ self._event_streams: typing.Optional[EventStreamsClient] = None
+ self._flows: typing.Optional[FlowsClient] = None
+ self._forms: typing.Optional[FormsClient] = None
+ self._user_grants: typing.Optional[UserGrantsClient] = None
+ self._hooks: typing.Optional[HooksClient] = None
+ self._jobs: typing.Optional[JobsClient] = None
+ self._log_streams: typing.Optional[LogStreamsClient] = None
+ self._logs: typing.Optional[LogsClient] = None
+ self._network_acls: typing.Optional[NetworkAclsClient] = None
+ self._organizations: typing.Optional[OrganizationsClient] = None
+ self._prompts: typing.Optional[PromptsClient] = None
+ self._refresh_tokens: typing.Optional[RefreshTokensClient] = None
+ self._resource_servers: typing.Optional[ResourceServersClient] = None
+ self._roles: typing.Optional[RolesClient] = None
+ self._rules: typing.Optional[RulesClient] = None
+ self._rules_configs: typing.Optional[RulesConfigsClient] = None
+ self._self_service_profiles: typing.Optional[SelfServiceProfilesClient] = None
+ self._sessions: typing.Optional[SessionsClient] = None
+ self._stats: typing.Optional[StatsClient] = None
+ self._supplemental_signals: typing.Optional[SupplementalSignalsClient] = None
+ self._tickets: typing.Optional[TicketsClient] = None
+ self._token_exchange_profiles: typing.Optional[TokenExchangeProfilesClient] = None
+ self._user_attribute_profiles: typing.Optional[UserAttributeProfilesClient] = None
+ self._user_blocks: typing.Optional[UserBlocksClient] = None
+ self._users: typing.Optional[UsersClient] = None
+ self._anomaly: typing.Optional[AnomalyClient] = None
+ self._attack_protection: typing.Optional[AttackProtectionClient] = None
+ self._emails: typing.Optional[EmailsClient] = None
+ self._guardian: typing.Optional[GuardianClient] = None
+ self._keys: typing.Optional[KeysClient] = None
+ self._risk_assessments: typing.Optional[RiskAssessmentsClient] = None
+ self._tenants: typing.Optional[TenantsClient] = None
+ self._verifiable_credentials: typing.Optional[VerifiableCredentialsClient] = None
+
+ @property
+ def actions(self):
+ if self._actions is None:
+ from .actions.client import ActionsClient # noqa: E402
+
+ self._actions = ActionsClient(client_wrapper=self._client_wrapper)
+ return self._actions
+
+ @property
+ def branding(self):
+ if self._branding is None:
+ from .branding.client import BrandingClient # noqa: E402
+
+ self._branding = BrandingClient(client_wrapper=self._client_wrapper)
+ return self._branding
+
+ @property
+ def client_grants(self):
+ if self._client_grants is None:
+ from .client_grants.client import ClientGrantsClient # noqa: E402
+
+ self._client_grants = ClientGrantsClient(client_wrapper=self._client_wrapper)
+ return self._client_grants
+
+ @property
+ def clients(self):
+ if self._clients is None:
+ from .clients.client import ClientsClient # noqa: E402
+
+ self._clients = ClientsClient(client_wrapper=self._client_wrapper)
+ return self._clients
+
+ @property
+ def connection_profiles(self):
+ if self._connection_profiles is None:
+ from .connection_profiles.client import ConnectionProfilesClient # noqa: E402
+
+ self._connection_profiles = ConnectionProfilesClient(client_wrapper=self._client_wrapper)
+ return self._connection_profiles
+
+ @property
+ def connections(self):
+ if self._connections is None:
+ from .connections.client import ConnectionsClient # noqa: E402
+
+ self._connections = ConnectionsClient(client_wrapper=self._client_wrapper)
+ return self._connections
+
+ @property
+ def custom_domains(self):
+ if self._custom_domains is None:
+ from .custom_domains.client import CustomDomainsClient # noqa: E402
+
+ self._custom_domains = CustomDomainsClient(client_wrapper=self._client_wrapper)
+ return self._custom_domains
+
+ @property
+ def device_credentials(self):
+ if self._device_credentials is None:
+ from .device_credentials.client import DeviceCredentialsClient # noqa: E402
+
+ self._device_credentials = DeviceCredentialsClient(client_wrapper=self._client_wrapper)
+ return self._device_credentials
+
+ @property
+ def email_templates(self):
+ if self._email_templates is None:
+ from .email_templates.client import EmailTemplatesClient # noqa: E402
+
+ self._email_templates = EmailTemplatesClient(client_wrapper=self._client_wrapper)
+ return self._email_templates
+
+ @property
+ def event_streams(self):
+ if self._event_streams is None:
+ from .event_streams.client import EventStreamsClient # noqa: E402
+
+ self._event_streams = EventStreamsClient(client_wrapper=self._client_wrapper)
+ return self._event_streams
+
+ @property
+ def flows(self):
+ if self._flows is None:
+ from .flows.client import FlowsClient # noqa: E402
+
+ self._flows = FlowsClient(client_wrapper=self._client_wrapper)
+ return self._flows
+
+ @property
+ def forms(self):
+ if self._forms is None:
+ from .forms.client import FormsClient # noqa: E402
+
+ self._forms = FormsClient(client_wrapper=self._client_wrapper)
+ return self._forms
+
+ @property
+ def user_grants(self):
+ if self._user_grants is None:
+ from .user_grants.client import UserGrantsClient # noqa: E402
+
+ self._user_grants = UserGrantsClient(client_wrapper=self._client_wrapper)
+ return self._user_grants
+
+ @property
+ def hooks(self):
+ if self._hooks is None:
+ from .hooks.client import HooksClient # noqa: E402
+
+ self._hooks = HooksClient(client_wrapper=self._client_wrapper)
+ return self._hooks
+
+ @property
+ def jobs(self):
+ if self._jobs is None:
+ from .jobs.client import JobsClient # noqa: E402
+
+ self._jobs = JobsClient(client_wrapper=self._client_wrapper)
+ return self._jobs
+
+ @property
+ def log_streams(self):
+ if self._log_streams is None:
+ from .log_streams.client import LogStreamsClient # noqa: E402
+
+ self._log_streams = LogStreamsClient(client_wrapper=self._client_wrapper)
+ return self._log_streams
+
+ @property
+ def logs(self):
+ if self._logs is None:
+ from .logs.client import LogsClient # noqa: E402
+
+ self._logs = LogsClient(client_wrapper=self._client_wrapper)
+ return self._logs
+
+ @property
+ def network_acls(self):
+ if self._network_acls is None:
+ from .network_acls.client import NetworkAclsClient # noqa: E402
+
+ self._network_acls = NetworkAclsClient(client_wrapper=self._client_wrapper)
+ return self._network_acls
+
+ @property
+ def organizations(self):
+ if self._organizations is None:
+ from .organizations.client import OrganizationsClient # noqa: E402
+
+ self._organizations = OrganizationsClient(client_wrapper=self._client_wrapper)
+ return self._organizations
+
+ @property
+ def prompts(self):
+ if self._prompts is None:
+ from .prompts.client import PromptsClient # noqa: E402
+
+ self._prompts = PromptsClient(client_wrapper=self._client_wrapper)
+ return self._prompts
+
+ @property
+ def refresh_tokens(self):
+ if self._refresh_tokens is None:
+ from .refresh_tokens.client import RefreshTokensClient # noqa: E402
+
+ self._refresh_tokens = RefreshTokensClient(client_wrapper=self._client_wrapper)
+ return self._refresh_tokens
+
+ @property
+ def resource_servers(self):
+ if self._resource_servers is None:
+ from .resource_servers.client import ResourceServersClient # noqa: E402
+
+ self._resource_servers = ResourceServersClient(client_wrapper=self._client_wrapper)
+ return self._resource_servers
+
+ @property
+ def roles(self):
+ if self._roles is None:
+ from .roles.client import RolesClient # noqa: E402
+
+ self._roles = RolesClient(client_wrapper=self._client_wrapper)
+ return self._roles
+
+ @property
+ def rules(self):
+ if self._rules is None:
+ from .rules.client import RulesClient # noqa: E402
+
+ self._rules = RulesClient(client_wrapper=self._client_wrapper)
+ return self._rules
+
+ @property
+ def rules_configs(self):
+ if self._rules_configs is None:
+ from .rules_configs.client import RulesConfigsClient # noqa: E402
+
+ self._rules_configs = RulesConfigsClient(client_wrapper=self._client_wrapper)
+ return self._rules_configs
+
+ @property
+ def self_service_profiles(self):
+ if self._self_service_profiles is None:
+ from .self_service_profiles.client import SelfServiceProfilesClient # noqa: E402
+
+ self._self_service_profiles = SelfServiceProfilesClient(client_wrapper=self._client_wrapper)
+ return self._self_service_profiles
+
+ @property
+ def sessions(self):
+ if self._sessions is None:
+ from .sessions.client import SessionsClient # noqa: E402
+
+ self._sessions = SessionsClient(client_wrapper=self._client_wrapper)
+ return self._sessions
+
+ @property
+ def stats(self):
+ if self._stats is None:
+ from .stats.client import StatsClient # noqa: E402
+
+ self._stats = StatsClient(client_wrapper=self._client_wrapper)
+ return self._stats
+
+ @property
+ def supplemental_signals(self):
+ if self._supplemental_signals is None:
+ from .supplemental_signals.client import SupplementalSignalsClient # noqa: E402
+
+ self._supplemental_signals = SupplementalSignalsClient(client_wrapper=self._client_wrapper)
+ return self._supplemental_signals
+
+ @property
+ def tickets(self):
+ if self._tickets is None:
+ from .tickets.client import TicketsClient # noqa: E402
+
+ self._tickets = TicketsClient(client_wrapper=self._client_wrapper)
+ return self._tickets
+
+ @property
+ def token_exchange_profiles(self):
+ if self._token_exchange_profiles is None:
+ from .token_exchange_profiles.client import TokenExchangeProfilesClient # noqa: E402
+
+ self._token_exchange_profiles = TokenExchangeProfilesClient(client_wrapper=self._client_wrapper)
+ return self._token_exchange_profiles
+
+ @property
+ def user_attribute_profiles(self):
+ if self._user_attribute_profiles is None:
+ from .user_attribute_profiles.client import UserAttributeProfilesClient # noqa: E402
+
+ self._user_attribute_profiles = UserAttributeProfilesClient(client_wrapper=self._client_wrapper)
+ return self._user_attribute_profiles
+
+ @property
+ def user_blocks(self):
+ if self._user_blocks is None:
+ from .user_blocks.client import UserBlocksClient # noqa: E402
+
+ self._user_blocks = UserBlocksClient(client_wrapper=self._client_wrapper)
+ return self._user_blocks
+
+ @property
+ def users(self):
+ if self._users is None:
+ from .users.client import UsersClient # noqa: E402
+
+ self._users = UsersClient(client_wrapper=self._client_wrapper)
+ return self._users
+
+ @property
+ def anomaly(self):
+ if self._anomaly is None:
+ from .anomaly.client import AnomalyClient # noqa: E402
+
+ self._anomaly = AnomalyClient(client_wrapper=self._client_wrapper)
+ return self._anomaly
+
+ @property
+ def attack_protection(self):
+ if self._attack_protection is None:
+ from .attack_protection.client import AttackProtectionClient # noqa: E402
+
+ self._attack_protection = AttackProtectionClient(client_wrapper=self._client_wrapper)
+ return self._attack_protection
+
+ @property
+ def emails(self):
+ if self._emails is None:
+ from .emails.client import EmailsClient # noqa: E402
+
+ self._emails = EmailsClient(client_wrapper=self._client_wrapper)
+ return self._emails
+
+ @property
+ def guardian(self):
+ if self._guardian is None:
+ from .guardian.client import GuardianClient # noqa: E402
+
+ self._guardian = GuardianClient(client_wrapper=self._client_wrapper)
+ return self._guardian
+
+ @property
+ def keys(self):
+ if self._keys is None:
+ from .keys.client import KeysClient # noqa: E402
+
+ self._keys = KeysClient(client_wrapper=self._client_wrapper)
+ return self._keys
+
+ @property
+ def risk_assessments(self):
+ if self._risk_assessments is None:
+ from .risk_assessments.client import RiskAssessmentsClient # noqa: E402
+
+ self._risk_assessments = RiskAssessmentsClient(client_wrapper=self._client_wrapper)
+ return self._risk_assessments
+
+ @property
+ def tenants(self):
+ if self._tenants is None:
+ from .tenants.client import TenantsClient # noqa: E402
+
+ self._tenants = TenantsClient(client_wrapper=self._client_wrapper)
+ return self._tenants
+
+ @property
+ def verifiable_credentials(self):
+ if self._verifiable_credentials is None:
+ from .verifiable_credentials.client import VerifiableCredentialsClient # noqa: E402
+
+ self._verifiable_credentials = VerifiableCredentialsClient(client_wrapper=self._client_wrapper)
+ return self._verifiable_credentials
+
+
+class AsyncAuth0:
+ """
+ Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propagate to these functions.
+
+ Parameters
+ ----------
+ base_url : typing.Optional[str]
+ The base url to use for requests from the client.
+
+ environment : Auth0Environment
+ The environment to use for requests from the client. from .environment import Auth0Environment
+
+
+
+ Defaults to Auth0Environment.DEFAULT
+
+
+
+ token : typing.Union[str, typing.Callable[[], str]]
+ headers : typing.Optional[typing.Dict[str, str]]
+ Additional headers to send with every request.
+
+ timeout : typing.Optional[float]
+ The timeout to be used, in seconds, for requests. By default the timeout is 60 seconds, unless a custom httpx client is used, in which case this default is not enforced.
+
+ follow_redirects : typing.Optional[bool]
+ Whether the default httpx client follows redirects or not, this is irrelevant if a custom httpx client is passed in.
+
+ httpx_client : typing.Optional[httpx.AsyncClient]
+ The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration.
+
+ Examples
+ --------
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+ """
+
+ def __init__(
+ self,
+ *,
+ base_url: typing.Optional[str] = None,
+ environment: Auth0Environment = Auth0Environment.DEFAULT,
+ token: typing.Union[str, typing.Callable[[], str]],
+ headers: typing.Optional[typing.Dict[str, str]] = None,
+ timeout: typing.Optional[float] = None,
+ follow_redirects: typing.Optional[bool] = True,
+ httpx_client: typing.Optional[httpx.AsyncClient] = None,
+ ):
+ _defaulted_timeout = (
+ timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read
+ )
+ self._client_wrapper = AsyncClientWrapper(
+ base_url=_get_base_url(base_url=base_url, environment=environment),
+ token=token,
+ headers=headers,
+ httpx_client=httpx_client
+ if httpx_client is not None
+ else httpx.AsyncClient(timeout=_defaulted_timeout, follow_redirects=follow_redirects)
+ if follow_redirects is not None
+ else httpx.AsyncClient(timeout=_defaulted_timeout),
+ timeout=_defaulted_timeout,
+ )
+ self._actions: typing.Optional[AsyncActionsClient] = None
+ self._branding: typing.Optional[AsyncBrandingClient] = None
+ self._client_grants: typing.Optional[AsyncClientGrantsClient] = None
+ self._clients: typing.Optional[AsyncClientsClient] = None
+ self._connection_profiles: typing.Optional[AsyncConnectionProfilesClient] = None
+ self._connections: typing.Optional[AsyncConnectionsClient] = None
+ self._custom_domains: typing.Optional[AsyncCustomDomainsClient] = None
+ self._device_credentials: typing.Optional[AsyncDeviceCredentialsClient] = None
+ self._email_templates: typing.Optional[AsyncEmailTemplatesClient] = None
+ self._event_streams: typing.Optional[AsyncEventStreamsClient] = None
+ self._flows: typing.Optional[AsyncFlowsClient] = None
+ self._forms: typing.Optional[AsyncFormsClient] = None
+ self._user_grants: typing.Optional[AsyncUserGrantsClient] = None
+ self._hooks: typing.Optional[AsyncHooksClient] = None
+ self._jobs: typing.Optional[AsyncJobsClient] = None
+ self._log_streams: typing.Optional[AsyncLogStreamsClient] = None
+ self._logs: typing.Optional[AsyncLogsClient] = None
+ self._network_acls: typing.Optional[AsyncNetworkAclsClient] = None
+ self._organizations: typing.Optional[AsyncOrganizationsClient] = None
+ self._prompts: typing.Optional[AsyncPromptsClient] = None
+ self._refresh_tokens: typing.Optional[AsyncRefreshTokensClient] = None
+ self._resource_servers: typing.Optional[AsyncResourceServersClient] = None
+ self._roles: typing.Optional[AsyncRolesClient] = None
+ self._rules: typing.Optional[AsyncRulesClient] = None
+ self._rules_configs: typing.Optional[AsyncRulesConfigsClient] = None
+ self._self_service_profiles: typing.Optional[AsyncSelfServiceProfilesClient] = None
+ self._sessions: typing.Optional[AsyncSessionsClient] = None
+ self._stats: typing.Optional[AsyncStatsClient] = None
+ self._supplemental_signals: typing.Optional[AsyncSupplementalSignalsClient] = None
+ self._tickets: typing.Optional[AsyncTicketsClient] = None
+ self._token_exchange_profiles: typing.Optional[AsyncTokenExchangeProfilesClient] = None
+ self._user_attribute_profiles: typing.Optional[AsyncUserAttributeProfilesClient] = None
+ self._user_blocks: typing.Optional[AsyncUserBlocksClient] = None
+ self._users: typing.Optional[AsyncUsersClient] = None
+ self._anomaly: typing.Optional[AsyncAnomalyClient] = None
+ self._attack_protection: typing.Optional[AsyncAttackProtectionClient] = None
+ self._emails: typing.Optional[AsyncEmailsClient] = None
+ self._guardian: typing.Optional[AsyncGuardianClient] = None
+ self._keys: typing.Optional[AsyncKeysClient] = None
+ self._risk_assessments: typing.Optional[AsyncRiskAssessmentsClient] = None
+ self._tenants: typing.Optional[AsyncTenantsClient] = None
+ self._verifiable_credentials: typing.Optional[AsyncVerifiableCredentialsClient] = None
+
+ @property
+ def actions(self):
+ if self._actions is None:
+ from .actions.client import AsyncActionsClient # noqa: E402
+
+ self._actions = AsyncActionsClient(client_wrapper=self._client_wrapper)
+ return self._actions
+
+ @property
+ def branding(self):
+ if self._branding is None:
+ from .branding.client import AsyncBrandingClient # noqa: E402
+
+ self._branding = AsyncBrandingClient(client_wrapper=self._client_wrapper)
+ return self._branding
+
+ @property
+ def client_grants(self):
+ if self._client_grants is None:
+ from .client_grants.client import AsyncClientGrantsClient # noqa: E402
+
+ self._client_grants = AsyncClientGrantsClient(client_wrapper=self._client_wrapper)
+ return self._client_grants
+
+ @property
+ def clients(self):
+ if self._clients is None:
+ from .clients.client import AsyncClientsClient # noqa: E402
+
+ self._clients = AsyncClientsClient(client_wrapper=self._client_wrapper)
+ return self._clients
+
+ @property
+ def connection_profiles(self):
+ if self._connection_profiles is None:
+ from .connection_profiles.client import AsyncConnectionProfilesClient # noqa: E402
+
+ self._connection_profiles = AsyncConnectionProfilesClient(client_wrapper=self._client_wrapper)
+ return self._connection_profiles
+
+ @property
+ def connections(self):
+ if self._connections is None:
+ from .connections.client import AsyncConnectionsClient # noqa: E402
+
+ self._connections = AsyncConnectionsClient(client_wrapper=self._client_wrapper)
+ return self._connections
+
+ @property
+ def custom_domains(self):
+ if self._custom_domains is None:
+ from .custom_domains.client import AsyncCustomDomainsClient # noqa: E402
+
+ self._custom_domains = AsyncCustomDomainsClient(client_wrapper=self._client_wrapper)
+ return self._custom_domains
+
+ @property
+ def device_credentials(self):
+ if self._device_credentials is None:
+ from .device_credentials.client import AsyncDeviceCredentialsClient # noqa: E402
+
+ self._device_credentials = AsyncDeviceCredentialsClient(client_wrapper=self._client_wrapper)
+ return self._device_credentials
+
+ @property
+ def email_templates(self):
+ if self._email_templates is None:
+ from .email_templates.client import AsyncEmailTemplatesClient # noqa: E402
+
+ self._email_templates = AsyncEmailTemplatesClient(client_wrapper=self._client_wrapper)
+ return self._email_templates
+
+ @property
+ def event_streams(self):
+ if self._event_streams is None:
+ from .event_streams.client import AsyncEventStreamsClient # noqa: E402
+
+ self._event_streams = AsyncEventStreamsClient(client_wrapper=self._client_wrapper)
+ return self._event_streams
+
+ @property
+ def flows(self):
+ if self._flows is None:
+ from .flows.client import AsyncFlowsClient # noqa: E402
+
+ self._flows = AsyncFlowsClient(client_wrapper=self._client_wrapper)
+ return self._flows
+
+ @property
+ def forms(self):
+ if self._forms is None:
+ from .forms.client import AsyncFormsClient # noqa: E402
+
+ self._forms = AsyncFormsClient(client_wrapper=self._client_wrapper)
+ return self._forms
+
+ @property
+ def user_grants(self):
+ if self._user_grants is None:
+ from .user_grants.client import AsyncUserGrantsClient # noqa: E402
+
+ self._user_grants = AsyncUserGrantsClient(client_wrapper=self._client_wrapper)
+ return self._user_grants
+
+ @property
+ def hooks(self):
+ if self._hooks is None:
+ from .hooks.client import AsyncHooksClient # noqa: E402
+
+ self._hooks = AsyncHooksClient(client_wrapper=self._client_wrapper)
+ return self._hooks
+
+ @property
+ def jobs(self):
+ if self._jobs is None:
+ from .jobs.client import AsyncJobsClient # noqa: E402
+
+ self._jobs = AsyncJobsClient(client_wrapper=self._client_wrapper)
+ return self._jobs
+
+ @property
+ def log_streams(self):
+ if self._log_streams is None:
+ from .log_streams.client import AsyncLogStreamsClient # noqa: E402
+
+ self._log_streams = AsyncLogStreamsClient(client_wrapper=self._client_wrapper)
+ return self._log_streams
+
+ @property
+ def logs(self):
+ if self._logs is None:
+ from .logs.client import AsyncLogsClient # noqa: E402
+
+ self._logs = AsyncLogsClient(client_wrapper=self._client_wrapper)
+ return self._logs
+
+ @property
+ def network_acls(self):
+ if self._network_acls is None:
+ from .network_acls.client import AsyncNetworkAclsClient # noqa: E402
+
+ self._network_acls = AsyncNetworkAclsClient(client_wrapper=self._client_wrapper)
+ return self._network_acls
+
+ @property
+ def organizations(self):
+ if self._organizations is None:
+ from .organizations.client import AsyncOrganizationsClient # noqa: E402
+
+ self._organizations = AsyncOrganizationsClient(client_wrapper=self._client_wrapper)
+ return self._organizations
+
+ @property
+ def prompts(self):
+ if self._prompts is None:
+ from .prompts.client import AsyncPromptsClient # noqa: E402
+
+ self._prompts = AsyncPromptsClient(client_wrapper=self._client_wrapper)
+ return self._prompts
+
+ @property
+ def refresh_tokens(self):
+ if self._refresh_tokens is None:
+ from .refresh_tokens.client import AsyncRefreshTokensClient # noqa: E402
+
+ self._refresh_tokens = AsyncRefreshTokensClient(client_wrapper=self._client_wrapper)
+ return self._refresh_tokens
+
+ @property
+ def resource_servers(self):
+ if self._resource_servers is None:
+ from .resource_servers.client import AsyncResourceServersClient # noqa: E402
+
+ self._resource_servers = AsyncResourceServersClient(client_wrapper=self._client_wrapper)
+ return self._resource_servers
+
+ @property
+ def roles(self):
+ if self._roles is None:
+ from .roles.client import AsyncRolesClient # noqa: E402
+
+ self._roles = AsyncRolesClient(client_wrapper=self._client_wrapper)
+ return self._roles
+
+ @property
+ def rules(self):
+ if self._rules is None:
+ from .rules.client import AsyncRulesClient # noqa: E402
+
+ self._rules = AsyncRulesClient(client_wrapper=self._client_wrapper)
+ return self._rules
+
+ @property
+ def rules_configs(self):
+ if self._rules_configs is None:
+ from .rules_configs.client import AsyncRulesConfigsClient # noqa: E402
+
+ self._rules_configs = AsyncRulesConfigsClient(client_wrapper=self._client_wrapper)
+ return self._rules_configs
+
+ @property
+ def self_service_profiles(self):
+ if self._self_service_profiles is None:
+ from .self_service_profiles.client import AsyncSelfServiceProfilesClient # noqa: E402
+
+ self._self_service_profiles = AsyncSelfServiceProfilesClient(client_wrapper=self._client_wrapper)
+ return self._self_service_profiles
+
+ @property
+ def sessions(self):
+ if self._sessions is None:
+ from .sessions.client import AsyncSessionsClient # noqa: E402
+
+ self._sessions = AsyncSessionsClient(client_wrapper=self._client_wrapper)
+ return self._sessions
+
+ @property
+ def stats(self):
+ if self._stats is None:
+ from .stats.client import AsyncStatsClient # noqa: E402
+
+ self._stats = AsyncStatsClient(client_wrapper=self._client_wrapper)
+ return self._stats
+
+ @property
+ def supplemental_signals(self):
+ if self._supplemental_signals is None:
+ from .supplemental_signals.client import AsyncSupplementalSignalsClient # noqa: E402
+
+ self._supplemental_signals = AsyncSupplementalSignalsClient(client_wrapper=self._client_wrapper)
+ return self._supplemental_signals
+
+ @property
+ def tickets(self):
+ if self._tickets is None:
+ from .tickets.client import AsyncTicketsClient # noqa: E402
+
+ self._tickets = AsyncTicketsClient(client_wrapper=self._client_wrapper)
+ return self._tickets
+
+ @property
+ def token_exchange_profiles(self):
+ if self._token_exchange_profiles is None:
+ from .token_exchange_profiles.client import AsyncTokenExchangeProfilesClient # noqa: E402
+
+ self._token_exchange_profiles = AsyncTokenExchangeProfilesClient(client_wrapper=self._client_wrapper)
+ return self._token_exchange_profiles
+
+ @property
+ def user_attribute_profiles(self):
+ if self._user_attribute_profiles is None:
+ from .user_attribute_profiles.client import AsyncUserAttributeProfilesClient # noqa: E402
+
+ self._user_attribute_profiles = AsyncUserAttributeProfilesClient(client_wrapper=self._client_wrapper)
+ return self._user_attribute_profiles
+
+ @property
+ def user_blocks(self):
+ if self._user_blocks is None:
+ from .user_blocks.client import AsyncUserBlocksClient # noqa: E402
+
+ self._user_blocks = AsyncUserBlocksClient(client_wrapper=self._client_wrapper)
+ return self._user_blocks
+
+ @property
+ def users(self):
+ if self._users is None:
+ from .users.client import AsyncUsersClient # noqa: E402
+
+ self._users = AsyncUsersClient(client_wrapper=self._client_wrapper)
+ return self._users
+
+ @property
+ def anomaly(self):
+ if self._anomaly is None:
+ from .anomaly.client import AsyncAnomalyClient # noqa: E402
+
+ self._anomaly = AsyncAnomalyClient(client_wrapper=self._client_wrapper)
+ return self._anomaly
+
+ @property
+ def attack_protection(self):
+ if self._attack_protection is None:
+ from .attack_protection.client import AsyncAttackProtectionClient # noqa: E402
+
+ self._attack_protection = AsyncAttackProtectionClient(client_wrapper=self._client_wrapper)
+ return self._attack_protection
+
+ @property
+ def emails(self):
+ if self._emails is None:
+ from .emails.client import AsyncEmailsClient # noqa: E402
+
+ self._emails = AsyncEmailsClient(client_wrapper=self._client_wrapper)
+ return self._emails
+
+ @property
+ def guardian(self):
+ if self._guardian is None:
+ from .guardian.client import AsyncGuardianClient # noqa: E402
+
+ self._guardian = AsyncGuardianClient(client_wrapper=self._client_wrapper)
+ return self._guardian
+
+ @property
+ def keys(self):
+ if self._keys is None:
+ from .keys.client import AsyncKeysClient # noqa: E402
+
+ self._keys = AsyncKeysClient(client_wrapper=self._client_wrapper)
+ return self._keys
+
+ @property
+ def risk_assessments(self):
+ if self._risk_assessments is None:
+ from .risk_assessments.client import AsyncRiskAssessmentsClient # noqa: E402
+
+ self._risk_assessments = AsyncRiskAssessmentsClient(client_wrapper=self._client_wrapper)
+ return self._risk_assessments
+
+ @property
+ def tenants(self):
+ if self._tenants is None:
+ from .tenants.client import AsyncTenantsClient # noqa: E402
+
+ self._tenants = AsyncTenantsClient(client_wrapper=self._client_wrapper)
+ return self._tenants
+
+ @property
+ def verifiable_credentials(self):
+ if self._verifiable_credentials is None:
+ from .verifiable_credentials.client import AsyncVerifiableCredentialsClient # noqa: E402
+
+ self._verifiable_credentials = AsyncVerifiableCredentialsClient(client_wrapper=self._client_wrapper)
+ return self._verifiable_credentials
+
+
+def _get_base_url(*, base_url: typing.Optional[str] = None, environment: Auth0Environment) -> str:
+ if base_url is not None:
+ return base_url
+ elif environment is not None:
+ return environment.value
+ else:
+ raise Exception("Please pass in either base_url or environment to construct the client")
diff --git a/src/auth0/management/client_grants/__init__.py b/src/auth0/management/client_grants/__init__.py
new file mode 100644
index 00000000..f90987ed
--- /dev/null
+++ b/src/auth0/management/client_grants/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import organizations
+_dynamic_imports: typing.Dict[str, str] = {"organizations": ".organizations"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["organizations"]
diff --git a/src/auth0/management/client_grants/client.py b/src/auth0/management/client_grants/client.py
new file mode 100644
index 00000000..0620fe81
--- /dev/null
+++ b/src/auth0/management/client_grants/client.py
@@ -0,0 +1,566 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.client_grant_allow_any_organization_enum import ClientGrantAllowAnyOrganizationEnum
+from ..types.client_grant_organization_nullable_usage_enum import ClientGrantOrganizationNullableUsageEnum
+from ..types.client_grant_organization_usage_enum import ClientGrantOrganizationUsageEnum
+from ..types.client_grant_response_content import ClientGrantResponseContent
+from ..types.client_grant_subject_type_enum import ClientGrantSubjectTypeEnum
+from ..types.create_client_grant_response_content import CreateClientGrantResponseContent
+from ..types.list_client_grant_paginated_response_content import ListClientGrantPaginatedResponseContent
+from ..types.update_client_grant_response_content import UpdateClientGrantResponseContent
+from .raw_client import AsyncRawClientGrantsClient, RawClientGrantsClient
+
+if typing.TYPE_CHECKING:
+ from .organizations.client import AsyncOrganizationsClient, OrganizationsClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ClientGrantsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawClientGrantsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._organizations: typing.Optional[OrganizationsClient] = None
+
+ @property
+ def with_raw_response(self) -> RawClientGrantsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawClientGrantsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ audience: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ allow_any_organization: typing.Optional[ClientGrantAllowAnyOrganizationEnum] = None,
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ClientGrantResponseContent, ListClientGrantPaginatedResponseContent]:
+ """
+ Retrieve a list of client grants, including the scopes associated with the application/API pair.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ audience : typing.Optional[str]
+ Optional filter on audience.
+
+ client_id : typing.Optional[str]
+ Optional filter on client_id.
+
+ allow_any_organization : typing.Optional[ClientGrantAllowAnyOrganizationEnum]
+ Optional filter on allow_any_organization.
+
+ subject_type : typing.Optional[ClientGrantSubjectTypeEnum]
+ The type of application access the client grant allows. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ClientGrantResponseContent, ListClientGrantPaginatedResponseContent]
+ Client grants successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.client_grants.list(
+ from_="from",
+ take=1,
+ audience="audience",
+ client_id="client_id",
+ allow_any_organization=True,
+ subject_type="client",
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ from_=from_,
+ take=take,
+ audience=audience,
+ client_id=client_id,
+ allow_any_organization=allow_any_organization,
+ subject_type=subject_type,
+ request_options=request_options,
+ )
+
+ def create(
+ self,
+ *,
+ client_id: str,
+ audience: str,
+ organization_usage: typing.Optional[ClientGrantOrganizationUsageEnum] = OMIT,
+ allow_any_organization: typing.Optional[bool] = False,
+ scope: typing.Optional[typing.Sequence[str]] = OMIT,
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = OMIT,
+ authorization_details_types: typing.Optional[typing.Sequence[str]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateClientGrantResponseContent:
+ """
+ Create a client grant for a machine-to-machine login flow. To learn more, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ audience : str
+ The audience (API identifier) of this client grant
+
+ organization_usage : typing.Optional[ClientGrantOrganizationUsageEnum]
+
+ allow_any_organization : typing.Optional[bool]
+ If enabled, any organization can be used with this grant. If disabled (default), the grant must be explicitly assigned to the desired organizations.
+
+ scope : typing.Optional[typing.Sequence[str]]
+ Scopes allowed for this client grant.
+
+ subject_type : typing.Optional[ClientGrantSubjectTypeEnum]
+
+ authorization_details_types : typing.Optional[typing.Sequence[str]]
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateClientGrantResponseContent
+ Client grant successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.client_grants.create(
+ client_id="client_id",
+ audience="audience",
+ )
+ """
+ _response = self._raw_client.create(
+ client_id=client_id,
+ audience=audience,
+ organization_usage=organization_usage,
+ allow_any_organization=allow_any_organization,
+ scope=scope,
+ subject_type=subject_type,
+ authorization_details_types=authorization_details_types,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete the Client Credential Flow from your machine-to-machine application.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.client_grants.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ scope: typing.Optional[typing.Sequence[str]] = OMIT,
+ organization_usage: typing.Optional[ClientGrantOrganizationNullableUsageEnum] = OMIT,
+ allow_any_organization: typing.Optional[bool] = OMIT,
+ authorization_details_types: typing.Optional[typing.Sequence[str]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateClientGrantResponseContent:
+ """
+ Update a client grant.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client grant to update.
+
+ scope : typing.Optional[typing.Sequence[str]]
+ Scopes allowed for this client grant.
+
+ organization_usage : typing.Optional[ClientGrantOrganizationNullableUsageEnum]
+
+ allow_any_organization : typing.Optional[bool]
+ Controls allowing any organization to be used with this grant
+
+ authorization_details_types : typing.Optional[typing.Sequence[str]]
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateClientGrantResponseContent
+ Client grant successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.client_grants.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ scope=scope,
+ organization_usage=organization_usage,
+ allow_any_organization=allow_any_organization,
+ authorization_details_types=authorization_details_types,
+ request_options=request_options,
+ )
+ return _response.data
+
+ @property
+ def organizations(self):
+ if self._organizations is None:
+ from .organizations.client import OrganizationsClient # noqa: E402
+
+ self._organizations = OrganizationsClient(client_wrapper=self._client_wrapper)
+ return self._organizations
+
+
+class AsyncClientGrantsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawClientGrantsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._organizations: typing.Optional[AsyncOrganizationsClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawClientGrantsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawClientGrantsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ audience: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ allow_any_organization: typing.Optional[ClientGrantAllowAnyOrganizationEnum] = None,
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ClientGrantResponseContent, ListClientGrantPaginatedResponseContent]:
+ """
+ Retrieve a list of client grants, including the scopes associated with the application/API pair.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ audience : typing.Optional[str]
+ Optional filter on audience.
+
+ client_id : typing.Optional[str]
+ Optional filter on client_id.
+
+ allow_any_organization : typing.Optional[ClientGrantAllowAnyOrganizationEnum]
+ Optional filter on allow_any_organization.
+
+ subject_type : typing.Optional[ClientGrantSubjectTypeEnum]
+ The type of application access the client grant allows. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ClientGrantResponseContent, ListClientGrantPaginatedResponseContent]
+ Client grants successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.client_grants.list(
+ from_="from",
+ take=1,
+ audience="audience",
+ client_id="client_id",
+ allow_any_organization=True,
+ subject_type="client",
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ from_=from_,
+ take=take,
+ audience=audience,
+ client_id=client_id,
+ allow_any_organization=allow_any_organization,
+ subject_type=subject_type,
+ request_options=request_options,
+ )
+
+ async def create(
+ self,
+ *,
+ client_id: str,
+ audience: str,
+ organization_usage: typing.Optional[ClientGrantOrganizationUsageEnum] = OMIT,
+ allow_any_organization: typing.Optional[bool] = False,
+ scope: typing.Optional[typing.Sequence[str]] = OMIT,
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = OMIT,
+ authorization_details_types: typing.Optional[typing.Sequence[str]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateClientGrantResponseContent:
+ """
+ Create a client grant for a machine-to-machine login flow. To learn more, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ audience : str
+ The audience (API identifier) of this client grant
+
+ organization_usage : typing.Optional[ClientGrantOrganizationUsageEnum]
+
+ allow_any_organization : typing.Optional[bool]
+ If enabled, any organization can be used with this grant. If disabled (default), the grant must be explicitly assigned to the desired organizations.
+
+ scope : typing.Optional[typing.Sequence[str]]
+ Scopes allowed for this client grant.
+
+ subject_type : typing.Optional[ClientGrantSubjectTypeEnum]
+
+ authorization_details_types : typing.Optional[typing.Sequence[str]]
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateClientGrantResponseContent
+ Client grant successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.client_grants.create(
+ client_id="client_id",
+ audience="audience",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ client_id=client_id,
+ audience=audience,
+ organization_usage=organization_usage,
+ allow_any_organization=allow_any_organization,
+ scope=scope,
+ subject_type=subject_type,
+ authorization_details_types=authorization_details_types,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete the Client Credential Flow from your machine-to-machine application.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.client_grants.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ scope: typing.Optional[typing.Sequence[str]] = OMIT,
+ organization_usage: typing.Optional[ClientGrantOrganizationNullableUsageEnum] = OMIT,
+ allow_any_organization: typing.Optional[bool] = OMIT,
+ authorization_details_types: typing.Optional[typing.Sequence[str]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateClientGrantResponseContent:
+ """
+ Update a client grant.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client grant to update.
+
+ scope : typing.Optional[typing.Sequence[str]]
+ Scopes allowed for this client grant.
+
+ organization_usage : typing.Optional[ClientGrantOrganizationNullableUsageEnum]
+
+ allow_any_organization : typing.Optional[bool]
+ Controls allowing any organization to be used with this grant
+
+ authorization_details_types : typing.Optional[typing.Sequence[str]]
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateClientGrantResponseContent
+ Client grant successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.client_grants.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ scope=scope,
+ organization_usage=organization_usage,
+ allow_any_organization=allow_any_organization,
+ authorization_details_types=authorization_details_types,
+ request_options=request_options,
+ )
+ return _response.data
+
+ @property
+ def organizations(self):
+ if self._organizations is None:
+ from .organizations.client import AsyncOrganizationsClient # noqa: E402
+
+ self._organizations = AsyncOrganizationsClient(client_wrapper=self._client_wrapper)
+ return self._organizations
diff --git a/src/auth0/management/client_grants/organizations/__init__.py b/src/auth0/management/client_grants/organizations/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/client_grants/organizations/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/client_grants/organizations/client.py b/src/auth0/management/client_grants/organizations/client.py
new file mode 100644
index 00000000..2ae35c4e
--- /dev/null
+++ b/src/auth0/management/client_grants/organizations/client.py
@@ -0,0 +1,149 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.list_client_grant_organizations_paginated_response_content import (
+ ListClientGrantOrganizationsPaginatedResponseContent,
+)
+from ...types.organization import Organization
+from .raw_client import AsyncRawOrganizationsClient, RawOrganizationsClient
+
+
+class OrganizationsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawOrganizationsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawOrganizationsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawOrganizationsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Organization, ListClientGrantOrganizationsPaginatedResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+ ID of the client grant
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Organization, ListClientGrantOrganizationsPaginatedResponseContent]
+ Organizations successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.client_grants.organizations.list(
+ id="id",
+ from_="from",
+ take=1,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(id, from_=from_, take=take, request_options=request_options)
+
+
+class AsyncOrganizationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawOrganizationsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawOrganizationsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawOrganizationsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Organization, ListClientGrantOrganizationsPaginatedResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+ ID of the client grant
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Organization, ListClientGrantOrganizationsPaginatedResponseContent]
+ Organizations successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.client_grants.organizations.list(
+ id="id",
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(id, from_=from_, take=take, request_options=request_options)
diff --git a/src/auth0/management/client_grants/organizations/raw_client.py b/src/auth0/management/client_grants/organizations/raw_client.py
new file mode 100644
index 00000000..d9ed45ce
--- /dev/null
+++ b/src/auth0/management/client_grants/organizations/raw_client.py
@@ -0,0 +1,242 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.list_client_grant_organizations_paginated_response_content import (
+ ListClientGrantOrganizationsPaginatedResponseContent,
+)
+from ...types.organization import Organization
+
+
+class RawOrganizationsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Organization, ListClientGrantOrganizationsPaginatedResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+ ID of the client grant
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Organization, ListClientGrantOrganizationsPaginatedResponseContent]
+ Organizations successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"client-grants/{jsonable_encoder(id)}/organizations",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListClientGrantOrganizationsPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListClientGrantOrganizationsPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.organizations
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawOrganizationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Organization, ListClientGrantOrganizationsPaginatedResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+ ID of the client grant
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Organization, ListClientGrantOrganizationsPaginatedResponseContent]
+ Organizations successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"client-grants/{jsonable_encoder(id)}/organizations",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListClientGrantOrganizationsPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListClientGrantOrganizationsPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.organizations
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/client_grants/raw_client.py b/src/auth0/management/client_grants/raw_client.py
new file mode 100644
index 00000000..55a4b5b4
--- /dev/null
+++ b/src/auth0/management/client_grants/raw_client.py
@@ -0,0 +1,950 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.client_grant_allow_any_organization_enum import ClientGrantAllowAnyOrganizationEnum
+from ..types.client_grant_organization_nullable_usage_enum import ClientGrantOrganizationNullableUsageEnum
+from ..types.client_grant_organization_usage_enum import ClientGrantOrganizationUsageEnum
+from ..types.client_grant_response_content import ClientGrantResponseContent
+from ..types.client_grant_subject_type_enum import ClientGrantSubjectTypeEnum
+from ..types.create_client_grant_response_content import CreateClientGrantResponseContent
+from ..types.list_client_grant_paginated_response_content import ListClientGrantPaginatedResponseContent
+from ..types.update_client_grant_response_content import UpdateClientGrantResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawClientGrantsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ audience: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ allow_any_organization: typing.Optional[ClientGrantAllowAnyOrganizationEnum] = None,
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ClientGrantResponseContent, ListClientGrantPaginatedResponseContent]:
+ """
+ Retrieve a list of client grants, including the scopes associated with the application/API pair.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ audience : typing.Optional[str]
+ Optional filter on audience.
+
+ client_id : typing.Optional[str]
+ Optional filter on client_id.
+
+ allow_any_organization : typing.Optional[ClientGrantAllowAnyOrganizationEnum]
+ Optional filter on allow_any_organization.
+
+ subject_type : typing.Optional[ClientGrantSubjectTypeEnum]
+ The type of application access the client grant allows. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ClientGrantResponseContent, ListClientGrantPaginatedResponseContent]
+ Client grants successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "client-grants",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ "audience": audience,
+ "client_id": client_id,
+ "allow_any_organization": allow_any_organization,
+ "subject_type": subject_type,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListClientGrantPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListClientGrantPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.client_grants
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ from_=_parsed_next,
+ take=take,
+ audience=audience,
+ client_id=client_id,
+ allow_any_organization=allow_any_organization,
+ subject_type=subject_type,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ client_id: str,
+ audience: str,
+ organization_usage: typing.Optional[ClientGrantOrganizationUsageEnum] = OMIT,
+ allow_any_organization: typing.Optional[bool] = False,
+ scope: typing.Optional[typing.Sequence[str]] = OMIT,
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = OMIT,
+ authorization_details_types: typing.Optional[typing.Sequence[str]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateClientGrantResponseContent]:
+ """
+ Create a client grant for a machine-to-machine login flow. To learn more, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ audience : str
+ The audience (API identifier) of this client grant
+
+ organization_usage : typing.Optional[ClientGrantOrganizationUsageEnum]
+
+ allow_any_organization : typing.Optional[bool]
+ If enabled, any organization can be used with this grant. If disabled (default), the grant must be explicitly assigned to the desired organizations.
+
+ scope : typing.Optional[typing.Sequence[str]]
+ Scopes allowed for this client grant.
+
+ subject_type : typing.Optional[ClientGrantSubjectTypeEnum]
+
+ authorization_details_types : typing.Optional[typing.Sequence[str]]
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateClientGrantResponseContent]
+ Client grant successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "client-grants",
+ method="POST",
+ json={
+ "client_id": client_id,
+ "audience": audience,
+ "organization_usage": organization_usage,
+ "allow_any_organization": allow_any_organization,
+ "scope": scope,
+ "subject_type": subject_type,
+ "authorization_details_types": authorization_details_types,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateClientGrantResponseContent,
+ parse_obj_as(
+ type_=CreateClientGrantResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete the Client Credential Flow from your machine-to-machine application.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"client-grants/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ scope: typing.Optional[typing.Sequence[str]] = OMIT,
+ organization_usage: typing.Optional[ClientGrantOrganizationNullableUsageEnum] = OMIT,
+ allow_any_organization: typing.Optional[bool] = OMIT,
+ authorization_details_types: typing.Optional[typing.Sequence[str]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateClientGrantResponseContent]:
+ """
+ Update a client grant.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client grant to update.
+
+ scope : typing.Optional[typing.Sequence[str]]
+ Scopes allowed for this client grant.
+
+ organization_usage : typing.Optional[ClientGrantOrganizationNullableUsageEnum]
+
+ allow_any_organization : typing.Optional[bool]
+ Controls allowing any organization to be used with this grant
+
+ authorization_details_types : typing.Optional[typing.Sequence[str]]
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateClientGrantResponseContent]
+ Client grant successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"client-grants/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "scope": scope,
+ "organization_usage": organization_usage,
+ "allow_any_organization": allow_any_organization,
+ "authorization_details_types": authorization_details_types,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateClientGrantResponseContent,
+ parse_obj_as(
+ type_=UpdateClientGrantResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawClientGrantsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ audience: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ allow_any_organization: typing.Optional[ClientGrantAllowAnyOrganizationEnum] = None,
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ClientGrantResponseContent, ListClientGrantPaginatedResponseContent]:
+ """
+ Retrieve a list of client grants, including the scopes associated with the application/API pair.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ audience : typing.Optional[str]
+ Optional filter on audience.
+
+ client_id : typing.Optional[str]
+ Optional filter on client_id.
+
+ allow_any_organization : typing.Optional[ClientGrantAllowAnyOrganizationEnum]
+ Optional filter on allow_any_organization.
+
+ subject_type : typing.Optional[ClientGrantSubjectTypeEnum]
+ The type of application access the client grant allows. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ClientGrantResponseContent, ListClientGrantPaginatedResponseContent]
+ Client grants successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "client-grants",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ "audience": audience,
+ "client_id": client_id,
+ "allow_any_organization": allow_any_organization,
+ "subject_type": subject_type,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListClientGrantPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListClientGrantPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.client_grants
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ from_=_parsed_next,
+ take=take,
+ audience=audience,
+ client_id=client_id,
+ allow_any_organization=allow_any_organization,
+ subject_type=subject_type,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ client_id: str,
+ audience: str,
+ organization_usage: typing.Optional[ClientGrantOrganizationUsageEnum] = OMIT,
+ allow_any_organization: typing.Optional[bool] = False,
+ scope: typing.Optional[typing.Sequence[str]] = OMIT,
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = OMIT,
+ authorization_details_types: typing.Optional[typing.Sequence[str]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateClientGrantResponseContent]:
+ """
+ Create a client grant for a machine-to-machine login flow. To learn more, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ audience : str
+ The audience (API identifier) of this client grant
+
+ organization_usage : typing.Optional[ClientGrantOrganizationUsageEnum]
+
+ allow_any_organization : typing.Optional[bool]
+ If enabled, any organization can be used with this grant. If disabled (default), the grant must be explicitly assigned to the desired organizations.
+
+ scope : typing.Optional[typing.Sequence[str]]
+ Scopes allowed for this client grant.
+
+ subject_type : typing.Optional[ClientGrantSubjectTypeEnum]
+
+ authorization_details_types : typing.Optional[typing.Sequence[str]]
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateClientGrantResponseContent]
+ Client grant successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "client-grants",
+ method="POST",
+ json={
+ "client_id": client_id,
+ "audience": audience,
+ "organization_usage": organization_usage,
+ "allow_any_organization": allow_any_organization,
+ "scope": scope,
+ "subject_type": subject_type,
+ "authorization_details_types": authorization_details_types,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateClientGrantResponseContent,
+ parse_obj_as(
+ type_=CreateClientGrantResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete the Client Credential Flow from your machine-to-machine application.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"client-grants/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ scope: typing.Optional[typing.Sequence[str]] = OMIT,
+ organization_usage: typing.Optional[ClientGrantOrganizationNullableUsageEnum] = OMIT,
+ allow_any_organization: typing.Optional[bool] = OMIT,
+ authorization_details_types: typing.Optional[typing.Sequence[str]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateClientGrantResponseContent]:
+ """
+ Update a client grant.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client grant to update.
+
+ scope : typing.Optional[typing.Sequence[str]]
+ Scopes allowed for this client grant.
+
+ organization_usage : typing.Optional[ClientGrantOrganizationNullableUsageEnum]
+
+ allow_any_organization : typing.Optional[bool]
+ Controls allowing any organization to be used with this grant
+
+ authorization_details_types : typing.Optional[typing.Sequence[str]]
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateClientGrantResponseContent]
+ Client grant successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"client-grants/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "scope": scope,
+ "organization_usage": organization_usage,
+ "allow_any_organization": allow_any_organization,
+ "authorization_details_types": authorization_details_types,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateClientGrantResponseContent,
+ parse_obj_as(
+ type_=UpdateClientGrantResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/clients/__init__.py b/src/auth0/management/clients/__init__.py
new file mode 100644
index 00000000..0207f98c
--- /dev/null
+++ b/src/auth0/management/clients/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import connections, credentials
+_dynamic_imports: typing.Dict[str, str] = {"connections": ".connections", "credentials": ".credentials"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["connections", "credentials"]
diff --git a/src/auth0/management/clients/client.py b/src/auth0/management/clients/client.py
new file mode 100644
index 00000000..427f39aa
--- /dev/null
+++ b/src/auth0/management/clients/client.py
@@ -0,0 +1,1826 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.client import Client
+from ..types.client_addons import ClientAddons
+from ..types.client_app_type_enum import ClientAppTypeEnum
+from ..types.client_async_approval_notifications_channels_api_patch_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration,
+)
+from ..types.client_async_approval_notifications_channels_api_post_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration,
+)
+from ..types.client_authentication_method import ClientAuthenticationMethod
+from ..types.client_compliance_level_enum import ClientComplianceLevelEnum
+from ..types.client_create_authentication_method import ClientCreateAuthenticationMethod
+from ..types.client_default_organization import ClientDefaultOrganization
+from ..types.client_encryption_key import ClientEncryptionKey
+from ..types.client_jwt_configuration import ClientJwtConfiguration
+from ..types.client_metadata import ClientMetadata
+from ..types.client_mobile import ClientMobile
+from ..types.client_oidc_backchannel_logout_settings import ClientOidcBackchannelLogoutSettings
+from ..types.client_organization_discovery_enum import ClientOrganizationDiscoveryEnum
+from ..types.client_organization_require_behavior_enum import ClientOrganizationRequireBehaviorEnum
+from ..types.client_organization_require_behavior_patch_enum import ClientOrganizationRequireBehaviorPatchEnum
+from ..types.client_organization_usage_enum import ClientOrganizationUsageEnum
+from ..types.client_organization_usage_patch_enum import ClientOrganizationUsagePatchEnum
+from ..types.client_refresh_token_configuration import ClientRefreshTokenConfiguration
+from ..types.client_session_transfer_configuration import ClientSessionTransferConfiguration
+from ..types.client_signed_request_object_with_credential_id import ClientSignedRequestObjectWithCredentialId
+from ..types.client_signed_request_object_with_public_key import ClientSignedRequestObjectWithPublicKey
+from ..types.client_token_endpoint_auth_method_enum import ClientTokenEndpointAuthMethodEnum
+from ..types.client_token_endpoint_auth_method_or_null_enum import ClientTokenEndpointAuthMethodOrNullEnum
+from ..types.client_token_exchange_configuration import ClientTokenExchangeConfiguration
+from ..types.client_token_exchange_configuration_or_null import ClientTokenExchangeConfigurationOrNull
+from ..types.create_client_response_content import CreateClientResponseContent
+from ..types.create_token_quota import CreateTokenQuota
+from ..types.express_configuration import ExpressConfiguration
+from ..types.express_configuration_or_null import ExpressConfigurationOrNull
+from ..types.get_client_response_content import GetClientResponseContent
+from ..types.list_clients_offset_paginated_response_content import ListClientsOffsetPaginatedResponseContent
+from ..types.native_social_login import NativeSocialLogin
+from ..types.rotate_client_secret_response_content import RotateClientSecretResponseContent
+from ..types.update_client_response_content import UpdateClientResponseContent
+from ..types.update_token_quota import UpdateTokenQuota
+from .raw_client import AsyncRawClientsClient, RawClientsClient
+
+if typing.TYPE_CHECKING:
+ from .connections.client import AsyncConnectionsClient, ConnectionsClient
+ from .credentials.client import AsyncCredentialsClient, CredentialsClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ClientsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawClientsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._credentials: typing.Optional[CredentialsClient] = None
+ self._connections: typing.Optional[ConnectionsClient] = None
+
+ @property
+ def with_raw_response(self) -> RawClientsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawClientsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ is_global: typing.Optional[bool] = None,
+ is_first_party: typing.Optional[bool] = None,
+ app_type: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Client, ListClientsOffsetPaginatedResponseContent]:
+ """
+ Retrieve clients (applications and SSO integrations) matching provided filters. A list of fields to include or exclude may also be specified.
+ For more information, read Applications in Auth0 and Single Sign-On.
+
+ client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scope:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scope:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use
+ client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method
+ to configure the client with client secret (basic or post) or with no authentication method (none).
+ - When using client_authentication_methods to configure the client with Private Key JWT authentication method, specify fully defined credentials.
+ These credentials will be automatically enabled for Private Key JWT authentication on the client.
+ - To configure client_authentication_methods, the create:client_credentials scope is required.
+ - To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+
+ true to disable Single Sign On, false otherwise (default: false)
+
+ custom_login_page_on : typing.Optional[bool]
+ true if the custom login page is to be used, false otherwise. Defaults to true
+
+ custom_login_page : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page.
+
+ custom_login_page_preview : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page. (Used on Previews)
+
+ form_template : typing.Optional[str]
+ HTML form template to be used for WS-Federation.
+
+ addons : typing.Optional[ClientAddons]
+
+ client_metadata : typing.Optional[ClientMetadata]
+
+ mobile : typing.Optional[ClientMobile]
+
+ initiate_login_uri : typing.Optional[str]
+ Initiate login uri, must be https
+
+ native_social_login : typing.Optional[NativeSocialLogin]
+
+ refresh_token : typing.Optional[ClientRefreshTokenConfiguration]
+
+ default_organization : typing.Optional[ClientDefaultOrganization]
+
+ organization_usage : typing.Optional[ClientOrganizationUsageEnum]
+
+ organization_require_behavior : typing.Optional[ClientOrganizationRequireBehaviorEnum]
+
+ organization_discovery_methods : typing.Optional[typing.Sequence[ClientOrganizationDiscoveryEnum]]
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+
+ client_authentication_methods : typing.Optional[ClientCreateAuthenticationMethod]
+
+ require_pushed_authorization_requests : typing.Optional[bool]
+ Makes the use of Pushed Authorization Requests mandatory for this client
+
+ require_proof_of_possession : typing.Optional[bool]
+ Makes the use of Proof-of-Possession mandatory for this client
+
+ signed_request_object : typing.Optional[ClientSignedRequestObjectWithPublicKey]
+
+ compliance_level : typing.Optional[ClientComplianceLevelEnum]
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ token_exchange : typing.Optional[ClientTokenExchangeConfiguration]
+
+ par_request_expiry : typing.Optional[int]
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+
+ token_quota : typing.Optional[CreateTokenQuota]
+
+ resource_server_identifier : typing.Optional[str]
+ The identifier of the resource server that this client is linked to.
+
+ express_configuration : typing.Optional[ExpressConfiguration]
+
+ async_approval_notification_channels : typing.Optional[ClientAsyncApprovalNotificationsChannelsApiPostConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateClientResponseContent
+ Client successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.clients.create(
+ name="name",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name,
+ description=description,
+ logo_uri=logo_uri,
+ callbacks=callbacks,
+ oidc_logout=oidc_logout,
+ oidc_backchannel_logout=oidc_backchannel_logout,
+ session_transfer=session_transfer,
+ allowed_origins=allowed_origins,
+ web_origins=web_origins,
+ client_aliases=client_aliases,
+ allowed_clients=allowed_clients,
+ allowed_logout_urls=allowed_logout_urls,
+ grant_types=grant_types,
+ token_endpoint_auth_method=token_endpoint_auth_method,
+ is_token_endpoint_ip_header_trusted=is_token_endpoint_ip_header_trusted,
+ app_type=app_type,
+ is_first_party=is_first_party,
+ oidc_conformant=oidc_conformant,
+ jwt_configuration=jwt_configuration,
+ encryption_key=encryption_key,
+ sso=sso,
+ cross_origin_authentication=cross_origin_authentication,
+ cross_origin_loc=cross_origin_loc,
+ sso_disabled=sso_disabled,
+ custom_login_page_on=custom_login_page_on,
+ custom_login_page=custom_login_page,
+ custom_login_page_preview=custom_login_page_preview,
+ form_template=form_template,
+ addons=addons,
+ client_metadata=client_metadata,
+ mobile=mobile,
+ initiate_login_uri=initiate_login_uri,
+ native_social_login=native_social_login,
+ refresh_token=refresh_token,
+ default_organization=default_organization,
+ organization_usage=organization_usage,
+ organization_require_behavior=organization_require_behavior,
+ organization_discovery_methods=organization_discovery_methods,
+ client_authentication_methods=client_authentication_methods,
+ require_pushed_authorization_requests=require_pushed_authorization_requests,
+ require_proof_of_possession=require_proof_of_possession,
+ signed_request_object=signed_request_object,
+ compliance_level=compliance_level,
+ skip_non_verifiable_callback_uri_confirmation_prompt=skip_non_verifiable_callback_uri_confirmation_prompt,
+ token_exchange=token_exchange,
+ par_request_expiry=par_request_expiry,
+ token_quota=token_quota,
+ resource_server_identifier=resource_server_identifier,
+ express_configuration=express_configuration,
+ async_approval_notification_channels=async_approval_notification_channels,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetClientResponseContent:
+ """
+ Retrieve client details by ID. Clients are SSO connections or Applications linked with your Auth0 tenant. A list of fields to include or exclude may also be specified.
+ For more information, read Applications in Auth0 and Single Sign-On.
+ client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scopes:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scopes:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method to configure the client with client secret (basic or post) or with no authentication method (none).
+ - When using client_authentication_methods to configure the client with Private Key JWT authentication method, only specify the credential IDs that were generated when creating the credentials on the client.
+ - To configure client_authentication_methods, the update:client_credentials scope is required.
+ - To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+ - To change a client's is_first_party property to false, the organization_usage and organization_require_behavior properties must be unset.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client to update.
+
+ name : typing.Optional[str]
+ The name of the client. Must contain at least one character. Does not allow '<' or '>'.
+
+ description : typing.Optional[str]
+ Free text description of the purpose of the Client. (Max character length: 140)
+
+ client_secret : typing.Optional[str]
+ The secret used to sign tokens for the client
+
+ logo_uri : typing.Optional[str]
+ The URL of the client logo (recommended size: 150x150)
+
+ callbacks : typing.Optional[typing.Sequence[str]]
+ A set of URLs that are valid to call back from Auth0 when authenticating users
+
+ oidc_logout : typing.Optional[ClientOidcBackchannelLogoutSettings]
+
+ oidc_backchannel_logout : typing.Optional[ClientOidcBackchannelLogoutSettings]
+
+ session_transfer : typing.Optional[ClientSessionTransferConfiguration]
+
+ allowed_origins : typing.Optional[typing.Sequence[str]]
+ A set of URLs that represents valid origins for CORS
+
+ web_origins : typing.Optional[typing.Sequence[str]]
+ A set of URLs that represents valid web origins for use with web message response mode
+
+ grant_types : typing.Optional[typing.Sequence[str]]
+ A set of grant types that the client is authorized to use. Can include `authorization_code`, `implicit`, `refresh_token`, `client_credentials`, `password`, `http://auth0.com/oauth/grant-type/password-realm`, `http://auth0.com/oauth/grant-type/mfa-oob`, `http://auth0.com/oauth/grant-type/mfa-otp`, `http://auth0.com/oauth/grant-type/mfa-recovery-code`, `urn:openid:params:grant-type:ciba`, `urn:ietf:params:oauth:grant-type:device_code`, and `urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token`.
+
+ client_aliases : typing.Optional[typing.Sequence[str]]
+ List of audiences for SAML protocol
+
+ allowed_clients : typing.Optional[typing.Sequence[str]]
+ Ids of clients that will be allowed to perform delegation requests. Clients that will be allowed to make delegation request. By default, all your clients will be allowed. This field allows you to specify specific clients
+
+ allowed_logout_urls : typing.Optional[typing.Sequence[str]]
+ URLs that are valid to redirect to after logout from Auth0.
+
+ jwt_configuration : typing.Optional[ClientJwtConfiguration]
+
+ encryption_key : typing.Optional[ClientEncryptionKey]
+
+ sso : typing.Optional[bool]
+ true to use Auth0 instead of the IdP to do Single Sign On, false otherwise (default: false)
+
+ cross_origin_authentication : typing.Optional[bool]
+ true if this client can be used to make cross-origin authentication requests, false otherwise if cross origin is disabled
+
+ cross_origin_loc : typing.Optional[str]
+ URL for the location in your site where the cross origin verification takes place for the cross-origin auth flow when performing Auth in your own domain instead of Auth0 hosted login page.
+
+ sso_disabled : typing.Optional[bool]
+ true to disable Single Sign On, false otherwise (default: false)
+
+ custom_login_page_on : typing.Optional[bool]
+ true if the custom login page is to be used, false otherwise.
+
+ token_endpoint_auth_method : typing.Optional[ClientTokenEndpointAuthMethodOrNullEnum]
+
+ is_token_endpoint_ip_header_trusted : typing.Optional[bool]
+ If true, trust that the IP specified in the `auth0-forwarded-for` header is the end-user's IP for brute-force-protection on token endpoint.
+
+ app_type : typing.Optional[ClientAppTypeEnum]
+
+ is_first_party : typing.Optional[bool]
+ Whether this client a first party client or not
+
+ oidc_conformant : typing.Optional[bool]
+ Whether this client will conform to strict OIDC specifications
+
+ custom_login_page : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page
+
+ custom_login_page_preview : typing.Optional[str]
+
+ token_quota : typing.Optional[UpdateTokenQuota]
+
+ form_template : typing.Optional[str]
+ Form template for WS-Federation protocol
+
+ addons : typing.Optional[ClientAddons]
+
+ client_metadata : typing.Optional[ClientMetadata]
+
+ mobile : typing.Optional[ClientMobile]
+
+ initiate_login_uri : typing.Optional[str]
+ Initiate login uri, must be https
+
+ native_social_login : typing.Optional[NativeSocialLogin]
+
+ refresh_token : typing.Optional[ClientRefreshTokenConfiguration]
+
+ default_organization : typing.Optional[ClientDefaultOrganization]
+
+ organization_usage : typing.Optional[ClientOrganizationUsagePatchEnum]
+
+ organization_require_behavior : typing.Optional[ClientOrganizationRequireBehaviorPatchEnum]
+
+ organization_discovery_methods : typing.Optional[typing.Sequence[ClientOrganizationDiscoveryEnum]]
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+
+ client_authentication_methods : typing.Optional[ClientAuthenticationMethod]
+
+ require_pushed_authorization_requests : typing.Optional[bool]
+ Makes the use of Pushed Authorization Requests mandatory for this client
+
+ require_proof_of_possession : typing.Optional[bool]
+ Makes the use of Proof-of-Possession mandatory for this client
+
+ signed_request_object : typing.Optional[ClientSignedRequestObjectWithCredentialId]
+
+ compliance_level : typing.Optional[ClientComplianceLevelEnum]
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ token_exchange : typing.Optional[ClientTokenExchangeConfigurationOrNull]
+
+ par_request_expiry : typing.Optional[int]
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+
+ express_configuration : typing.Optional[ExpressConfigurationOrNull]
+
+ async_approval_notification_channels : typing.Optional[ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateClientResponseContent
+ Client successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.clients.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ name=name,
+ description=description,
+ client_secret=client_secret,
+ logo_uri=logo_uri,
+ callbacks=callbacks,
+ oidc_logout=oidc_logout,
+ oidc_backchannel_logout=oidc_backchannel_logout,
+ session_transfer=session_transfer,
+ allowed_origins=allowed_origins,
+ web_origins=web_origins,
+ grant_types=grant_types,
+ client_aliases=client_aliases,
+ allowed_clients=allowed_clients,
+ allowed_logout_urls=allowed_logout_urls,
+ jwt_configuration=jwt_configuration,
+ encryption_key=encryption_key,
+ sso=sso,
+ cross_origin_authentication=cross_origin_authentication,
+ cross_origin_loc=cross_origin_loc,
+ sso_disabled=sso_disabled,
+ custom_login_page_on=custom_login_page_on,
+ token_endpoint_auth_method=token_endpoint_auth_method,
+ is_token_endpoint_ip_header_trusted=is_token_endpoint_ip_header_trusted,
+ app_type=app_type,
+ is_first_party=is_first_party,
+ oidc_conformant=oidc_conformant,
+ custom_login_page=custom_login_page,
+ custom_login_page_preview=custom_login_page_preview,
+ token_quota=token_quota,
+ form_template=form_template,
+ addons=addons,
+ client_metadata=client_metadata,
+ mobile=mobile,
+ initiate_login_uri=initiate_login_uri,
+ native_social_login=native_social_login,
+ refresh_token=refresh_token,
+ default_organization=default_organization,
+ organization_usage=organization_usage,
+ organization_require_behavior=organization_require_behavior,
+ organization_discovery_methods=organization_discovery_methods,
+ client_authentication_methods=client_authentication_methods,
+ require_pushed_authorization_requests=require_pushed_authorization_requests,
+ require_proof_of_possession=require_proof_of_possession,
+ signed_request_object=signed_request_object,
+ compliance_level=compliance_level,
+ skip_non_verifiable_callback_uri_confirmation_prompt=skip_non_verifiable_callback_uri_confirmation_prompt,
+ token_exchange=token_exchange,
+ par_request_expiry=par_request_expiry,
+ express_configuration=express_configuration,
+ async_approval_notification_channels=async_approval_notification_channels,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def rotate_secret(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RotateClientSecretResponseContent:
+ """
+ Rotate a client secret.
+
+ This endpoint cannot be used with clients configured with Private Key JWT authentication method (client_authentication_methods configured with private_key_jwt). The generated secret is NOT base64 encoded.
+
+ For more information, read Rotate Client Secrets.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client that will rotate secrets.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RotateClientSecretResponseContent
+ Secret successfully rotated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.clients.rotate_secret(
+ id="id",
+ )
+ """
+ _response = self._raw_client.rotate_secret(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def credentials(self):
+ if self._credentials is None:
+ from .credentials.client import CredentialsClient # noqa: E402
+
+ self._credentials = CredentialsClient(client_wrapper=self._client_wrapper)
+ return self._credentials
+
+ @property
+ def connections(self):
+ if self._connections is None:
+ from .connections.client import ConnectionsClient # noqa: E402
+
+ self._connections = ConnectionsClient(client_wrapper=self._client_wrapper)
+ return self._connections
+
+
+class AsyncClientsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawClientsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._credentials: typing.Optional[AsyncCredentialsClient] = None
+ self._connections: typing.Optional[AsyncConnectionsClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawClientsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawClientsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ is_global: typing.Optional[bool] = None,
+ is_first_party: typing.Optional[bool] = None,
+ app_type: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Client, ListClientsOffsetPaginatedResponseContent]:
+ """
+ Retrieve clients (applications and SSO integrations) matching provided filters. A list of fields to include or exclude may also be specified.
+ For more information, read Applications in Auth0 and Single Sign-On.
+
+ client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scope:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scope:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use
+ client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method
+ to configure the client with client secret (basic or post) or with no authentication method (none).
+ - When using client_authentication_methods to configure the client with Private Key JWT authentication method, specify fully defined credentials.
+ These credentials will be automatically enabled for Private Key JWT authentication on the client.
+ - To configure client_authentication_methods, the create:client_credentials scope is required.
+ - To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+
+ true to disable Single Sign On, false otherwise (default: false)
+
+ custom_login_page_on : typing.Optional[bool]
+ true if the custom login page is to be used, false otherwise. Defaults to true
+
+ custom_login_page : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page.
+
+ custom_login_page_preview : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page. (Used on Previews)
+
+ form_template : typing.Optional[str]
+ HTML form template to be used for WS-Federation.
+
+ addons : typing.Optional[ClientAddons]
+
+ client_metadata : typing.Optional[ClientMetadata]
+
+ mobile : typing.Optional[ClientMobile]
+
+ initiate_login_uri : typing.Optional[str]
+ Initiate login uri, must be https
+
+ native_social_login : typing.Optional[NativeSocialLogin]
+
+ refresh_token : typing.Optional[ClientRefreshTokenConfiguration]
+
+ default_organization : typing.Optional[ClientDefaultOrganization]
+
+ organization_usage : typing.Optional[ClientOrganizationUsageEnum]
+
+ organization_require_behavior : typing.Optional[ClientOrganizationRequireBehaviorEnum]
+
+ organization_discovery_methods : typing.Optional[typing.Sequence[ClientOrganizationDiscoveryEnum]]
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+
+ client_authentication_methods : typing.Optional[ClientCreateAuthenticationMethod]
+
+ require_pushed_authorization_requests : typing.Optional[bool]
+ Makes the use of Pushed Authorization Requests mandatory for this client
+
+ require_proof_of_possession : typing.Optional[bool]
+ Makes the use of Proof-of-Possession mandatory for this client
+
+ signed_request_object : typing.Optional[ClientSignedRequestObjectWithPublicKey]
+
+ compliance_level : typing.Optional[ClientComplianceLevelEnum]
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ token_exchange : typing.Optional[ClientTokenExchangeConfiguration]
+
+ par_request_expiry : typing.Optional[int]
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+
+ token_quota : typing.Optional[CreateTokenQuota]
+
+ resource_server_identifier : typing.Optional[str]
+ The identifier of the resource server that this client is linked to.
+
+ express_configuration : typing.Optional[ExpressConfiguration]
+
+ async_approval_notification_channels : typing.Optional[ClientAsyncApprovalNotificationsChannelsApiPostConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateClientResponseContent
+ Client successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.clients.create(
+ name="name",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name,
+ description=description,
+ logo_uri=logo_uri,
+ callbacks=callbacks,
+ oidc_logout=oidc_logout,
+ oidc_backchannel_logout=oidc_backchannel_logout,
+ session_transfer=session_transfer,
+ allowed_origins=allowed_origins,
+ web_origins=web_origins,
+ client_aliases=client_aliases,
+ allowed_clients=allowed_clients,
+ allowed_logout_urls=allowed_logout_urls,
+ grant_types=grant_types,
+ token_endpoint_auth_method=token_endpoint_auth_method,
+ is_token_endpoint_ip_header_trusted=is_token_endpoint_ip_header_trusted,
+ app_type=app_type,
+ is_first_party=is_first_party,
+ oidc_conformant=oidc_conformant,
+ jwt_configuration=jwt_configuration,
+ encryption_key=encryption_key,
+ sso=sso,
+ cross_origin_authentication=cross_origin_authentication,
+ cross_origin_loc=cross_origin_loc,
+ sso_disabled=sso_disabled,
+ custom_login_page_on=custom_login_page_on,
+ custom_login_page=custom_login_page,
+ custom_login_page_preview=custom_login_page_preview,
+ form_template=form_template,
+ addons=addons,
+ client_metadata=client_metadata,
+ mobile=mobile,
+ initiate_login_uri=initiate_login_uri,
+ native_social_login=native_social_login,
+ refresh_token=refresh_token,
+ default_organization=default_organization,
+ organization_usage=organization_usage,
+ organization_require_behavior=organization_require_behavior,
+ organization_discovery_methods=organization_discovery_methods,
+ client_authentication_methods=client_authentication_methods,
+ require_pushed_authorization_requests=require_pushed_authorization_requests,
+ require_proof_of_possession=require_proof_of_possession,
+ signed_request_object=signed_request_object,
+ compliance_level=compliance_level,
+ skip_non_verifiable_callback_uri_confirmation_prompt=skip_non_verifiable_callback_uri_confirmation_prompt,
+ token_exchange=token_exchange,
+ par_request_expiry=par_request_expiry,
+ token_quota=token_quota,
+ resource_server_identifier=resource_server_identifier,
+ express_configuration=express_configuration,
+ async_approval_notification_channels=async_approval_notification_channels,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetClientResponseContent:
+ """
+ Retrieve client details by ID. Clients are SSO connections or Applications linked with your Auth0 tenant. A list of fields to include or exclude may also be specified.
+ For more information, read Applications in Auth0 and Single Sign-On.
+ client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scopes:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scopes:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method to configure the client with client secret (basic or post) or with no authentication method (none).
+ - When using client_authentication_methods to configure the client with Private Key JWT authentication method, only specify the credential IDs that were generated when creating the credentials on the client.
+ - To configure client_authentication_methods, the update:client_credentials scope is required.
+ - To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+ - To change a client's is_first_party property to false, the organization_usage and organization_require_behavior properties must be unset.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client to update.
+
+ name : typing.Optional[str]
+ The name of the client. Must contain at least one character. Does not allow '<' or '>'.
+
+ description : typing.Optional[str]
+ Free text description of the purpose of the Client. (Max character length: 140)
+
+ client_secret : typing.Optional[str]
+ The secret used to sign tokens for the client
+
+ logo_uri : typing.Optional[str]
+ The URL of the client logo (recommended size: 150x150)
+
+ callbacks : typing.Optional[typing.Sequence[str]]
+ A set of URLs that are valid to call back from Auth0 when authenticating users
+
+ oidc_logout : typing.Optional[ClientOidcBackchannelLogoutSettings]
+
+ oidc_backchannel_logout : typing.Optional[ClientOidcBackchannelLogoutSettings]
+
+ session_transfer : typing.Optional[ClientSessionTransferConfiguration]
+
+ allowed_origins : typing.Optional[typing.Sequence[str]]
+ A set of URLs that represents valid origins for CORS
+
+ web_origins : typing.Optional[typing.Sequence[str]]
+ A set of URLs that represents valid web origins for use with web message response mode
+
+ grant_types : typing.Optional[typing.Sequence[str]]
+ A set of grant types that the client is authorized to use. Can include `authorization_code`, `implicit`, `refresh_token`, `client_credentials`, `password`, `http://auth0.com/oauth/grant-type/password-realm`, `http://auth0.com/oauth/grant-type/mfa-oob`, `http://auth0.com/oauth/grant-type/mfa-otp`, `http://auth0.com/oauth/grant-type/mfa-recovery-code`, `urn:openid:params:grant-type:ciba`, `urn:ietf:params:oauth:grant-type:device_code`, and `urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token`.
+
+ client_aliases : typing.Optional[typing.Sequence[str]]
+ List of audiences for SAML protocol
+
+ allowed_clients : typing.Optional[typing.Sequence[str]]
+ Ids of clients that will be allowed to perform delegation requests. Clients that will be allowed to make delegation request. By default, all your clients will be allowed. This field allows you to specify specific clients
+
+ allowed_logout_urls : typing.Optional[typing.Sequence[str]]
+ URLs that are valid to redirect to after logout from Auth0.
+
+ jwt_configuration : typing.Optional[ClientJwtConfiguration]
+
+ encryption_key : typing.Optional[ClientEncryptionKey]
+
+ sso : typing.Optional[bool]
+ true to use Auth0 instead of the IdP to do Single Sign On, false otherwise (default: false)
+
+ cross_origin_authentication : typing.Optional[bool]
+ true if this client can be used to make cross-origin authentication requests, false otherwise if cross origin is disabled
+
+ cross_origin_loc : typing.Optional[str]
+ URL for the location in your site where the cross origin verification takes place for the cross-origin auth flow when performing Auth in your own domain instead of Auth0 hosted login page.
+
+ sso_disabled : typing.Optional[bool]
+ true to disable Single Sign On, false otherwise (default: false)
+
+ custom_login_page_on : typing.Optional[bool]
+ true if the custom login page is to be used, false otherwise.
+
+ token_endpoint_auth_method : typing.Optional[ClientTokenEndpointAuthMethodOrNullEnum]
+
+ is_token_endpoint_ip_header_trusted : typing.Optional[bool]
+ If true, trust that the IP specified in the `auth0-forwarded-for` header is the end-user's IP for brute-force-protection on token endpoint.
+
+ app_type : typing.Optional[ClientAppTypeEnum]
+
+ is_first_party : typing.Optional[bool]
+ Whether this client a first party client or not
+
+ oidc_conformant : typing.Optional[bool]
+ Whether this client will conform to strict OIDC specifications
+
+ custom_login_page : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page
+
+ custom_login_page_preview : typing.Optional[str]
+
+ token_quota : typing.Optional[UpdateTokenQuota]
+
+ form_template : typing.Optional[str]
+ Form template for WS-Federation protocol
+
+ addons : typing.Optional[ClientAddons]
+
+ client_metadata : typing.Optional[ClientMetadata]
+
+ mobile : typing.Optional[ClientMobile]
+
+ initiate_login_uri : typing.Optional[str]
+ Initiate login uri, must be https
+
+ native_social_login : typing.Optional[NativeSocialLogin]
+
+ refresh_token : typing.Optional[ClientRefreshTokenConfiguration]
+
+ default_organization : typing.Optional[ClientDefaultOrganization]
+
+ organization_usage : typing.Optional[ClientOrganizationUsagePatchEnum]
+
+ organization_require_behavior : typing.Optional[ClientOrganizationRequireBehaviorPatchEnum]
+
+ organization_discovery_methods : typing.Optional[typing.Sequence[ClientOrganizationDiscoveryEnum]]
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+
+ client_authentication_methods : typing.Optional[ClientAuthenticationMethod]
+
+ require_pushed_authorization_requests : typing.Optional[bool]
+ Makes the use of Pushed Authorization Requests mandatory for this client
+
+ require_proof_of_possession : typing.Optional[bool]
+ Makes the use of Proof-of-Possession mandatory for this client
+
+ signed_request_object : typing.Optional[ClientSignedRequestObjectWithCredentialId]
+
+ compliance_level : typing.Optional[ClientComplianceLevelEnum]
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ token_exchange : typing.Optional[ClientTokenExchangeConfigurationOrNull]
+
+ par_request_expiry : typing.Optional[int]
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+
+ express_configuration : typing.Optional[ExpressConfigurationOrNull]
+
+ async_approval_notification_channels : typing.Optional[ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateClientResponseContent
+ Client successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.clients.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ name=name,
+ description=description,
+ client_secret=client_secret,
+ logo_uri=logo_uri,
+ callbacks=callbacks,
+ oidc_logout=oidc_logout,
+ oidc_backchannel_logout=oidc_backchannel_logout,
+ session_transfer=session_transfer,
+ allowed_origins=allowed_origins,
+ web_origins=web_origins,
+ grant_types=grant_types,
+ client_aliases=client_aliases,
+ allowed_clients=allowed_clients,
+ allowed_logout_urls=allowed_logout_urls,
+ jwt_configuration=jwt_configuration,
+ encryption_key=encryption_key,
+ sso=sso,
+ cross_origin_authentication=cross_origin_authentication,
+ cross_origin_loc=cross_origin_loc,
+ sso_disabled=sso_disabled,
+ custom_login_page_on=custom_login_page_on,
+ token_endpoint_auth_method=token_endpoint_auth_method,
+ is_token_endpoint_ip_header_trusted=is_token_endpoint_ip_header_trusted,
+ app_type=app_type,
+ is_first_party=is_first_party,
+ oidc_conformant=oidc_conformant,
+ custom_login_page=custom_login_page,
+ custom_login_page_preview=custom_login_page_preview,
+ token_quota=token_quota,
+ form_template=form_template,
+ addons=addons,
+ client_metadata=client_metadata,
+ mobile=mobile,
+ initiate_login_uri=initiate_login_uri,
+ native_social_login=native_social_login,
+ refresh_token=refresh_token,
+ default_organization=default_organization,
+ organization_usage=organization_usage,
+ organization_require_behavior=organization_require_behavior,
+ organization_discovery_methods=organization_discovery_methods,
+ client_authentication_methods=client_authentication_methods,
+ require_pushed_authorization_requests=require_pushed_authorization_requests,
+ require_proof_of_possession=require_proof_of_possession,
+ signed_request_object=signed_request_object,
+ compliance_level=compliance_level,
+ skip_non_verifiable_callback_uri_confirmation_prompt=skip_non_verifiable_callback_uri_confirmation_prompt,
+ token_exchange=token_exchange,
+ par_request_expiry=par_request_expiry,
+ express_configuration=express_configuration,
+ async_approval_notification_channels=async_approval_notification_channels,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def rotate_secret(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RotateClientSecretResponseContent:
+ """
+ Rotate a client secret.
+
+ This endpoint cannot be used with clients configured with Private Key JWT authentication method (client_authentication_methods configured with private_key_jwt). The generated secret is NOT base64 encoded.
+
+ For more information, read Rotate Client Secrets.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client that will rotate secrets.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RotateClientSecretResponseContent
+ Secret successfully rotated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.clients.rotate_secret(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.rotate_secret(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def credentials(self):
+ if self._credentials is None:
+ from .credentials.client import AsyncCredentialsClient # noqa: E402
+
+ self._credentials = AsyncCredentialsClient(client_wrapper=self._client_wrapper)
+ return self._credentials
+
+ @property
+ def connections(self):
+ if self._connections is None:
+ from .connections.client import AsyncConnectionsClient # noqa: E402
+
+ self._connections = AsyncConnectionsClient(client_wrapper=self._client_wrapper)
+ return self._connections
diff --git a/src/auth0/management/clients/connections/__init__.py b/src/auth0/management/clients/connections/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/clients/connections/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/clients/connections/client.py b/src/auth0/management/clients/connections/client.py
new file mode 100644
index 00000000..97e79a8f
--- /dev/null
+++ b/src/auth0/management/clients/connections/client.py
@@ -0,0 +1,212 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.connection_for_list import ConnectionForList
+from ...types.connection_strategy_enum import ConnectionStrategyEnum
+from ...types.list_client_connections_response_content import ListClientConnectionsResponseContent
+from .raw_client import AsyncRawConnectionsClient, RawConnectionsClient
+
+
+class ConnectionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawConnectionsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawConnectionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawConnectionsClient
+ """
+ return self._raw_client
+
+ def get(
+ self,
+ id: str,
+ *,
+ strategy: typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]] = None,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectionForList, ListClientConnectionsResponseContent]:
+ """
+ Retrieve all connections that are enabled for the specified Application, using checkpoint pagination. A list of fields to include or exclude for each connection may also be specified.
+ read:connections scope and any one of read:clients or read:client_summary.
+ from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectionForList, ListClientConnectionsResponseContent]
+ Success
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.clients.connections.get(
+ id="id",
+ from_="from",
+ take=1,
+ fields="fields",
+ include_fields=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.get(
+ id,
+ strategy=strategy,
+ from_=from_,
+ take=take,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+
+
+class AsyncConnectionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawConnectionsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawConnectionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawConnectionsClient
+ """
+ return self._raw_client
+
+ async def get(
+ self,
+ id: str,
+ *,
+ strategy: typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]] = None,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectionForList, ListClientConnectionsResponseContent]:
+ """
+ Retrieve all connections that are enabled for the specified Application, using checkpoint pagination. A list of fields to include or exclude for each connection may also be specified.
+ read:connections scope and any one of read:clients or read:client_summary.
+ from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectionForList, ListClientConnectionsResponseContent]
+ Success
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.clients.connections.get(
+ id="id",
+ from_="from",
+ take=1,
+ fields="fields",
+ include_fields=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.get(
+ id,
+ strategy=strategy,
+ from_=from_,
+ take=take,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
diff --git a/src/auth0/management/clients/connections/raw_client.py b/src/auth0/management/clients/connections/raw_client.py
new file mode 100644
index 00000000..42746604
--- /dev/null
+++ b/src/auth0/management/clients/connections/raw_client.py
@@ -0,0 +1,320 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.connection_for_list import ConnectionForList
+from ...types.connection_strategy_enum import ConnectionStrategyEnum
+from ...types.list_client_connections_response_content import ListClientConnectionsResponseContent
+
+
+class RawConnectionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self,
+ id: str,
+ *,
+ strategy: typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]] = None,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectionForList, ListClientConnectionsResponseContent]:
+ """
+ Retrieve all connections that are enabled for the specified Application, using checkpoint pagination. A list of fields to include or exclude for each connection may also be specified.
+ read:connections scope and any one of read:clients or read:client_summary.
+ from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectionForList, ListClientConnectionsResponseContent]
+ Success
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(id)}/connections",
+ method="GET",
+ params={
+ "strategy": strategy,
+ "from": from_,
+ "take": take,
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListClientConnectionsResponseContent,
+ parse_obj_as(
+ type_=ListClientConnectionsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.connections
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.get(
+ id,
+ strategy=strategy,
+ from_=_parsed_next,
+ take=take,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawConnectionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self,
+ id: str,
+ *,
+ strategy: typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]] = None,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectionForList, ListClientConnectionsResponseContent]:
+ """
+ Retrieve all connections that are enabled for the specified Application, using checkpoint pagination. A list of fields to include or exclude for each connection may also be specified.
+ read:connections scope and any one of read:clients or read:client_summary.
+ from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectionForList, ListClientConnectionsResponseContent]
+ Success
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(id)}/connections",
+ method="GET",
+ params={
+ "strategy": strategy,
+ "from": from_,
+ "take": take,
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListClientConnectionsResponseContent,
+ parse_obj_as(
+ type_=ListClientConnectionsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.connections
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.get(
+ id,
+ strategy=strategy,
+ from_=_parsed_next,
+ take=take,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/clients/credentials/__init__.py b/src/auth0/management/clients/credentials/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/clients/credentials/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/clients/credentials/client.py b/src/auth0/management/clients/credentials/client.py
new file mode 100644
index 00000000..f9c5eeac
--- /dev/null
+++ b/src/auth0/management/clients/credentials/client.py
@@ -0,0 +1,613 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.client_credential import ClientCredential
+from ...types.client_credential_type_enum import ClientCredentialTypeEnum
+from ...types.get_client_credential_response_content import GetClientCredentialResponseContent
+from ...types.patch_client_credential_response_content import PatchClientCredentialResponseContent
+from ...types.post_client_credential_response_content import PostClientCredentialResponseContent
+from ...types.public_key_credential_algorithm_enum import PublicKeyCredentialAlgorithmEnum
+from .raw_client import AsyncRawCredentialsClient, RawCredentialsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class CredentialsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawCredentialsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawCredentialsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawCredentialsClient
+ """
+ return self._raw_client
+
+ def list(
+ self, client_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[ClientCredential]:
+ """
+ Get the details of a client credential.
+
+ Important: To enable credentials to be used for a client authentication method, set the client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[ClientCredential]
+ Credentials successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.clients.credentials.list(
+ client_id="client_id",
+ )
+ """
+ _response = self._raw_client.list(client_id, request_options=request_options)
+ return _response.data
+
+ def create(
+ self,
+ client_id: str,
+ *,
+ credential_type: ClientCredentialTypeEnum,
+ name: typing.Optional[str] = "",
+ subject_dn: typing.Optional[str] = OMIT,
+ pem: typing.Optional[str] = "-----BEGIN PUBLIC KEY-----\r\nMIIBIjANBg...\r\n-----END PUBLIC KEY-----\r\n",
+ alg: typing.Optional[PublicKeyCredentialAlgorithmEnum] = OMIT,
+ parse_expiry_from_cert: typing.Optional[bool] = False,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> PostClientCredentialResponseContent:
+ """
+ Create a client credential associated to your application. Credentials can be used to configure Private Key JWT and mTLS authentication methods, as well as for JWT-secured Authorization requests.
+
+ {
+ "credential_type": "public_key",
+ "name": "string",
+ "pem": "string",
+ "alg": "RS256",
+ "parse_expiry_from_cert": false,
+ "expires_at": "2022-12-31T23:59:59Z"
+ }
+ {
+ "credential_type": "x509_cert",
+ "name": "string",
+ "pem": "string"
+ }CA-signed Certificate Sample (subject_dn): {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "subject_dn": "string"
+ }Self-signed Certificate Sample: {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "pem": "string"
+ }
+
+ The credential will be created but not yet enabled for use until you set the corresponding properties in the client:
+ client_authentication_methods property on the client. For more information, read Configure Private Key JWT Authentication and Configure mTLS Authenticationsigned_request_objectproperty on the client. For more information, read Configure JWT-secured Authorization Requests (JAR)client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetClientCredentialResponseContent
+ Credential successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.clients.credentials.get(
+ client_id="client_id",
+ credential_id="credential_id",
+ )
+ """
+ _response = self._raw_client.get(client_id, credential_id, request_options=request_options)
+ return _response.data
+
+ def delete(
+ self, client_id: str, credential_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Delete a client credential you previously created. May be enabled or disabled. For more information, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.clients.credentials.delete(
+ client_id="client_id",
+ credential_id="credential_id",
+ )
+ """
+ _response = self._raw_client.delete(client_id, credential_id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ client_id: str,
+ credential_id: str,
+ *,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> PatchClientCredentialResponseContent:
+ """
+ Change a client credential you previously created. May be enabled or disabled. For more information, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential.
+
+ expires_at : typing.Optional[dt.datetime]
+ The ISO 8601 formatted date representing the expiration of the credential.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ PatchClientCredentialResponseContent
+ Credential successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.clients.credentials.update(
+ client_id="client_id",
+ credential_id="credential_id",
+ )
+ """
+ _response = self._raw_client.update(
+ client_id, credential_id, expires_at=expires_at, request_options=request_options
+ )
+ return _response.data
+
+
+class AsyncCredentialsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawCredentialsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawCredentialsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawCredentialsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self, client_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[ClientCredential]:
+ """
+ Get the details of a client credential.
+
+ Important: To enable credentials to be used for a client authentication method, set the client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[ClientCredential]
+ Credentials successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.clients.credentials.list(
+ client_id="client_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(client_id, request_options=request_options)
+ return _response.data
+
+ async def create(
+ self,
+ client_id: str,
+ *,
+ credential_type: ClientCredentialTypeEnum,
+ name: typing.Optional[str] = "",
+ subject_dn: typing.Optional[str] = OMIT,
+ pem: typing.Optional[str] = "-----BEGIN PUBLIC KEY-----\r\nMIIBIjANBg...\r\n-----END PUBLIC KEY-----\r\n",
+ alg: typing.Optional[PublicKeyCredentialAlgorithmEnum] = OMIT,
+ parse_expiry_from_cert: typing.Optional[bool] = False,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> PostClientCredentialResponseContent:
+ """
+ Create a client credential associated to your application. Credentials can be used to configure Private Key JWT and mTLS authentication methods, as well as for JWT-secured Authorization requests.
+
+ {
+ "credential_type": "public_key",
+ "name": "string",
+ "pem": "string",
+ "alg": "RS256",
+ "parse_expiry_from_cert": false,
+ "expires_at": "2022-12-31T23:59:59Z"
+ }
+ {
+ "credential_type": "x509_cert",
+ "name": "string",
+ "pem": "string"
+ }CA-signed Certificate Sample (subject_dn): {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "subject_dn": "string"
+ }Self-signed Certificate Sample: {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "pem": "string"
+ }
+
+ The credential will be created but not yet enabled for use until you set the corresponding properties in the client:
+ client_authentication_methods property on the client. For more information, read Configure Private Key JWT Authentication and Configure mTLS Authenticationsigned_request_objectproperty on the client. For more information, read Configure JWT-secured Authorization Requests (JAR)client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetClientCredentialResponseContent
+ Credential successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.clients.credentials.get(
+ client_id="client_id",
+ credential_id="credential_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(client_id, credential_id, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self, client_id: str, credential_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Delete a client credential you previously created. May be enabled or disabled. For more information, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.clients.credentials.delete(
+ client_id="client_id",
+ credential_id="credential_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(client_id, credential_id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ client_id: str,
+ credential_id: str,
+ *,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> PatchClientCredentialResponseContent:
+ """
+ Change a client credential you previously created. May be enabled or disabled. For more information, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential.
+
+ expires_at : typing.Optional[dt.datetime]
+ The ISO 8601 formatted date representing the expiration of the credential.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ PatchClientCredentialResponseContent
+ Credential successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.clients.credentials.update(
+ client_id="client_id",
+ credential_id="credential_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ client_id, credential_id, expires_at=expires_at, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/clients/credentials/raw_client.py b/src/auth0/management/clients/credentials/raw_client.py
new file mode 100644
index 00000000..e65ffe02
--- /dev/null
+++ b/src/auth0/management/clients/credentials/raw_client.py
@@ -0,0 +1,1098 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.client_credential import ClientCredential
+from ...types.client_credential_type_enum import ClientCredentialTypeEnum
+from ...types.get_client_credential_response_content import GetClientCredentialResponseContent
+from ...types.patch_client_credential_response_content import PatchClientCredentialResponseContent
+from ...types.post_client_credential_response_content import PostClientCredentialResponseContent
+from ...types.public_key_credential_algorithm_enum import PublicKeyCredentialAlgorithmEnum
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawCredentialsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self, client_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[typing.List[ClientCredential]]:
+ """
+ Get the details of a client credential.
+
+ Important: To enable credentials to be used for a client authentication method, set the client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[ClientCredential]]
+ Credentials successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(client_id)}/credentials",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[ClientCredential],
+ parse_obj_as(
+ type_=typing.List[ClientCredential], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ client_id: str,
+ *,
+ credential_type: ClientCredentialTypeEnum,
+ name: typing.Optional[str] = "",
+ subject_dn: typing.Optional[str] = OMIT,
+ pem: typing.Optional[str] = "-----BEGIN PUBLIC KEY-----\r\nMIIBIjANBg...\r\n-----END PUBLIC KEY-----\r\n",
+ alg: typing.Optional[PublicKeyCredentialAlgorithmEnum] = OMIT,
+ parse_expiry_from_cert: typing.Optional[bool] = False,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[PostClientCredentialResponseContent]:
+ """
+ Create a client credential associated to your application. Credentials can be used to configure Private Key JWT and mTLS authentication methods, as well as for JWT-secured Authorization requests.
+
+ {
+ "credential_type": "public_key",
+ "name": "string",
+ "pem": "string",
+ "alg": "RS256",
+ "parse_expiry_from_cert": false,
+ "expires_at": "2022-12-31T23:59:59Z"
+ }
+ {
+ "credential_type": "x509_cert",
+ "name": "string",
+ "pem": "string"
+ }CA-signed Certificate Sample (subject_dn): {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "subject_dn": "string"
+ }Self-signed Certificate Sample: {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "pem": "string"
+ }
+
+ The credential will be created but not yet enabled for use until you set the corresponding properties in the client:
+ client_authentication_methods property on the client. For more information, read Configure Private Key JWT Authentication and Configure mTLS Authenticationsigned_request_objectproperty on the client. For more information, read Configure JWT-secured Authorization Requests (JAR)client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetClientCredentialResponseContent]
+ Credential successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(client_id)}/credentials/{jsonable_encoder(credential_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetClientCredentialResponseContent,
+ parse_obj_as(
+ type_=GetClientCredentialResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, client_id: str, credential_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Delete a client credential you previously created. May be enabled or disabled. For more information, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(client_id)}/credentials/{jsonable_encoder(credential_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ client_id: str,
+ credential_id: str,
+ *,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[PatchClientCredentialResponseContent]:
+ """
+ Change a client credential you previously created. May be enabled or disabled. For more information, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential.
+
+ expires_at : typing.Optional[dt.datetime]
+ The ISO 8601 formatted date representing the expiration of the credential.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[PatchClientCredentialResponseContent]
+ Credential successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(client_id)}/credentials/{jsonable_encoder(credential_id)}",
+ method="PATCH",
+ json={
+ "expires_at": expires_at,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ PatchClientCredentialResponseContent,
+ parse_obj_as(
+ type_=PatchClientCredentialResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawCredentialsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self, client_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[typing.List[ClientCredential]]:
+ """
+ Get the details of a client credential.
+
+ Important: To enable credentials to be used for a client authentication method, set the client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[ClientCredential]]
+ Credentials successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(client_id)}/credentials",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[ClientCredential],
+ parse_obj_as(
+ type_=typing.List[ClientCredential], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ client_id: str,
+ *,
+ credential_type: ClientCredentialTypeEnum,
+ name: typing.Optional[str] = "",
+ subject_dn: typing.Optional[str] = OMIT,
+ pem: typing.Optional[str] = "-----BEGIN PUBLIC KEY-----\r\nMIIBIjANBg...\r\n-----END PUBLIC KEY-----\r\n",
+ alg: typing.Optional[PublicKeyCredentialAlgorithmEnum] = OMIT,
+ parse_expiry_from_cert: typing.Optional[bool] = False,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[PostClientCredentialResponseContent]:
+ """
+ Create a client credential associated to your application. Credentials can be used to configure Private Key JWT and mTLS authentication methods, as well as for JWT-secured Authorization requests.
+
+ {
+ "credential_type": "public_key",
+ "name": "string",
+ "pem": "string",
+ "alg": "RS256",
+ "parse_expiry_from_cert": false,
+ "expires_at": "2022-12-31T23:59:59Z"
+ }
+ {
+ "credential_type": "x509_cert",
+ "name": "string",
+ "pem": "string"
+ }CA-signed Certificate Sample (subject_dn): {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "subject_dn": "string"
+ }Self-signed Certificate Sample: {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "pem": "string"
+ }
+
+ The credential will be created but not yet enabled for use until you set the corresponding properties in the client:
+ client_authentication_methods property on the client. For more information, read Configure Private Key JWT Authentication and Configure mTLS Authenticationsigned_request_objectproperty on the client. For more information, read Configure JWT-secured Authorization Requests (JAR)client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetClientCredentialResponseContent]
+ Credential successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(client_id)}/credentials/{jsonable_encoder(credential_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetClientCredentialResponseContent,
+ parse_obj_as(
+ type_=GetClientCredentialResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, client_id: str, credential_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a client credential you previously created. May be enabled or disabled. For more information, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(client_id)}/credentials/{jsonable_encoder(credential_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ client_id: str,
+ credential_id: str,
+ *,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[PatchClientCredentialResponseContent]:
+ """
+ Change a client credential you previously created. May be enabled or disabled. For more information, read Client Credential Flow.
+
+ Parameters
+ ----------
+ client_id : str
+ ID of the client.
+
+ credential_id : str
+ ID of the credential.
+
+ expires_at : typing.Optional[dt.datetime]
+ The ISO 8601 formatted date representing the expiration of the credential.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[PatchClientCredentialResponseContent]
+ Credential successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(client_id)}/credentials/{jsonable_encoder(credential_id)}",
+ method="PATCH",
+ json={
+ "expires_at": expires_at,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ PatchClientCredentialResponseContent,
+ parse_obj_as(
+ type_=PatchClientCredentialResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/clients/raw_client.py b/src/auth0/management/clients/raw_client.py
new file mode 100644
index 00000000..90b64daa
--- /dev/null
+++ b/src/auth0/management/clients/raw_client.py
@@ -0,0 +1,2588 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.client import Client
+from ..types.client_addons import ClientAddons
+from ..types.client_app_type_enum import ClientAppTypeEnum
+from ..types.client_async_approval_notifications_channels_api_patch_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration,
+)
+from ..types.client_async_approval_notifications_channels_api_post_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration,
+)
+from ..types.client_authentication_method import ClientAuthenticationMethod
+from ..types.client_compliance_level_enum import ClientComplianceLevelEnum
+from ..types.client_create_authentication_method import ClientCreateAuthenticationMethod
+from ..types.client_default_organization import ClientDefaultOrganization
+from ..types.client_encryption_key import ClientEncryptionKey
+from ..types.client_jwt_configuration import ClientJwtConfiguration
+from ..types.client_metadata import ClientMetadata
+from ..types.client_mobile import ClientMobile
+from ..types.client_oidc_backchannel_logout_settings import ClientOidcBackchannelLogoutSettings
+from ..types.client_organization_discovery_enum import ClientOrganizationDiscoveryEnum
+from ..types.client_organization_require_behavior_enum import ClientOrganizationRequireBehaviorEnum
+from ..types.client_organization_require_behavior_patch_enum import ClientOrganizationRequireBehaviorPatchEnum
+from ..types.client_organization_usage_enum import ClientOrganizationUsageEnum
+from ..types.client_organization_usage_patch_enum import ClientOrganizationUsagePatchEnum
+from ..types.client_refresh_token_configuration import ClientRefreshTokenConfiguration
+from ..types.client_session_transfer_configuration import ClientSessionTransferConfiguration
+from ..types.client_signed_request_object_with_credential_id import ClientSignedRequestObjectWithCredentialId
+from ..types.client_signed_request_object_with_public_key import ClientSignedRequestObjectWithPublicKey
+from ..types.client_token_endpoint_auth_method_enum import ClientTokenEndpointAuthMethodEnum
+from ..types.client_token_endpoint_auth_method_or_null_enum import ClientTokenEndpointAuthMethodOrNullEnum
+from ..types.client_token_exchange_configuration import ClientTokenExchangeConfiguration
+from ..types.client_token_exchange_configuration_or_null import ClientTokenExchangeConfigurationOrNull
+from ..types.create_client_response_content import CreateClientResponseContent
+from ..types.create_token_quota import CreateTokenQuota
+from ..types.express_configuration import ExpressConfiguration
+from ..types.express_configuration_or_null import ExpressConfigurationOrNull
+from ..types.get_client_response_content import GetClientResponseContent
+from ..types.list_clients_offset_paginated_response_content import ListClientsOffsetPaginatedResponseContent
+from ..types.native_social_login import NativeSocialLogin
+from ..types.rotate_client_secret_response_content import RotateClientSecretResponseContent
+from ..types.update_client_response_content import UpdateClientResponseContent
+from ..types.update_token_quota import UpdateTokenQuota
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawClientsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ is_global: typing.Optional[bool] = None,
+ is_first_party: typing.Optional[bool] = None,
+ app_type: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Client, ListClientsOffsetPaginatedResponseContent]:
+ """
+ Retrieve clients (applications and SSO integrations) matching provided filters. A list of fields to include or exclude may also be specified.
+ For more information, read Applications in Auth0 and Single Sign-On.
+
+ client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scope:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scope:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use
+ client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method
+ to configure the client with client secret (basic or post) or with no authentication method (none).
+ - When using client_authentication_methods to configure the client with Private Key JWT authentication method, specify fully defined credentials.
+ These credentials will be automatically enabled for Private Key JWT authentication on the client.
+ - To configure client_authentication_methods, the create:client_credentials scope is required.
+ - To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+
+ true to disable Single Sign On, false otherwise (default: false)
+
+ custom_login_page_on : typing.Optional[bool]
+ true if the custom login page is to be used, false otherwise. Defaults to true
+
+ custom_login_page : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page.
+
+ custom_login_page_preview : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page. (Used on Previews)
+
+ form_template : typing.Optional[str]
+ HTML form template to be used for WS-Federation.
+
+ addons : typing.Optional[ClientAddons]
+
+ client_metadata : typing.Optional[ClientMetadata]
+
+ mobile : typing.Optional[ClientMobile]
+
+ initiate_login_uri : typing.Optional[str]
+ Initiate login uri, must be https
+
+ native_social_login : typing.Optional[NativeSocialLogin]
+
+ refresh_token : typing.Optional[ClientRefreshTokenConfiguration]
+
+ default_organization : typing.Optional[ClientDefaultOrganization]
+
+ organization_usage : typing.Optional[ClientOrganizationUsageEnum]
+
+ organization_require_behavior : typing.Optional[ClientOrganizationRequireBehaviorEnum]
+
+ organization_discovery_methods : typing.Optional[typing.Sequence[ClientOrganizationDiscoveryEnum]]
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+
+ client_authentication_methods : typing.Optional[ClientCreateAuthenticationMethod]
+
+ require_pushed_authorization_requests : typing.Optional[bool]
+ Makes the use of Pushed Authorization Requests mandatory for this client
+
+ require_proof_of_possession : typing.Optional[bool]
+ Makes the use of Proof-of-Possession mandatory for this client
+
+ signed_request_object : typing.Optional[ClientSignedRequestObjectWithPublicKey]
+
+ compliance_level : typing.Optional[ClientComplianceLevelEnum]
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ token_exchange : typing.Optional[ClientTokenExchangeConfiguration]
+
+ par_request_expiry : typing.Optional[int]
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+
+ token_quota : typing.Optional[CreateTokenQuota]
+
+ resource_server_identifier : typing.Optional[str]
+ The identifier of the resource server that this client is linked to.
+
+ express_configuration : typing.Optional[ExpressConfiguration]
+
+ async_approval_notification_channels : typing.Optional[ClientAsyncApprovalNotificationsChannelsApiPostConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateClientResponseContent]
+ Client successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "clients",
+ method="POST",
+ json={
+ "name": name,
+ "description": description,
+ "logo_uri": logo_uri,
+ "callbacks": callbacks,
+ "oidc_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_logout, annotation=ClientOidcBackchannelLogoutSettings, direction="write"
+ ),
+ "oidc_backchannel_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_backchannel_logout, annotation=ClientOidcBackchannelLogoutSettings, direction="write"
+ ),
+ "session_transfer": convert_and_respect_annotation_metadata(
+ object_=session_transfer,
+ annotation=typing.Optional[ClientSessionTransferConfiguration],
+ direction="write",
+ ),
+ "allowed_origins": allowed_origins,
+ "web_origins": web_origins,
+ "client_aliases": client_aliases,
+ "allowed_clients": allowed_clients,
+ "allowed_logout_urls": allowed_logout_urls,
+ "grant_types": grant_types,
+ "token_endpoint_auth_method": token_endpoint_auth_method,
+ "is_token_endpoint_ip_header_trusted": is_token_endpoint_ip_header_trusted,
+ "app_type": app_type,
+ "is_first_party": is_first_party,
+ "oidc_conformant": oidc_conformant,
+ "jwt_configuration": convert_and_respect_annotation_metadata(
+ object_=jwt_configuration, annotation=ClientJwtConfiguration, direction="write"
+ ),
+ "encryption_key": convert_and_respect_annotation_metadata(
+ object_=encryption_key, annotation=typing.Optional[ClientEncryptionKey], direction="write"
+ ),
+ "sso": sso,
+ "cross_origin_authentication": cross_origin_authentication,
+ "cross_origin_loc": cross_origin_loc,
+ "sso_disabled": sso_disabled,
+ "custom_login_page_on": custom_login_page_on,
+ "custom_login_page": custom_login_page,
+ "custom_login_page_preview": custom_login_page_preview,
+ "form_template": form_template,
+ "addons": convert_and_respect_annotation_metadata(
+ object_=addons, annotation=ClientAddons, direction="write"
+ ),
+ "client_metadata": client_metadata,
+ "mobile": convert_and_respect_annotation_metadata(
+ object_=mobile, annotation=ClientMobile, direction="write"
+ ),
+ "initiate_login_uri": initiate_login_uri,
+ "native_social_login": convert_and_respect_annotation_metadata(
+ object_=native_social_login, annotation=NativeSocialLogin, direction="write"
+ ),
+ "refresh_token": convert_and_respect_annotation_metadata(
+ object_=refresh_token,
+ annotation=typing.Optional[ClientRefreshTokenConfiguration],
+ direction="write",
+ ),
+ "default_organization": convert_and_respect_annotation_metadata(
+ object_=default_organization,
+ annotation=typing.Optional[ClientDefaultOrganization],
+ direction="write",
+ ),
+ "organization_usage": organization_usage,
+ "organization_require_behavior": organization_require_behavior,
+ "organization_discovery_methods": organization_discovery_methods,
+ "client_authentication_methods": convert_and_respect_annotation_metadata(
+ object_=client_authentication_methods,
+ annotation=ClientCreateAuthenticationMethod,
+ direction="write",
+ ),
+ "require_pushed_authorization_requests": require_pushed_authorization_requests,
+ "require_proof_of_possession": require_proof_of_possession,
+ "signed_request_object": convert_and_respect_annotation_metadata(
+ object_=signed_request_object, annotation=ClientSignedRequestObjectWithPublicKey, direction="write"
+ ),
+ "compliance_level": compliance_level,
+ "skip_non_verifiable_callback_uri_confirmation_prompt": skip_non_verifiable_callback_uri_confirmation_prompt,
+ "token_exchange": convert_and_respect_annotation_metadata(
+ object_=token_exchange, annotation=ClientTokenExchangeConfiguration, direction="write"
+ ),
+ "par_request_expiry": par_request_expiry,
+ "token_quota": convert_and_respect_annotation_metadata(
+ object_=token_quota, annotation=CreateTokenQuota, direction="write"
+ ),
+ "resource_server_identifier": resource_server_identifier,
+ "express_configuration": convert_and_respect_annotation_metadata(
+ object_=express_configuration, annotation=ExpressConfiguration, direction="write"
+ ),
+ "async_approval_notification_channels": async_approval_notification_channels,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateClientResponseContent,
+ parse_obj_as(
+ type_=CreateClientResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[GetClientResponseContent]:
+ """
+ Retrieve client details by ID. Clients are SSO connections or Applications linked with your Auth0 tenant. A list of fields to include or exclude may also be specified.
+ For more information, read Applications in Auth0 and Single Sign-On.
+ client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scopes:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scopes:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method to configure the client with client secret (basic or post) or with no authentication method (none).
+ - When using client_authentication_methods to configure the client with Private Key JWT authentication method, only specify the credential IDs that were generated when creating the credentials on the client.
+ - To configure client_authentication_methods, the update:client_credentials scope is required.
+ - To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+ - To change a client's is_first_party property to false, the organization_usage and organization_require_behavior properties must be unset.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client to update.
+
+ name : typing.Optional[str]
+ The name of the client. Must contain at least one character. Does not allow '<' or '>'.
+
+ description : typing.Optional[str]
+ Free text description of the purpose of the Client. (Max character length: 140)
+
+ client_secret : typing.Optional[str]
+ The secret used to sign tokens for the client
+
+ logo_uri : typing.Optional[str]
+ The URL of the client logo (recommended size: 150x150)
+
+ callbacks : typing.Optional[typing.Sequence[str]]
+ A set of URLs that are valid to call back from Auth0 when authenticating users
+
+ oidc_logout : typing.Optional[ClientOidcBackchannelLogoutSettings]
+
+ oidc_backchannel_logout : typing.Optional[ClientOidcBackchannelLogoutSettings]
+
+ session_transfer : typing.Optional[ClientSessionTransferConfiguration]
+
+ allowed_origins : typing.Optional[typing.Sequence[str]]
+ A set of URLs that represents valid origins for CORS
+
+ web_origins : typing.Optional[typing.Sequence[str]]
+ A set of URLs that represents valid web origins for use with web message response mode
+
+ grant_types : typing.Optional[typing.Sequence[str]]
+ A set of grant types that the client is authorized to use. Can include `authorization_code`, `implicit`, `refresh_token`, `client_credentials`, `password`, `http://auth0.com/oauth/grant-type/password-realm`, `http://auth0.com/oauth/grant-type/mfa-oob`, `http://auth0.com/oauth/grant-type/mfa-otp`, `http://auth0.com/oauth/grant-type/mfa-recovery-code`, `urn:openid:params:grant-type:ciba`, `urn:ietf:params:oauth:grant-type:device_code`, and `urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token`.
+
+ client_aliases : typing.Optional[typing.Sequence[str]]
+ List of audiences for SAML protocol
+
+ allowed_clients : typing.Optional[typing.Sequence[str]]
+ Ids of clients that will be allowed to perform delegation requests. Clients that will be allowed to make delegation request. By default, all your clients will be allowed. This field allows you to specify specific clients
+
+ allowed_logout_urls : typing.Optional[typing.Sequence[str]]
+ URLs that are valid to redirect to after logout from Auth0.
+
+ jwt_configuration : typing.Optional[ClientJwtConfiguration]
+
+ encryption_key : typing.Optional[ClientEncryptionKey]
+
+ sso : typing.Optional[bool]
+ true to use Auth0 instead of the IdP to do Single Sign On, false otherwise (default: false)
+
+ cross_origin_authentication : typing.Optional[bool]
+ true if this client can be used to make cross-origin authentication requests, false otherwise if cross origin is disabled
+
+ cross_origin_loc : typing.Optional[str]
+ URL for the location in your site where the cross origin verification takes place for the cross-origin auth flow when performing Auth in your own domain instead of Auth0 hosted login page.
+
+ sso_disabled : typing.Optional[bool]
+ true to disable Single Sign On, false otherwise (default: false)
+
+ custom_login_page_on : typing.Optional[bool]
+ true if the custom login page is to be used, false otherwise.
+
+ token_endpoint_auth_method : typing.Optional[ClientTokenEndpointAuthMethodOrNullEnum]
+
+ is_token_endpoint_ip_header_trusted : typing.Optional[bool]
+ If true, trust that the IP specified in the `auth0-forwarded-for` header is the end-user's IP for brute-force-protection on token endpoint.
+
+ app_type : typing.Optional[ClientAppTypeEnum]
+
+ is_first_party : typing.Optional[bool]
+ Whether this client a first party client or not
+
+ oidc_conformant : typing.Optional[bool]
+ Whether this client will conform to strict OIDC specifications
+
+ custom_login_page : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page
+
+ custom_login_page_preview : typing.Optional[str]
+
+ token_quota : typing.Optional[UpdateTokenQuota]
+
+ form_template : typing.Optional[str]
+ Form template for WS-Federation protocol
+
+ addons : typing.Optional[ClientAddons]
+
+ client_metadata : typing.Optional[ClientMetadata]
+
+ mobile : typing.Optional[ClientMobile]
+
+ initiate_login_uri : typing.Optional[str]
+ Initiate login uri, must be https
+
+ native_social_login : typing.Optional[NativeSocialLogin]
+
+ refresh_token : typing.Optional[ClientRefreshTokenConfiguration]
+
+ default_organization : typing.Optional[ClientDefaultOrganization]
+
+ organization_usage : typing.Optional[ClientOrganizationUsagePatchEnum]
+
+ organization_require_behavior : typing.Optional[ClientOrganizationRequireBehaviorPatchEnum]
+
+ organization_discovery_methods : typing.Optional[typing.Sequence[ClientOrganizationDiscoveryEnum]]
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+
+ client_authentication_methods : typing.Optional[ClientAuthenticationMethod]
+
+ require_pushed_authorization_requests : typing.Optional[bool]
+ Makes the use of Pushed Authorization Requests mandatory for this client
+
+ require_proof_of_possession : typing.Optional[bool]
+ Makes the use of Proof-of-Possession mandatory for this client
+
+ signed_request_object : typing.Optional[ClientSignedRequestObjectWithCredentialId]
+
+ compliance_level : typing.Optional[ClientComplianceLevelEnum]
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ token_exchange : typing.Optional[ClientTokenExchangeConfigurationOrNull]
+
+ par_request_expiry : typing.Optional[int]
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+
+ express_configuration : typing.Optional[ExpressConfigurationOrNull]
+
+ async_approval_notification_channels : typing.Optional[ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateClientResponseContent]
+ Client successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "description": description,
+ "client_secret": client_secret,
+ "logo_uri": logo_uri,
+ "callbacks": callbacks,
+ "oidc_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_logout, annotation=ClientOidcBackchannelLogoutSettings, direction="write"
+ ),
+ "oidc_backchannel_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_backchannel_logout, annotation=ClientOidcBackchannelLogoutSettings, direction="write"
+ ),
+ "session_transfer": convert_and_respect_annotation_metadata(
+ object_=session_transfer,
+ annotation=typing.Optional[ClientSessionTransferConfiguration],
+ direction="write",
+ ),
+ "allowed_origins": allowed_origins,
+ "web_origins": web_origins,
+ "grant_types": grant_types,
+ "client_aliases": client_aliases,
+ "allowed_clients": allowed_clients,
+ "allowed_logout_urls": allowed_logout_urls,
+ "jwt_configuration": convert_and_respect_annotation_metadata(
+ object_=jwt_configuration, annotation=ClientJwtConfiguration, direction="write"
+ ),
+ "encryption_key": convert_and_respect_annotation_metadata(
+ object_=encryption_key, annotation=typing.Optional[ClientEncryptionKey], direction="write"
+ ),
+ "sso": sso,
+ "cross_origin_authentication": cross_origin_authentication,
+ "cross_origin_loc": cross_origin_loc,
+ "sso_disabled": sso_disabled,
+ "custom_login_page_on": custom_login_page_on,
+ "token_endpoint_auth_method": token_endpoint_auth_method,
+ "is_token_endpoint_ip_header_trusted": is_token_endpoint_ip_header_trusted,
+ "app_type": app_type,
+ "is_first_party": is_first_party,
+ "oidc_conformant": oidc_conformant,
+ "custom_login_page": custom_login_page,
+ "custom_login_page_preview": custom_login_page_preview,
+ "token_quota": convert_and_respect_annotation_metadata(
+ object_=token_quota, annotation=typing.Optional[UpdateTokenQuota], direction="write"
+ ),
+ "form_template": form_template,
+ "addons": convert_and_respect_annotation_metadata(
+ object_=addons, annotation=ClientAddons, direction="write"
+ ),
+ "client_metadata": client_metadata,
+ "mobile": convert_and_respect_annotation_metadata(
+ object_=mobile, annotation=ClientMobile, direction="write"
+ ),
+ "initiate_login_uri": initiate_login_uri,
+ "native_social_login": convert_and_respect_annotation_metadata(
+ object_=native_social_login, annotation=NativeSocialLogin, direction="write"
+ ),
+ "refresh_token": convert_and_respect_annotation_metadata(
+ object_=refresh_token,
+ annotation=typing.Optional[ClientRefreshTokenConfiguration],
+ direction="write",
+ ),
+ "default_organization": convert_and_respect_annotation_metadata(
+ object_=default_organization,
+ annotation=typing.Optional[ClientDefaultOrganization],
+ direction="write",
+ ),
+ "organization_usage": organization_usage,
+ "organization_require_behavior": organization_require_behavior,
+ "organization_discovery_methods": organization_discovery_methods,
+ "client_authentication_methods": convert_and_respect_annotation_metadata(
+ object_=client_authentication_methods,
+ annotation=typing.Optional[ClientAuthenticationMethod],
+ direction="write",
+ ),
+ "require_pushed_authorization_requests": require_pushed_authorization_requests,
+ "require_proof_of_possession": require_proof_of_possession,
+ "signed_request_object": convert_and_respect_annotation_metadata(
+ object_=signed_request_object,
+ annotation=ClientSignedRequestObjectWithCredentialId,
+ direction="write",
+ ),
+ "compliance_level": compliance_level,
+ "skip_non_verifiable_callback_uri_confirmation_prompt": skip_non_verifiable_callback_uri_confirmation_prompt,
+ "token_exchange": convert_and_respect_annotation_metadata(
+ object_=token_exchange,
+ annotation=typing.Optional[ClientTokenExchangeConfigurationOrNull],
+ direction="write",
+ ),
+ "par_request_expiry": par_request_expiry,
+ "express_configuration": convert_and_respect_annotation_metadata(
+ object_=express_configuration,
+ annotation=typing.Optional[ExpressConfigurationOrNull],
+ direction="write",
+ ),
+ "async_approval_notification_channels": async_approval_notification_channels,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateClientResponseContent,
+ parse_obj_as(
+ type_=UpdateClientResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def rotate_secret(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[RotateClientSecretResponseContent]:
+ """
+ Rotate a client secret.
+
+ This endpoint cannot be used with clients configured with Private Key JWT authentication method (client_authentication_methods configured with private_key_jwt). The generated secret is NOT base64 encoded.
+
+ For more information, read Rotate Client Secrets.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client that will rotate secrets.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[RotateClientSecretResponseContent]
+ Secret successfully rotated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(id)}/rotate-secret",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RotateClientSecretResponseContent,
+ parse_obj_as(
+ type_=RotateClientSecretResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawClientsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ is_global: typing.Optional[bool] = None,
+ is_first_party: typing.Optional[bool] = None,
+ app_type: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Client, ListClientsOffsetPaginatedResponseContent]:
+ """
+ Retrieve clients (applications and SSO integrations) matching provided filters. A list of fields to include or exclude may also be specified.
+ For more information, read Applications in Auth0 and Single Sign-On.
+
+ client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scope:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scope:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use
+ client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method
+ to configure the client with client secret (basic or post) or with no authentication method (none).
+ - When using client_authentication_methods to configure the client with Private Key JWT authentication method, specify fully defined credentials.
+ These credentials will be automatically enabled for Private Key JWT authentication on the client.
+ - To configure client_authentication_methods, the create:client_credentials scope is required.
+ - To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+
+ true to disable Single Sign On, false otherwise (default: false)
+
+ custom_login_page_on : typing.Optional[bool]
+ true if the custom login page is to be used, false otherwise. Defaults to true
+
+ custom_login_page : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page.
+
+ custom_login_page_preview : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page. (Used on Previews)
+
+ form_template : typing.Optional[str]
+ HTML form template to be used for WS-Federation.
+
+ addons : typing.Optional[ClientAddons]
+
+ client_metadata : typing.Optional[ClientMetadata]
+
+ mobile : typing.Optional[ClientMobile]
+
+ initiate_login_uri : typing.Optional[str]
+ Initiate login uri, must be https
+
+ native_social_login : typing.Optional[NativeSocialLogin]
+
+ refresh_token : typing.Optional[ClientRefreshTokenConfiguration]
+
+ default_organization : typing.Optional[ClientDefaultOrganization]
+
+ organization_usage : typing.Optional[ClientOrganizationUsageEnum]
+
+ organization_require_behavior : typing.Optional[ClientOrganizationRequireBehaviorEnum]
+
+ organization_discovery_methods : typing.Optional[typing.Sequence[ClientOrganizationDiscoveryEnum]]
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+
+ client_authentication_methods : typing.Optional[ClientCreateAuthenticationMethod]
+
+ require_pushed_authorization_requests : typing.Optional[bool]
+ Makes the use of Pushed Authorization Requests mandatory for this client
+
+ require_proof_of_possession : typing.Optional[bool]
+ Makes the use of Proof-of-Possession mandatory for this client
+
+ signed_request_object : typing.Optional[ClientSignedRequestObjectWithPublicKey]
+
+ compliance_level : typing.Optional[ClientComplianceLevelEnum]
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ token_exchange : typing.Optional[ClientTokenExchangeConfiguration]
+
+ par_request_expiry : typing.Optional[int]
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+
+ token_quota : typing.Optional[CreateTokenQuota]
+
+ resource_server_identifier : typing.Optional[str]
+ The identifier of the resource server that this client is linked to.
+
+ express_configuration : typing.Optional[ExpressConfiguration]
+
+ async_approval_notification_channels : typing.Optional[ClientAsyncApprovalNotificationsChannelsApiPostConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateClientResponseContent]
+ Client successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "clients",
+ method="POST",
+ json={
+ "name": name,
+ "description": description,
+ "logo_uri": logo_uri,
+ "callbacks": callbacks,
+ "oidc_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_logout, annotation=ClientOidcBackchannelLogoutSettings, direction="write"
+ ),
+ "oidc_backchannel_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_backchannel_logout, annotation=ClientOidcBackchannelLogoutSettings, direction="write"
+ ),
+ "session_transfer": convert_and_respect_annotation_metadata(
+ object_=session_transfer,
+ annotation=typing.Optional[ClientSessionTransferConfiguration],
+ direction="write",
+ ),
+ "allowed_origins": allowed_origins,
+ "web_origins": web_origins,
+ "client_aliases": client_aliases,
+ "allowed_clients": allowed_clients,
+ "allowed_logout_urls": allowed_logout_urls,
+ "grant_types": grant_types,
+ "token_endpoint_auth_method": token_endpoint_auth_method,
+ "is_token_endpoint_ip_header_trusted": is_token_endpoint_ip_header_trusted,
+ "app_type": app_type,
+ "is_first_party": is_first_party,
+ "oidc_conformant": oidc_conformant,
+ "jwt_configuration": convert_and_respect_annotation_metadata(
+ object_=jwt_configuration, annotation=ClientJwtConfiguration, direction="write"
+ ),
+ "encryption_key": convert_and_respect_annotation_metadata(
+ object_=encryption_key, annotation=typing.Optional[ClientEncryptionKey], direction="write"
+ ),
+ "sso": sso,
+ "cross_origin_authentication": cross_origin_authentication,
+ "cross_origin_loc": cross_origin_loc,
+ "sso_disabled": sso_disabled,
+ "custom_login_page_on": custom_login_page_on,
+ "custom_login_page": custom_login_page,
+ "custom_login_page_preview": custom_login_page_preview,
+ "form_template": form_template,
+ "addons": convert_and_respect_annotation_metadata(
+ object_=addons, annotation=ClientAddons, direction="write"
+ ),
+ "client_metadata": client_metadata,
+ "mobile": convert_and_respect_annotation_metadata(
+ object_=mobile, annotation=ClientMobile, direction="write"
+ ),
+ "initiate_login_uri": initiate_login_uri,
+ "native_social_login": convert_and_respect_annotation_metadata(
+ object_=native_social_login, annotation=NativeSocialLogin, direction="write"
+ ),
+ "refresh_token": convert_and_respect_annotation_metadata(
+ object_=refresh_token,
+ annotation=typing.Optional[ClientRefreshTokenConfiguration],
+ direction="write",
+ ),
+ "default_organization": convert_and_respect_annotation_metadata(
+ object_=default_organization,
+ annotation=typing.Optional[ClientDefaultOrganization],
+ direction="write",
+ ),
+ "organization_usage": organization_usage,
+ "organization_require_behavior": organization_require_behavior,
+ "organization_discovery_methods": organization_discovery_methods,
+ "client_authentication_methods": convert_and_respect_annotation_metadata(
+ object_=client_authentication_methods,
+ annotation=ClientCreateAuthenticationMethod,
+ direction="write",
+ ),
+ "require_pushed_authorization_requests": require_pushed_authorization_requests,
+ "require_proof_of_possession": require_proof_of_possession,
+ "signed_request_object": convert_and_respect_annotation_metadata(
+ object_=signed_request_object, annotation=ClientSignedRequestObjectWithPublicKey, direction="write"
+ ),
+ "compliance_level": compliance_level,
+ "skip_non_verifiable_callback_uri_confirmation_prompt": skip_non_verifiable_callback_uri_confirmation_prompt,
+ "token_exchange": convert_and_respect_annotation_metadata(
+ object_=token_exchange, annotation=ClientTokenExchangeConfiguration, direction="write"
+ ),
+ "par_request_expiry": par_request_expiry,
+ "token_quota": convert_and_respect_annotation_metadata(
+ object_=token_quota, annotation=CreateTokenQuota, direction="write"
+ ),
+ "resource_server_identifier": resource_server_identifier,
+ "express_configuration": convert_and_respect_annotation_metadata(
+ object_=express_configuration, annotation=ExpressConfiguration, direction="write"
+ ),
+ "async_approval_notification_channels": async_approval_notification_channels,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateClientResponseContent,
+ parse_obj_as(
+ type_=CreateClientResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[GetClientResponseContent]:
+ """
+ Retrieve client details by ID. Clients are SSO connections or Applications linked with your Auth0 tenant. A list of fields to include or exclude may also be specified.
+ For more information, read Applications in Auth0 and Single Sign-On.
+ client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scopes:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scopes:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method to configure the client with client secret (basic or post) or with no authentication method (none).
+ - When using client_authentication_methods to configure the client with Private Key JWT authentication method, only specify the credential IDs that were generated when creating the credentials on the client.
+ - To configure client_authentication_methods, the update:client_credentials scope is required.
+ - To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+ - To change a client's is_first_party property to false, the organization_usage and organization_require_behavior properties must be unset.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client to update.
+
+ name : typing.Optional[str]
+ The name of the client. Must contain at least one character. Does not allow '<' or '>'.
+
+ description : typing.Optional[str]
+ Free text description of the purpose of the Client. (Max character length: 140)
+
+ client_secret : typing.Optional[str]
+ The secret used to sign tokens for the client
+
+ logo_uri : typing.Optional[str]
+ The URL of the client logo (recommended size: 150x150)
+
+ callbacks : typing.Optional[typing.Sequence[str]]
+ A set of URLs that are valid to call back from Auth0 when authenticating users
+
+ oidc_logout : typing.Optional[ClientOidcBackchannelLogoutSettings]
+
+ oidc_backchannel_logout : typing.Optional[ClientOidcBackchannelLogoutSettings]
+
+ session_transfer : typing.Optional[ClientSessionTransferConfiguration]
+
+ allowed_origins : typing.Optional[typing.Sequence[str]]
+ A set of URLs that represents valid origins for CORS
+
+ web_origins : typing.Optional[typing.Sequence[str]]
+ A set of URLs that represents valid web origins for use with web message response mode
+
+ grant_types : typing.Optional[typing.Sequence[str]]
+ A set of grant types that the client is authorized to use. Can include `authorization_code`, `implicit`, `refresh_token`, `client_credentials`, `password`, `http://auth0.com/oauth/grant-type/password-realm`, `http://auth0.com/oauth/grant-type/mfa-oob`, `http://auth0.com/oauth/grant-type/mfa-otp`, `http://auth0.com/oauth/grant-type/mfa-recovery-code`, `urn:openid:params:grant-type:ciba`, `urn:ietf:params:oauth:grant-type:device_code`, and `urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token`.
+
+ client_aliases : typing.Optional[typing.Sequence[str]]
+ List of audiences for SAML protocol
+
+ allowed_clients : typing.Optional[typing.Sequence[str]]
+ Ids of clients that will be allowed to perform delegation requests. Clients that will be allowed to make delegation request. By default, all your clients will be allowed. This field allows you to specify specific clients
+
+ allowed_logout_urls : typing.Optional[typing.Sequence[str]]
+ URLs that are valid to redirect to after logout from Auth0.
+
+ jwt_configuration : typing.Optional[ClientJwtConfiguration]
+
+ encryption_key : typing.Optional[ClientEncryptionKey]
+
+ sso : typing.Optional[bool]
+ true to use Auth0 instead of the IdP to do Single Sign On, false otherwise (default: false)
+
+ cross_origin_authentication : typing.Optional[bool]
+ true if this client can be used to make cross-origin authentication requests, false otherwise if cross origin is disabled
+
+ cross_origin_loc : typing.Optional[str]
+ URL for the location in your site where the cross origin verification takes place for the cross-origin auth flow when performing Auth in your own domain instead of Auth0 hosted login page.
+
+ sso_disabled : typing.Optional[bool]
+ true to disable Single Sign On, false otherwise (default: false)
+
+ custom_login_page_on : typing.Optional[bool]
+ true if the custom login page is to be used, false otherwise.
+
+ token_endpoint_auth_method : typing.Optional[ClientTokenEndpointAuthMethodOrNullEnum]
+
+ is_token_endpoint_ip_header_trusted : typing.Optional[bool]
+ If true, trust that the IP specified in the `auth0-forwarded-for` header is the end-user's IP for brute-force-protection on token endpoint.
+
+ app_type : typing.Optional[ClientAppTypeEnum]
+
+ is_first_party : typing.Optional[bool]
+ Whether this client a first party client or not
+
+ oidc_conformant : typing.Optional[bool]
+ Whether this client will conform to strict OIDC specifications
+
+ custom_login_page : typing.Optional[str]
+ The content (HTML, CSS, JS) of the custom login page
+
+ custom_login_page_preview : typing.Optional[str]
+
+ token_quota : typing.Optional[UpdateTokenQuota]
+
+ form_template : typing.Optional[str]
+ Form template for WS-Federation protocol
+
+ addons : typing.Optional[ClientAddons]
+
+ client_metadata : typing.Optional[ClientMetadata]
+
+ mobile : typing.Optional[ClientMobile]
+
+ initiate_login_uri : typing.Optional[str]
+ Initiate login uri, must be https
+
+ native_social_login : typing.Optional[NativeSocialLogin]
+
+ refresh_token : typing.Optional[ClientRefreshTokenConfiguration]
+
+ default_organization : typing.Optional[ClientDefaultOrganization]
+
+ organization_usage : typing.Optional[ClientOrganizationUsagePatchEnum]
+
+ organization_require_behavior : typing.Optional[ClientOrganizationRequireBehaviorPatchEnum]
+
+ organization_discovery_methods : typing.Optional[typing.Sequence[ClientOrganizationDiscoveryEnum]]
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+
+ client_authentication_methods : typing.Optional[ClientAuthenticationMethod]
+
+ require_pushed_authorization_requests : typing.Optional[bool]
+ Makes the use of Pushed Authorization Requests mandatory for this client
+
+ require_proof_of_possession : typing.Optional[bool]
+ Makes the use of Proof-of-Possession mandatory for this client
+
+ signed_request_object : typing.Optional[ClientSignedRequestObjectWithCredentialId]
+
+ compliance_level : typing.Optional[ClientComplianceLevelEnum]
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ token_exchange : typing.Optional[ClientTokenExchangeConfigurationOrNull]
+
+ par_request_expiry : typing.Optional[int]
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+
+ express_configuration : typing.Optional[ExpressConfigurationOrNull]
+
+ async_approval_notification_channels : typing.Optional[ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateClientResponseContent]
+ Client successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "description": description,
+ "client_secret": client_secret,
+ "logo_uri": logo_uri,
+ "callbacks": callbacks,
+ "oidc_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_logout, annotation=ClientOidcBackchannelLogoutSettings, direction="write"
+ ),
+ "oidc_backchannel_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_backchannel_logout, annotation=ClientOidcBackchannelLogoutSettings, direction="write"
+ ),
+ "session_transfer": convert_and_respect_annotation_metadata(
+ object_=session_transfer,
+ annotation=typing.Optional[ClientSessionTransferConfiguration],
+ direction="write",
+ ),
+ "allowed_origins": allowed_origins,
+ "web_origins": web_origins,
+ "grant_types": grant_types,
+ "client_aliases": client_aliases,
+ "allowed_clients": allowed_clients,
+ "allowed_logout_urls": allowed_logout_urls,
+ "jwt_configuration": convert_and_respect_annotation_metadata(
+ object_=jwt_configuration, annotation=ClientJwtConfiguration, direction="write"
+ ),
+ "encryption_key": convert_and_respect_annotation_metadata(
+ object_=encryption_key, annotation=typing.Optional[ClientEncryptionKey], direction="write"
+ ),
+ "sso": sso,
+ "cross_origin_authentication": cross_origin_authentication,
+ "cross_origin_loc": cross_origin_loc,
+ "sso_disabled": sso_disabled,
+ "custom_login_page_on": custom_login_page_on,
+ "token_endpoint_auth_method": token_endpoint_auth_method,
+ "is_token_endpoint_ip_header_trusted": is_token_endpoint_ip_header_trusted,
+ "app_type": app_type,
+ "is_first_party": is_first_party,
+ "oidc_conformant": oidc_conformant,
+ "custom_login_page": custom_login_page,
+ "custom_login_page_preview": custom_login_page_preview,
+ "token_quota": convert_and_respect_annotation_metadata(
+ object_=token_quota, annotation=typing.Optional[UpdateTokenQuota], direction="write"
+ ),
+ "form_template": form_template,
+ "addons": convert_and_respect_annotation_metadata(
+ object_=addons, annotation=ClientAddons, direction="write"
+ ),
+ "client_metadata": client_metadata,
+ "mobile": convert_and_respect_annotation_metadata(
+ object_=mobile, annotation=ClientMobile, direction="write"
+ ),
+ "initiate_login_uri": initiate_login_uri,
+ "native_social_login": convert_and_respect_annotation_metadata(
+ object_=native_social_login, annotation=NativeSocialLogin, direction="write"
+ ),
+ "refresh_token": convert_and_respect_annotation_metadata(
+ object_=refresh_token,
+ annotation=typing.Optional[ClientRefreshTokenConfiguration],
+ direction="write",
+ ),
+ "default_organization": convert_and_respect_annotation_metadata(
+ object_=default_organization,
+ annotation=typing.Optional[ClientDefaultOrganization],
+ direction="write",
+ ),
+ "organization_usage": organization_usage,
+ "organization_require_behavior": organization_require_behavior,
+ "organization_discovery_methods": organization_discovery_methods,
+ "client_authentication_methods": convert_and_respect_annotation_metadata(
+ object_=client_authentication_methods,
+ annotation=typing.Optional[ClientAuthenticationMethod],
+ direction="write",
+ ),
+ "require_pushed_authorization_requests": require_pushed_authorization_requests,
+ "require_proof_of_possession": require_proof_of_possession,
+ "signed_request_object": convert_and_respect_annotation_metadata(
+ object_=signed_request_object,
+ annotation=ClientSignedRequestObjectWithCredentialId,
+ direction="write",
+ ),
+ "compliance_level": compliance_level,
+ "skip_non_verifiable_callback_uri_confirmation_prompt": skip_non_verifiable_callback_uri_confirmation_prompt,
+ "token_exchange": convert_and_respect_annotation_metadata(
+ object_=token_exchange,
+ annotation=typing.Optional[ClientTokenExchangeConfigurationOrNull],
+ direction="write",
+ ),
+ "par_request_expiry": par_request_expiry,
+ "express_configuration": convert_and_respect_annotation_metadata(
+ object_=express_configuration,
+ annotation=typing.Optional[ExpressConfigurationOrNull],
+ direction="write",
+ ),
+ "async_approval_notification_channels": async_approval_notification_channels,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateClientResponseContent,
+ parse_obj_as(
+ type_=UpdateClientResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def rotate_secret(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[RotateClientSecretResponseContent]:
+ """
+ Rotate a client secret.
+
+ This endpoint cannot be used with clients configured with Private Key JWT authentication method (client_authentication_methods configured with private_key_jwt). The generated secret is NOT base64 encoded.
+
+ For more information, read Rotate Client Secrets.
+
+ Parameters
+ ----------
+ id : str
+ ID of the client that will rotate secrets.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[RotateClientSecretResponseContent]
+ Secret successfully rotated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"clients/{jsonable_encoder(id)}/rotate-secret",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RotateClientSecretResponseContent,
+ parse_obj_as(
+ type_=RotateClientSecretResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/connection_profiles/__init__.py b/src/auth0/management/connection_profiles/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/connection_profiles/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/connection_profiles/client.py b/src/auth0/management/connection_profiles/client.py
new file mode 100644
index 00000000..cc31e3cc
--- /dev/null
+++ b/src/auth0/management/connection_profiles/client.py
@@ -0,0 +1,693 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.connection_name_prefix_template import ConnectionNamePrefixTemplate
+from ..types.connection_profile import ConnectionProfile
+from ..types.connection_profile_config import ConnectionProfileConfig
+from ..types.connection_profile_enabled_features import ConnectionProfileEnabledFeatures
+from ..types.connection_profile_name import ConnectionProfileName
+from ..types.connection_profile_organization import ConnectionProfileOrganization
+from ..types.connection_profile_strategy_overrides import ConnectionProfileStrategyOverrides
+from ..types.create_connection_profile_response_content import CreateConnectionProfileResponseContent
+from ..types.get_connection_profile_response_content import GetConnectionProfileResponseContent
+from ..types.get_connection_profile_template_response_content import GetConnectionProfileTemplateResponseContent
+from ..types.list_connection_profile_template_response_content import ListConnectionProfileTemplateResponseContent
+from ..types.list_connection_profiles_paginated_response_content import ListConnectionProfilesPaginatedResponseContent
+from ..types.update_connection_profile_response_content import UpdateConnectionProfileResponseContent
+from .raw_client import AsyncRawConnectionProfilesClient, RawConnectionProfilesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ConnectionProfilesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawConnectionProfilesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawConnectionProfilesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawConnectionProfilesClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectionProfile, ListConnectionProfilesPaginatedResponseContent]:
+ """
+ Retrieve a list of Connection Profiles. This endpoint supports Checkpoint pagination.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 5.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectionProfile, ListConnectionProfilesPaginatedResponseContent]
+ Connection Profiles successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.connection_profiles.list(
+ from_="from",
+ take=1,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(from_=from_, take=take, request_options=request_options)
+
+ def create(
+ self,
+ *,
+ name: ConnectionProfileName,
+ organization: typing.Optional[ConnectionProfileOrganization] = OMIT,
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = OMIT,
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = OMIT,
+ connection_config: typing.Optional[ConnectionProfileConfig] = OMIT,
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateConnectionProfileResponseContent:
+ """
+ Create a Connection Profile.
+
+ Parameters
+ ----------
+ name : ConnectionProfileName
+
+ organization : typing.Optional[ConnectionProfileOrganization]
+
+ connection_name_prefix_template : typing.Optional[ConnectionNamePrefixTemplate]
+
+ enabled_features : typing.Optional[ConnectionProfileEnabledFeatures]
+
+ connection_config : typing.Optional[ConnectionProfileConfig]
+
+ strategy_overrides : typing.Optional[ConnectionProfileStrategyOverrides]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateConnectionProfileResponseContent
+ Connection profile successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connection_profiles.create(
+ name="name",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name,
+ organization=organization,
+ connection_name_prefix_template=connection_name_prefix_template,
+ enabled_features=enabled_features,
+ connection_config=connection_config,
+ strategy_overrides=strategy_overrides,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def list_templates(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListConnectionProfileTemplateResponseContent:
+ """
+ Retrieve a list of Connection Profile Templates.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListConnectionProfileTemplateResponseContent
+ Connection Profile Templates successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connection_profiles.list_templates()
+ """
+ _response = self._raw_client.list_templates(request_options=request_options)
+ return _response.data
+
+ def get_template(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetConnectionProfileTemplateResponseContent:
+ """
+ Retrieve a Connection Profile Template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile-template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetConnectionProfileTemplateResponseContent
+ Connection Profile Template successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connection_profiles.get_template(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get_template(id, request_options=request_options)
+ return _response.data
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetConnectionProfileResponseContent:
+ """
+ Retrieve details about a single Connection Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetConnectionProfileResponseContent
+ Record for existing connection profile.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connection_profiles.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a single Connection Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connection_profiles.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[ConnectionProfileName] = OMIT,
+ organization: typing.Optional[ConnectionProfileOrganization] = OMIT,
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = OMIT,
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = OMIT,
+ connection_config: typing.Optional[ConnectionProfileConfig] = OMIT,
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateConnectionProfileResponseContent:
+ """
+ Update the details of a specific Connection Profile.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection profile to update.
+
+ name : typing.Optional[ConnectionProfileName]
+
+ organization : typing.Optional[ConnectionProfileOrganization]
+
+ connection_name_prefix_template : typing.Optional[ConnectionNamePrefixTemplate]
+
+ enabled_features : typing.Optional[ConnectionProfileEnabledFeatures]
+
+ connection_config : typing.Optional[ConnectionProfileConfig]
+
+ strategy_overrides : typing.Optional[ConnectionProfileStrategyOverrides]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateConnectionProfileResponseContent
+ Connection profile successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connection_profiles.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ name=name,
+ organization=organization,
+ connection_name_prefix_template=connection_name_prefix_template,
+ enabled_features=enabled_features,
+ connection_config=connection_config,
+ strategy_overrides=strategy_overrides,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncConnectionProfilesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawConnectionProfilesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawConnectionProfilesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawConnectionProfilesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectionProfile, ListConnectionProfilesPaginatedResponseContent]:
+ """
+ Retrieve a list of Connection Profiles. This endpoint supports Checkpoint pagination.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 5.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectionProfile, ListConnectionProfilesPaginatedResponseContent]
+ Connection Profiles successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.connection_profiles.list(
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(from_=from_, take=take, request_options=request_options)
+
+ async def create(
+ self,
+ *,
+ name: ConnectionProfileName,
+ organization: typing.Optional[ConnectionProfileOrganization] = OMIT,
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = OMIT,
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = OMIT,
+ connection_config: typing.Optional[ConnectionProfileConfig] = OMIT,
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateConnectionProfileResponseContent:
+ """
+ Create a Connection Profile.
+
+ Parameters
+ ----------
+ name : ConnectionProfileName
+
+ organization : typing.Optional[ConnectionProfileOrganization]
+
+ connection_name_prefix_template : typing.Optional[ConnectionNamePrefixTemplate]
+
+ enabled_features : typing.Optional[ConnectionProfileEnabledFeatures]
+
+ connection_config : typing.Optional[ConnectionProfileConfig]
+
+ strategy_overrides : typing.Optional[ConnectionProfileStrategyOverrides]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateConnectionProfileResponseContent
+ Connection profile successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connection_profiles.create(
+ name="name",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name,
+ organization=organization,
+ connection_name_prefix_template=connection_name_prefix_template,
+ enabled_features=enabled_features,
+ connection_config=connection_config,
+ strategy_overrides=strategy_overrides,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def list_templates(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListConnectionProfileTemplateResponseContent:
+ """
+ Retrieve a list of Connection Profile Templates.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListConnectionProfileTemplateResponseContent
+ Connection Profile Templates successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connection_profiles.list_templates()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list_templates(request_options=request_options)
+ return _response.data
+
+ async def get_template(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetConnectionProfileTemplateResponseContent:
+ """
+ Retrieve a Connection Profile Template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile-template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetConnectionProfileTemplateResponseContent
+ Connection Profile Template successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connection_profiles.get_template(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_template(id, request_options=request_options)
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetConnectionProfileResponseContent:
+ """
+ Retrieve details about a single Connection Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetConnectionProfileResponseContent
+ Record for existing connection profile.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connection_profiles.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a single Connection Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connection_profiles.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[ConnectionProfileName] = OMIT,
+ organization: typing.Optional[ConnectionProfileOrganization] = OMIT,
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = OMIT,
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = OMIT,
+ connection_config: typing.Optional[ConnectionProfileConfig] = OMIT,
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateConnectionProfileResponseContent:
+ """
+ Update the details of a specific Connection Profile.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection profile to update.
+
+ name : typing.Optional[ConnectionProfileName]
+
+ organization : typing.Optional[ConnectionProfileOrganization]
+
+ connection_name_prefix_template : typing.Optional[ConnectionNamePrefixTemplate]
+
+ enabled_features : typing.Optional[ConnectionProfileEnabledFeatures]
+
+ connection_config : typing.Optional[ConnectionProfileConfig]
+
+ strategy_overrides : typing.Optional[ConnectionProfileStrategyOverrides]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateConnectionProfileResponseContent
+ Connection profile successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connection_profiles.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ name=name,
+ organization=organization,
+ connection_name_prefix_template=connection_name_prefix_template,
+ enabled_features=enabled_features,
+ connection_config=connection_config,
+ strategy_overrides=strategy_overrides,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/connection_profiles/raw_client.py b/src/auth0/management/connection_profiles/raw_client.py
new file mode 100644
index 00000000..db1815e6
--- /dev/null
+++ b/src/auth0/management/connection_profiles/raw_client.py
@@ -0,0 +1,1350 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.connection_name_prefix_template import ConnectionNamePrefixTemplate
+from ..types.connection_profile import ConnectionProfile
+from ..types.connection_profile_config import ConnectionProfileConfig
+from ..types.connection_profile_enabled_features import ConnectionProfileEnabledFeatures
+from ..types.connection_profile_name import ConnectionProfileName
+from ..types.connection_profile_organization import ConnectionProfileOrganization
+from ..types.connection_profile_strategy_overrides import ConnectionProfileStrategyOverrides
+from ..types.create_connection_profile_response_content import CreateConnectionProfileResponseContent
+from ..types.get_connection_profile_response_content import GetConnectionProfileResponseContent
+from ..types.get_connection_profile_template_response_content import GetConnectionProfileTemplateResponseContent
+from ..types.list_connection_profile_template_response_content import ListConnectionProfileTemplateResponseContent
+from ..types.list_connection_profiles_paginated_response_content import ListConnectionProfilesPaginatedResponseContent
+from ..types.update_connection_profile_response_content import UpdateConnectionProfileResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawConnectionProfilesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectionProfile, ListConnectionProfilesPaginatedResponseContent]:
+ """
+ Retrieve a list of Connection Profiles. This endpoint supports Checkpoint pagination.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 5.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectionProfile, ListConnectionProfilesPaginatedResponseContent]
+ Connection Profiles successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "connection-profiles",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListConnectionProfilesPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListConnectionProfilesPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.connection_profiles
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: ConnectionProfileName,
+ organization: typing.Optional[ConnectionProfileOrganization] = OMIT,
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = OMIT,
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = OMIT,
+ connection_config: typing.Optional[ConnectionProfileConfig] = OMIT,
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateConnectionProfileResponseContent]:
+ """
+ Create a Connection Profile.
+
+ Parameters
+ ----------
+ name : ConnectionProfileName
+
+ organization : typing.Optional[ConnectionProfileOrganization]
+
+ connection_name_prefix_template : typing.Optional[ConnectionNamePrefixTemplate]
+
+ enabled_features : typing.Optional[ConnectionProfileEnabledFeatures]
+
+ connection_config : typing.Optional[ConnectionProfileConfig]
+
+ strategy_overrides : typing.Optional[ConnectionProfileStrategyOverrides]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateConnectionProfileResponseContent]
+ Connection profile successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "connection-profiles",
+ method="POST",
+ json={
+ "name": name,
+ "organization": convert_and_respect_annotation_metadata(
+ object_=organization, annotation=ConnectionProfileOrganization, direction="write"
+ ),
+ "connection_name_prefix_template": connection_name_prefix_template,
+ "enabled_features": enabled_features,
+ "connection_config": convert_and_respect_annotation_metadata(
+ object_=connection_config, annotation=ConnectionProfileConfig, direction="write"
+ ),
+ "strategy_overrides": convert_and_respect_annotation_metadata(
+ object_=strategy_overrides, annotation=ConnectionProfileStrategyOverrides, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateConnectionProfileResponseContent,
+ parse_obj_as(
+ type_=CreateConnectionProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def list_templates(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[ListConnectionProfileTemplateResponseContent]:
+ """
+ Retrieve a list of Connection Profile Templates.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListConnectionProfileTemplateResponseContent]
+ Connection Profile Templates successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "connection-profiles/templates",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListConnectionProfileTemplateResponseContent,
+ parse_obj_as(
+ type_=ListConnectionProfileTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get_template(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetConnectionProfileTemplateResponseContent]:
+ """
+ Retrieve a Connection Profile Template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile-template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetConnectionProfileTemplateResponseContent]
+ Connection Profile Template successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connection-profiles/templates/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetConnectionProfileTemplateResponseContent,
+ parse_obj_as(
+ type_=GetConnectionProfileTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetConnectionProfileResponseContent]:
+ """
+ Retrieve details about a single Connection Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetConnectionProfileResponseContent]
+ Record for existing connection profile.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connection-profiles/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetConnectionProfileResponseContent,
+ parse_obj_as(
+ type_=GetConnectionProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a single Connection Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connection-profiles/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[ConnectionProfileName] = OMIT,
+ organization: typing.Optional[ConnectionProfileOrganization] = OMIT,
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = OMIT,
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = OMIT,
+ connection_config: typing.Optional[ConnectionProfileConfig] = OMIT,
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateConnectionProfileResponseContent]:
+ """
+ Update the details of a specific Connection Profile.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection profile to update.
+
+ name : typing.Optional[ConnectionProfileName]
+
+ organization : typing.Optional[ConnectionProfileOrganization]
+
+ connection_name_prefix_template : typing.Optional[ConnectionNamePrefixTemplate]
+
+ enabled_features : typing.Optional[ConnectionProfileEnabledFeatures]
+
+ connection_config : typing.Optional[ConnectionProfileConfig]
+
+ strategy_overrides : typing.Optional[ConnectionProfileStrategyOverrides]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateConnectionProfileResponseContent]
+ Connection profile successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connection-profiles/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "organization": convert_and_respect_annotation_metadata(
+ object_=organization, annotation=ConnectionProfileOrganization, direction="write"
+ ),
+ "connection_name_prefix_template": connection_name_prefix_template,
+ "enabled_features": enabled_features,
+ "connection_config": convert_and_respect_annotation_metadata(
+ object_=connection_config, annotation=ConnectionProfileConfig, direction="write"
+ ),
+ "strategy_overrides": convert_and_respect_annotation_metadata(
+ object_=strategy_overrides, annotation=ConnectionProfileStrategyOverrides, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateConnectionProfileResponseContent,
+ parse_obj_as(
+ type_=UpdateConnectionProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawConnectionProfilesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectionProfile, ListConnectionProfilesPaginatedResponseContent]:
+ """
+ Retrieve a list of Connection Profiles. This endpoint supports Checkpoint pagination.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 5.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectionProfile, ListConnectionProfilesPaginatedResponseContent]
+ Connection Profiles successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "connection-profiles",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListConnectionProfilesPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListConnectionProfilesPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.connection_profiles
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: ConnectionProfileName,
+ organization: typing.Optional[ConnectionProfileOrganization] = OMIT,
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = OMIT,
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = OMIT,
+ connection_config: typing.Optional[ConnectionProfileConfig] = OMIT,
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateConnectionProfileResponseContent]:
+ """
+ Create a Connection Profile.
+
+ Parameters
+ ----------
+ name : ConnectionProfileName
+
+ organization : typing.Optional[ConnectionProfileOrganization]
+
+ connection_name_prefix_template : typing.Optional[ConnectionNamePrefixTemplate]
+
+ enabled_features : typing.Optional[ConnectionProfileEnabledFeatures]
+
+ connection_config : typing.Optional[ConnectionProfileConfig]
+
+ strategy_overrides : typing.Optional[ConnectionProfileStrategyOverrides]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateConnectionProfileResponseContent]
+ Connection profile successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "connection-profiles",
+ method="POST",
+ json={
+ "name": name,
+ "organization": convert_and_respect_annotation_metadata(
+ object_=organization, annotation=ConnectionProfileOrganization, direction="write"
+ ),
+ "connection_name_prefix_template": connection_name_prefix_template,
+ "enabled_features": enabled_features,
+ "connection_config": convert_and_respect_annotation_metadata(
+ object_=connection_config, annotation=ConnectionProfileConfig, direction="write"
+ ),
+ "strategy_overrides": convert_and_respect_annotation_metadata(
+ object_=strategy_overrides, annotation=ConnectionProfileStrategyOverrides, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateConnectionProfileResponseContent,
+ parse_obj_as(
+ type_=CreateConnectionProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def list_templates(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[ListConnectionProfileTemplateResponseContent]:
+ """
+ Retrieve a list of Connection Profile Templates.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListConnectionProfileTemplateResponseContent]
+ Connection Profile Templates successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "connection-profiles/templates",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListConnectionProfileTemplateResponseContent,
+ parse_obj_as(
+ type_=ListConnectionProfileTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get_template(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetConnectionProfileTemplateResponseContent]:
+ """
+ Retrieve a Connection Profile Template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile-template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetConnectionProfileTemplateResponseContent]
+ Connection Profile Template successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connection-profiles/templates/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetConnectionProfileTemplateResponseContent,
+ parse_obj_as(
+ type_=GetConnectionProfileTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetConnectionProfileResponseContent]:
+ """
+ Retrieve details about a single Connection Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetConnectionProfileResponseContent]
+ Record for existing connection profile.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connection-profiles/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetConnectionProfileResponseContent,
+ parse_obj_as(
+ type_=GetConnectionProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a single Connection Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection-profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connection-profiles/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[ConnectionProfileName] = OMIT,
+ organization: typing.Optional[ConnectionProfileOrganization] = OMIT,
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = OMIT,
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = OMIT,
+ connection_config: typing.Optional[ConnectionProfileConfig] = OMIT,
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateConnectionProfileResponseContent]:
+ """
+ Update the details of a specific Connection Profile.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection profile to update.
+
+ name : typing.Optional[ConnectionProfileName]
+
+ organization : typing.Optional[ConnectionProfileOrganization]
+
+ connection_name_prefix_template : typing.Optional[ConnectionNamePrefixTemplate]
+
+ enabled_features : typing.Optional[ConnectionProfileEnabledFeatures]
+
+ connection_config : typing.Optional[ConnectionProfileConfig]
+
+ strategy_overrides : typing.Optional[ConnectionProfileStrategyOverrides]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateConnectionProfileResponseContent]
+ Connection profile successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connection-profiles/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "organization": convert_and_respect_annotation_metadata(
+ object_=organization, annotation=ConnectionProfileOrganization, direction="write"
+ ),
+ "connection_name_prefix_template": connection_name_prefix_template,
+ "enabled_features": enabled_features,
+ "connection_config": convert_and_respect_annotation_metadata(
+ object_=connection_config, annotation=ConnectionProfileConfig, direction="write"
+ ),
+ "strategy_overrides": convert_and_respect_annotation_metadata(
+ object_=strategy_overrides, annotation=ConnectionProfileStrategyOverrides, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateConnectionProfileResponseContent,
+ parse_obj_as(
+ type_=UpdateConnectionProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/connections/__init__.py b/src/auth0/management/connections/__init__.py
new file mode 100644
index 00000000..208e86a8
--- /dev/null
+++ b/src/auth0/management/connections/__init__.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import clients, directory_provisioning, keys, scim_configuration, users
+_dynamic_imports: typing.Dict[str, str] = {
+ "clients": ".clients",
+ "directory_provisioning": ".directory_provisioning",
+ "keys": ".keys",
+ "scim_configuration": ".scim_configuration",
+ "users": ".users",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["clients", "directory_provisioning", "keys", "scim_configuration", "users"]
diff --git a/src/auth0/management/connections/client.py b/src/auth0/management/connections/client.py
new file mode 100644
index 00000000..818f24d6
--- /dev/null
+++ b/src/auth0/management/connections/client.py
@@ -0,0 +1,936 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.connection_authentication_purpose import ConnectionAuthenticationPurpose
+from ..types.connection_connected_accounts_purpose import ConnectionConnectedAccountsPurpose
+from ..types.connection_for_list import ConnectionForList
+from ..types.connection_identity_provider_enum import ConnectionIdentityProviderEnum
+from ..types.connection_properties_options import ConnectionPropertiesOptions
+from ..types.connection_strategy_enum import ConnectionStrategyEnum
+from ..types.connections_metadata import ConnectionsMetadata
+from ..types.create_connection_response_content import CreateConnectionResponseContent
+from ..types.get_connection_response_content import GetConnectionResponseContent
+from ..types.list_connections_checkpoint_paginated_response_content import (
+ ListConnectionsCheckpointPaginatedResponseContent,
+)
+from ..types.update_connection_options import UpdateConnectionOptions
+from ..types.update_connection_response_content import UpdateConnectionResponseContent
+from .raw_client import AsyncRawConnectionsClient, RawConnectionsClient
+
+if typing.TYPE_CHECKING:
+ from .clients.client import AsyncClientsClient, ClientsClient
+ from .directory_provisioning.client import AsyncDirectoryProvisioningClient, DirectoryProvisioningClient
+ from .keys.client import AsyncKeysClient, KeysClient
+ from .scim_configuration.client import AsyncScimConfigurationClient, ScimConfigurationClient
+ from .users.client import AsyncUsersClient, UsersClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ConnectionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawConnectionsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._clients: typing.Optional[ClientsClient] = None
+ self._directory_provisioning: typing.Optional[DirectoryProvisioningClient] = None
+ self._keys: typing.Optional[KeysClient] = None
+ self._scim_configuration: typing.Optional[ScimConfigurationClient] = None
+ self._users: typing.Optional[UsersClient] = None
+
+ @property
+ def with_raw_response(self) -> RawConnectionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawConnectionsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ strategy: typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]] = None,
+ name: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectionForList, ListConnectionsCheckpointPaginatedResponseContent]:
+ """
+ Retrieves detailed list of all connections that match the specified strategy. If no strategy is provided, all connections within your tenant are retrieved. This action can accept a list of fields to include or exclude from the resulting list of connections.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ strategy : typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]]
+ Provide strategies to only retrieve connections with such strategies
+
+ name : typing.Optional[str]
+ Provide the name of the connection to retrieve
+
+ fields : typing.Optional[str]
+ A comma separated list of fields to include or exclude (depending on include_fields) from the result, empty to retrieve all fields
+
+ include_fields : typing.Optional[bool]
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectionForList, ListConnectionsCheckpointPaginatedResponseContent]
+ The connections were retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.connections.list(
+ from_="from",
+ take=1,
+ name="name",
+ fields="fields",
+ include_fields=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ from_=from_,
+ take=take,
+ strategy=strategy,
+ name=name,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+
+ def create(
+ self,
+ *,
+ name: str,
+ strategy: ConnectionIdentityProviderEnum,
+ display_name: typing.Optional[str] = OMIT,
+ options: typing.Optional[ConnectionPropertiesOptions] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ is_domain_connection: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ realms: typing.Optional[typing.Sequence[str]] = OMIT,
+ metadata: typing.Optional[ConnectionsMetadata] = OMIT,
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = OMIT,
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateConnectionResponseContent:
+ """
+ Creates a new connection according to the JSON object received in body.true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+ show_as_button : typing.Optional[bool]
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD. (Defaults to false.)
+
+ realms : typing.Optional[typing.Sequence[str]]
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+
+ metadata : typing.Optional[ConnectionsMetadata]
+
+ authentication : typing.Optional[ConnectionAuthenticationPurpose]
+
+ connected_accounts : typing.Optional[ConnectionConnectedAccountsPurpose]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateConnectionResponseContent
+ The connection was created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.create(
+ name="name",
+ strategy="ad",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name,
+ strategy=strategy,
+ display_name=display_name,
+ options=options,
+ enabled_clients=enabled_clients,
+ is_domain_connection=is_domain_connection,
+ show_as_button=show_as_button,
+ realms=realms,
+ metadata=metadata,
+ authentication=authentication,
+ connected_accounts=connected_accounts,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetConnectionResponseContent:
+ """
+ Retrieve details for a specified connection along with options that can be used for identity provider configuration.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve
+
+ fields : typing.Optional[str]
+ A comma separated list of fields to include or exclude (depending on include_fields) from the result, empty to retrieve all fields
+
+ include_fields : typing.Optional[bool]
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetConnectionResponseContent
+ The connection was retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.get(
+ id="id",
+ fields="fields",
+ include_fields=True,
+ )
+ """
+ _response = self._raw_client.get(
+ id, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Removes a specific connection from your tenant. This action cannot be undone. Once removed, users can no longer use this connection to authenticate.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ display_name: typing.Optional[str] = OMIT,
+ options: typing.Optional[UpdateConnectionOptions] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ is_domain_connection: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ realms: typing.Optional[typing.Sequence[str]] = OMIT,
+ metadata: typing.Optional[ConnectionsMetadata] = OMIT,
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = OMIT,
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateConnectionResponseContent:
+ """
+ Update details for a specific connection, including option properties for identity provider configuration.
+
+ Note: If you use the options parameter, the entire options object is overriden. To avoid partial data or other issues, ensure all parameters are present when using this option.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to update
+
+ display_name : typing.Optional[str]
+ The connection name used in the new universal login experience. If display_name is not included in the request, the field will be overwritten with the name value.
+
+ options : typing.Optional[UpdateConnectionOptions]
+
+ enabled_clients : typing.Optional[typing.Sequence[str]]
+ DEPRECATED property. Use the PATCH /v2/connections/{id}/clients endpoint to enable or disable the connection for any clients.
+
+ is_domain_connection : typing.Optional[bool]
+ true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+ show_as_button : typing.Optional[bool]
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD. (Defaults to false.)
+
+ realms : typing.Optional[typing.Sequence[str]]
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+
+ metadata : typing.Optional[ConnectionsMetadata]
+
+ authentication : typing.Optional[ConnectionAuthenticationPurpose]
+
+ connected_accounts : typing.Optional[ConnectionConnectedAccountsPurpose]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateConnectionResponseContent
+ The connection was updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ display_name=display_name,
+ options=options,
+ enabled_clients=enabled_clients,
+ is_domain_connection=is_domain_connection,
+ show_as_button=show_as_button,
+ realms=realms,
+ metadata=metadata,
+ authentication=authentication,
+ connected_accounts=connected_accounts,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def check_status(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Retrieves the status of an ad/ldap connection referenced by its ID. 200 OK http status code response is returned when the connection is online, otherwise a 404 status code is returned along with an error message
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection to check
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.check_status(
+ id="id",
+ )
+ """
+ _response = self._raw_client.check_status(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def clients(self):
+ if self._clients is None:
+ from .clients.client import ClientsClient # noqa: E402
+
+ self._clients = ClientsClient(client_wrapper=self._client_wrapper)
+ return self._clients
+
+ @property
+ def directory_provisioning(self):
+ if self._directory_provisioning is None:
+ from .directory_provisioning.client import DirectoryProvisioningClient # noqa: E402
+
+ self._directory_provisioning = DirectoryProvisioningClient(client_wrapper=self._client_wrapper)
+ return self._directory_provisioning
+
+ @property
+ def keys(self):
+ if self._keys is None:
+ from .keys.client import KeysClient # noqa: E402
+
+ self._keys = KeysClient(client_wrapper=self._client_wrapper)
+ return self._keys
+
+ @property
+ def scim_configuration(self):
+ if self._scim_configuration is None:
+ from .scim_configuration.client import ScimConfigurationClient # noqa: E402
+
+ self._scim_configuration = ScimConfigurationClient(client_wrapper=self._client_wrapper)
+ return self._scim_configuration
+
+ @property
+ def users(self):
+ if self._users is None:
+ from .users.client import UsersClient # noqa: E402
+
+ self._users = UsersClient(client_wrapper=self._client_wrapper)
+ return self._users
+
+
+class AsyncConnectionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawConnectionsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._clients: typing.Optional[AsyncClientsClient] = None
+ self._directory_provisioning: typing.Optional[AsyncDirectoryProvisioningClient] = None
+ self._keys: typing.Optional[AsyncKeysClient] = None
+ self._scim_configuration: typing.Optional[AsyncScimConfigurationClient] = None
+ self._users: typing.Optional[AsyncUsersClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawConnectionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawConnectionsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ strategy: typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]] = None,
+ name: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectionForList, ListConnectionsCheckpointPaginatedResponseContent]:
+ """
+ Retrieves detailed list of all connections that match the specified strategy. If no strategy is provided, all connections within your tenant are retrieved. This action can accept a list of fields to include or exclude from the resulting list of connections.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ strategy : typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]]
+ Provide strategies to only retrieve connections with such strategies
+
+ name : typing.Optional[str]
+ Provide the name of the connection to retrieve
+
+ fields : typing.Optional[str]
+ A comma separated list of fields to include or exclude (depending on include_fields) from the result, empty to retrieve all fields
+
+ include_fields : typing.Optional[bool]
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectionForList, ListConnectionsCheckpointPaginatedResponseContent]
+ The connections were retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.connections.list(
+ from_="from",
+ take=1,
+ name="name",
+ fields="fields",
+ include_fields=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ from_=from_,
+ take=take,
+ strategy=strategy,
+ name=name,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+
+ async def create(
+ self,
+ *,
+ name: str,
+ strategy: ConnectionIdentityProviderEnum,
+ display_name: typing.Optional[str] = OMIT,
+ options: typing.Optional[ConnectionPropertiesOptions] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ is_domain_connection: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ realms: typing.Optional[typing.Sequence[str]] = OMIT,
+ metadata: typing.Optional[ConnectionsMetadata] = OMIT,
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = OMIT,
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateConnectionResponseContent:
+ """
+ Creates a new connection according to the JSON object received in body.true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+ show_as_button : typing.Optional[bool]
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD. (Defaults to false.)
+
+ realms : typing.Optional[typing.Sequence[str]]
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+
+ metadata : typing.Optional[ConnectionsMetadata]
+
+ authentication : typing.Optional[ConnectionAuthenticationPurpose]
+
+ connected_accounts : typing.Optional[ConnectionConnectedAccountsPurpose]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateConnectionResponseContent
+ The connection was created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.create(
+ name="name",
+ strategy="ad",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name,
+ strategy=strategy,
+ display_name=display_name,
+ options=options,
+ enabled_clients=enabled_clients,
+ is_domain_connection=is_domain_connection,
+ show_as_button=show_as_button,
+ realms=realms,
+ metadata=metadata,
+ authentication=authentication,
+ connected_accounts=connected_accounts,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetConnectionResponseContent:
+ """
+ Retrieve details for a specified connection along with options that can be used for identity provider configuration.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve
+
+ fields : typing.Optional[str]
+ A comma separated list of fields to include or exclude (depending on include_fields) from the result, empty to retrieve all fields
+
+ include_fields : typing.Optional[bool]
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetConnectionResponseContent
+ The connection was retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.get(
+ id="id",
+ fields="fields",
+ include_fields=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(
+ id, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Removes a specific connection from your tenant. This action cannot be undone. Once removed, users can no longer use this connection to authenticate.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ display_name: typing.Optional[str] = OMIT,
+ options: typing.Optional[UpdateConnectionOptions] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ is_domain_connection: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ realms: typing.Optional[typing.Sequence[str]] = OMIT,
+ metadata: typing.Optional[ConnectionsMetadata] = OMIT,
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = OMIT,
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateConnectionResponseContent:
+ """
+ Update details for a specific connection, including option properties for identity provider configuration.
+
+ Note: If you use the options parameter, the entire options object is overriden. To avoid partial data or other issues, ensure all parameters are present when using this option.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to update
+
+ display_name : typing.Optional[str]
+ The connection name used in the new universal login experience. If display_name is not included in the request, the field will be overwritten with the name value.
+
+ options : typing.Optional[UpdateConnectionOptions]
+
+ enabled_clients : typing.Optional[typing.Sequence[str]]
+ DEPRECATED property. Use the PATCH /v2/connections/{id}/clients endpoint to enable or disable the connection for any clients.
+
+ is_domain_connection : typing.Optional[bool]
+ true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+ show_as_button : typing.Optional[bool]
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD. (Defaults to false.)
+
+ realms : typing.Optional[typing.Sequence[str]]
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+
+ metadata : typing.Optional[ConnectionsMetadata]
+
+ authentication : typing.Optional[ConnectionAuthenticationPurpose]
+
+ connected_accounts : typing.Optional[ConnectionConnectedAccountsPurpose]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateConnectionResponseContent
+ The connection was updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ display_name=display_name,
+ options=options,
+ enabled_clients=enabled_clients,
+ is_domain_connection=is_domain_connection,
+ show_as_button=show_as_button,
+ realms=realms,
+ metadata=metadata,
+ authentication=authentication,
+ connected_accounts=connected_accounts,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def check_status(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Retrieves the status of an ad/ldap connection referenced by its ID. 200 OK http status code response is returned when the connection is online, otherwise a 404 status code is returned along with an error message
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection to check
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.check_status(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.check_status(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def clients(self):
+ if self._clients is None:
+ from .clients.client import AsyncClientsClient # noqa: E402
+
+ self._clients = AsyncClientsClient(client_wrapper=self._client_wrapper)
+ return self._clients
+
+ @property
+ def directory_provisioning(self):
+ if self._directory_provisioning is None:
+ from .directory_provisioning.client import AsyncDirectoryProvisioningClient # noqa: E402
+
+ self._directory_provisioning = AsyncDirectoryProvisioningClient(client_wrapper=self._client_wrapper)
+ return self._directory_provisioning
+
+ @property
+ def keys(self):
+ if self._keys is None:
+ from .keys.client import AsyncKeysClient # noqa: E402
+
+ self._keys = AsyncKeysClient(client_wrapper=self._client_wrapper)
+ return self._keys
+
+ @property
+ def scim_configuration(self):
+ if self._scim_configuration is None:
+ from .scim_configuration.client import AsyncScimConfigurationClient # noqa: E402
+
+ self._scim_configuration = AsyncScimConfigurationClient(client_wrapper=self._client_wrapper)
+ return self._scim_configuration
+
+ @property
+ def users(self):
+ if self._users is None:
+ from .users.client import AsyncUsersClient # noqa: E402
+
+ self._users = AsyncUsersClient(client_wrapper=self._client_wrapper)
+ return self._users
diff --git a/src/auth0/management/connections/clients/__init__.py b/src/auth0/management/connections/clients/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/connections/clients/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/connections/clients/client.py b/src/auth0/management/connections/clients/client.py
new file mode 100644
index 00000000..4ee5934d
--- /dev/null
+++ b/src/auth0/management/connections/clients/client.py
@@ -0,0 +1,251 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.connection_enabled_client import ConnectionEnabledClient
+from ...types.get_connection_enabled_clients_response_content import GetConnectionEnabledClientsResponseContent
+from ...types.update_enabled_client_connections_request_content import UpdateEnabledClientConnectionsRequestContent
+from .raw_client import AsyncRawClientsClient, RawClientsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ClientsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawClientsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawClientsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawClientsClient
+ """
+ return self._raw_client
+
+ def get(
+ self,
+ id: str,
+ *,
+ take: typing.Optional[int] = 50,
+ from_: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectionEnabledClient, GetConnectionEnabledClientsResponseContent]:
+ """
+ Retrieve all clients that have the specified connection enabled.
+
+ Note: The first time you call this endpoint, omit the from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection for which enabled clients are to be retrieved
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectionEnabledClient, GetConnectionEnabledClientsResponseContent]
+ Success
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.connections.clients.get(
+ id="id",
+ take=1,
+ from_="from",
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.get(id, take=take, from_=from_, request_options=request_options)
+
+ def update(
+ self,
+ id: str,
+ *,
+ request: UpdateEnabledClientConnectionsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+ The id of the connection to modify
+
+ request : UpdateEnabledClientConnectionsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0, UpdateEnabledClientConnectionsRequestContentItem
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.clients.update(
+ id="id",
+ request=[
+ UpdateEnabledClientConnectionsRequestContentItem(
+ client_id="client_id",
+ status=True,
+ )
+ ],
+ )
+ """
+ _response = self._raw_client.update(id, request=request, request_options=request_options)
+ return _response.data
+
+
+class AsyncClientsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawClientsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawClientsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawClientsClient
+ """
+ return self._raw_client
+
+ async def get(
+ self,
+ id: str,
+ *,
+ take: typing.Optional[int] = 50,
+ from_: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectionEnabledClient, GetConnectionEnabledClientsResponseContent]:
+ """
+ Retrieve all clients that have the specified connection enabled.
+
+ Note: The first time you call this endpoint, omit the from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection for which enabled clients are to be retrieved
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectionEnabledClient, GetConnectionEnabledClientsResponseContent]
+ Success
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.connections.clients.get(
+ id="id",
+ take=1,
+ from_="from",
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.get(id, take=take, from_=from_, request_options=request_options)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ request: UpdateEnabledClientConnectionsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+ The id of the connection to modify
+
+ request : UpdateEnabledClientConnectionsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, UpdateEnabledClientConnectionsRequestContentItem
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.clients.update(
+ id="id",
+ request=[
+ UpdateEnabledClientConnectionsRequestContentItem(
+ client_id="client_id",
+ status=True,
+ )
+ ],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(id, request=request, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/connections/clients/raw_client.py b/src/auth0/management/connections/clients/raw_client.py
new file mode 100644
index 00000000..ba9c0f8a
--- /dev/null
+++ b/src/auth0/management/connections/clients/raw_client.py
@@ -0,0 +1,471 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.connection_enabled_client import ConnectionEnabledClient
+from ...types.get_connection_enabled_clients_response_content import GetConnectionEnabledClientsResponseContent
+from ...types.update_enabled_client_connections_request_content import UpdateEnabledClientConnectionsRequestContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawClientsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self,
+ id: str,
+ *,
+ take: typing.Optional[int] = 50,
+ from_: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectionEnabledClient, GetConnectionEnabledClientsResponseContent]:
+ """
+ Retrieve all clients that have the specified connection enabled.
+
+ Note: The first time you call this endpoint, omit the from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection for which enabled clients are to be retrieved
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectionEnabledClient, GetConnectionEnabledClientsResponseContent]
+ Success
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/clients",
+ method="GET",
+ params={
+ "take": take,
+ "from": from_,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ GetConnectionEnabledClientsResponseContent,
+ parse_obj_as(
+ type_=GetConnectionEnabledClientsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.clients
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.get(
+ id,
+ take=take,
+ from_=_parsed_next,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ request: UpdateEnabledClientConnectionsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+ The id of the connection to modify
+
+ request : UpdateEnabledClientConnectionsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/clients",
+ method="PATCH",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=UpdateEnabledClientConnectionsRequestContent, direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawClientsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self,
+ id: str,
+ *,
+ take: typing.Optional[int] = 50,
+ from_: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectionEnabledClient, GetConnectionEnabledClientsResponseContent]:
+ """
+ Retrieve all clients that have the specified connection enabled.
+
+ Note: The first time you call this endpoint, omit the from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection for which enabled clients are to be retrieved
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectionEnabledClient, GetConnectionEnabledClientsResponseContent]
+ Success
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/clients",
+ method="GET",
+ params={
+ "take": take,
+ "from": from_,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ GetConnectionEnabledClientsResponseContent,
+ parse_obj_as(
+ type_=GetConnectionEnabledClientsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.clients
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.get(
+ id,
+ take=take,
+ from_=_parsed_next,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ request: UpdateEnabledClientConnectionsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+ The id of the connection to modify
+
+ request : UpdateEnabledClientConnectionsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/clients",
+ method="PATCH",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=UpdateEnabledClientConnectionsRequestContent, direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/connections/directory_provisioning/__init__.py b/src/auth0/management/connections/directory_provisioning/__init__.py
new file mode 100644
index 00000000..7cda7981
--- /dev/null
+++ b/src/auth0/management/connections/directory_provisioning/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import synchronizations
+_dynamic_imports: typing.Dict[str, str] = {"synchronizations": ".synchronizations"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["synchronizations"]
diff --git a/src/auth0/management/connections/directory_provisioning/client.py b/src/auth0/management/connections/directory_provisioning/client.py
new file mode 100644
index 00000000..de2ae03e
--- /dev/null
+++ b/src/auth0/management/connections/directory_provisioning/client.py
@@ -0,0 +1,466 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.create_directory_provisioning_request_content import CreateDirectoryProvisioningRequestContent
+from ...types.create_directory_provisioning_response_content import CreateDirectoryProvisioningResponseContent
+from ...types.get_directory_provisioning_default_mapping_response_content import (
+ GetDirectoryProvisioningDefaultMappingResponseContent,
+)
+from ...types.get_directory_provisioning_response_content import GetDirectoryProvisioningResponseContent
+from ...types.update_directory_provisioning_request_content import UpdateDirectoryProvisioningRequestContent
+from ...types.update_directory_provisioning_response_content import UpdateDirectoryProvisioningResponseContent
+from .raw_client import AsyncRawDirectoryProvisioningClient, RawDirectoryProvisioningClient
+
+if typing.TYPE_CHECKING:
+ from .synchronizations.client import AsyncSynchronizationsClient, SynchronizationsClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class DirectoryProvisioningClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawDirectoryProvisioningClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._synchronizations: typing.Optional[SynchronizationsClient] = None
+
+ @property
+ def with_raw_response(self) -> RawDirectoryProvisioningClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawDirectoryProvisioningClient
+ """
+ return self._raw_client
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetDirectoryProvisioningResponseContent:
+ """
+ Retrieve the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetDirectoryProvisioningResponseContent
+ The connection's directory provisioning configuration. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.directory_provisioning.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def create(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[CreateDirectoryProvisioningRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateDirectoryProvisioningResponseContent:
+ """
+ Create a directory provisioning configuration for a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its directory provisioning configuration
+
+ request : typing.Optional[CreateDirectoryProvisioningRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateDirectoryProvisioningResponseContent
+ The connection's directory provisioning configuration was created. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0, CreateDirectoryProvisioningRequestContent
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.directory_provisioning.create(
+ id="id",
+ request=CreateDirectoryProvisioningRequestContent(),
+ )
+ """
+ _response = self._raw_client.create(id, request=request, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.directory_provisioning.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[UpdateDirectoryProvisioningRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateDirectoryProvisioningResponseContent:
+ """
+ Update the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its directory provisioning configuration
+
+ request : typing.Optional[UpdateDirectoryProvisioningRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateDirectoryProvisioningResponseContent
+ The connection's directory provisioning configuration was updated. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0, UpdateDirectoryProvisioningRequestContent
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.directory_provisioning.update(
+ id="id",
+ request=UpdateDirectoryProvisioningRequestContent(),
+ )
+ """
+ _response = self._raw_client.update(id, request=request, request_options=request_options)
+ return _response.data
+
+ def get_default_mapping(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetDirectoryProvisioningDefaultMappingResponseContent:
+ """
+ Retrieve the directory provisioning default attribute mapping of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetDirectoryProvisioningDefaultMappingResponseContent
+ The connection's directory provisioning default mapping. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.directory_provisioning.get_default_mapping(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get_default_mapping(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def synchronizations(self):
+ if self._synchronizations is None:
+ from .synchronizations.client import SynchronizationsClient # noqa: E402
+
+ self._synchronizations = SynchronizationsClient(client_wrapper=self._client_wrapper)
+ return self._synchronizations
+
+
+class AsyncDirectoryProvisioningClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawDirectoryProvisioningClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._synchronizations: typing.Optional[AsyncSynchronizationsClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawDirectoryProvisioningClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawDirectoryProvisioningClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetDirectoryProvisioningResponseContent:
+ """
+ Retrieve the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetDirectoryProvisioningResponseContent
+ The connection's directory provisioning configuration. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.directory_provisioning.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def create(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[CreateDirectoryProvisioningRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateDirectoryProvisioningResponseContent:
+ """
+ Create a directory provisioning configuration for a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its directory provisioning configuration
+
+ request : typing.Optional[CreateDirectoryProvisioningRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateDirectoryProvisioningResponseContent
+ The connection's directory provisioning configuration was created. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, CreateDirectoryProvisioningRequestContent
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.directory_provisioning.create(
+ id="id",
+ request=CreateDirectoryProvisioningRequestContent(),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(id, request=request, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.directory_provisioning.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[UpdateDirectoryProvisioningRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateDirectoryProvisioningResponseContent:
+ """
+ Update the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its directory provisioning configuration
+
+ request : typing.Optional[UpdateDirectoryProvisioningRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateDirectoryProvisioningResponseContent
+ The connection's directory provisioning configuration was updated. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, UpdateDirectoryProvisioningRequestContent
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.directory_provisioning.update(
+ id="id",
+ request=UpdateDirectoryProvisioningRequestContent(),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(id, request=request, request_options=request_options)
+ return _response.data
+
+ async def get_default_mapping(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetDirectoryProvisioningDefaultMappingResponseContent:
+ """
+ Retrieve the directory provisioning default attribute mapping of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetDirectoryProvisioningDefaultMappingResponseContent
+ The connection's directory provisioning default mapping. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.directory_provisioning.get_default_mapping(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_default_mapping(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def synchronizations(self):
+ if self._synchronizations is None:
+ from .synchronizations.client import AsyncSynchronizationsClient # noqa: E402
+
+ self._synchronizations = AsyncSynchronizationsClient(client_wrapper=self._client_wrapper)
+ return self._synchronizations
diff --git a/src/auth0/management/connections/directory_provisioning/raw_client.py b/src/auth0/management/connections/directory_provisioning/raw_client.py
new file mode 100644
index 00000000..e0abfb8d
--- /dev/null
+++ b/src/auth0/management/connections/directory_provisioning/raw_client.py
@@ -0,0 +1,1043 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.conflict_error import ConflictError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.create_directory_provisioning_request_content import CreateDirectoryProvisioningRequestContent
+from ...types.create_directory_provisioning_response_content import CreateDirectoryProvisioningResponseContent
+from ...types.get_directory_provisioning_default_mapping_response_content import (
+ GetDirectoryProvisioningDefaultMappingResponseContent,
+)
+from ...types.get_directory_provisioning_response_content import GetDirectoryProvisioningResponseContent
+from ...types.update_directory_provisioning_request_content import UpdateDirectoryProvisioningRequestContent
+from ...types.update_directory_provisioning_response_content import UpdateDirectoryProvisioningResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawDirectoryProvisioningClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetDirectoryProvisioningResponseContent]:
+ """
+ Retrieve the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetDirectoryProvisioningResponseContent]
+ The connection's directory provisioning configuration. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetDirectoryProvisioningResponseContent,
+ parse_obj_as(
+ type_=GetDirectoryProvisioningResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[CreateDirectoryProvisioningRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateDirectoryProvisioningResponseContent]:
+ """
+ Create a directory provisioning configuration for a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its directory provisioning configuration
+
+ request : typing.Optional[CreateDirectoryProvisioningRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateDirectoryProvisioningResponseContent]
+ The connection's directory provisioning configuration was created. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning",
+ method="POST",
+ json=convert_and_respect_annotation_metadata(
+ object_=request,
+ annotation=typing.Optional[CreateDirectoryProvisioningRequestContent],
+ direction="write",
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateDirectoryProvisioningResponseContent,
+ parse_obj_as(
+ type_=CreateDirectoryProvisioningResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[UpdateDirectoryProvisioningRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateDirectoryProvisioningResponseContent]:
+ """
+ Update the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its directory provisioning configuration
+
+ request : typing.Optional[UpdateDirectoryProvisioningRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateDirectoryProvisioningResponseContent]
+ The connection's directory provisioning configuration was updated. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning",
+ method="PATCH",
+ json=convert_and_respect_annotation_metadata(
+ object_=request,
+ annotation=typing.Optional[UpdateDirectoryProvisioningRequestContent],
+ direction="write",
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateDirectoryProvisioningResponseContent,
+ parse_obj_as(
+ type_=UpdateDirectoryProvisioningResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get_default_mapping(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetDirectoryProvisioningDefaultMappingResponseContent]:
+ """
+ Retrieve the directory provisioning default attribute mapping of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetDirectoryProvisioningDefaultMappingResponseContent]
+ The connection's directory provisioning default mapping. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning/default-mapping",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetDirectoryProvisioningDefaultMappingResponseContent,
+ parse_obj_as(
+ type_=GetDirectoryProvisioningDefaultMappingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawDirectoryProvisioningClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetDirectoryProvisioningResponseContent]:
+ """
+ Retrieve the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetDirectoryProvisioningResponseContent]
+ The connection's directory provisioning configuration. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetDirectoryProvisioningResponseContent,
+ parse_obj_as(
+ type_=GetDirectoryProvisioningResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[CreateDirectoryProvisioningRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateDirectoryProvisioningResponseContent]:
+ """
+ Create a directory provisioning configuration for a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its directory provisioning configuration
+
+ request : typing.Optional[CreateDirectoryProvisioningRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateDirectoryProvisioningResponseContent]
+ The connection's directory provisioning configuration was created. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning",
+ method="POST",
+ json=convert_and_respect_annotation_metadata(
+ object_=request,
+ annotation=typing.Optional[CreateDirectoryProvisioningRequestContent],
+ direction="write",
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateDirectoryProvisioningResponseContent,
+ parse_obj_as(
+ type_=CreateDirectoryProvisioningResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[UpdateDirectoryProvisioningRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateDirectoryProvisioningResponseContent]:
+ """
+ Update the directory provisioning configuration of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its directory provisioning configuration
+
+ request : typing.Optional[UpdateDirectoryProvisioningRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateDirectoryProvisioningResponseContent]
+ The connection's directory provisioning configuration was updated. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning",
+ method="PATCH",
+ json=convert_and_respect_annotation_metadata(
+ object_=request,
+ annotation=typing.Optional[UpdateDirectoryProvisioningRequestContent],
+ direction="write",
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateDirectoryProvisioningResponseContent,
+ parse_obj_as(
+ type_=UpdateDirectoryProvisioningResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get_default_mapping(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetDirectoryProvisioningDefaultMappingResponseContent]:
+ """
+ Retrieve the directory provisioning default attribute mapping of a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its directory provisioning configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetDirectoryProvisioningDefaultMappingResponseContent]
+ The connection's directory provisioning default mapping. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning/default-mapping",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetDirectoryProvisioningDefaultMappingResponseContent,
+ parse_obj_as(
+ type_=GetDirectoryProvisioningDefaultMappingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/connections/directory_provisioning/synchronizations/__init__.py b/src/auth0/management/connections/directory_provisioning/synchronizations/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/connections/directory_provisioning/synchronizations/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/connections/directory_provisioning/synchronizations/client.py b/src/auth0/management/connections/directory_provisioning/synchronizations/client.py
new file mode 100644
index 00000000..23b2a953
--- /dev/null
+++ b/src/auth0/management/connections/directory_provisioning/synchronizations/client.py
@@ -0,0 +1,114 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.request_options import RequestOptions
+from ....types.create_directory_synchronization_response_content import CreateDirectorySynchronizationResponseContent
+from .raw_client import AsyncRawSynchronizationsClient, RawSynchronizationsClient
+
+
+class SynchronizationsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSynchronizationsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawSynchronizationsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSynchronizationsClient
+ """
+ return self._raw_client
+
+ def create(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> CreateDirectorySynchronizationResponseContent:
+ """
+ Request an on-demand synchronization of the directory.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to trigger synchronization for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateDirectorySynchronizationResponseContent
+ The directory synchronization was triggered. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.directory_provisioning.synchronizations.create(
+ id="id",
+ )
+ """
+ _response = self._raw_client.create(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncSynchronizationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSynchronizationsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawSynchronizationsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSynchronizationsClient
+ """
+ return self._raw_client
+
+ async def create(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> CreateDirectorySynchronizationResponseContent:
+ """
+ Request an on-demand synchronization of the directory.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to trigger synchronization for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateDirectorySynchronizationResponseContent
+ The directory synchronization was triggered. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.directory_provisioning.synchronizations.create(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/connections/directory_provisioning/synchronizations/raw_client.py b/src/auth0/management/connections/directory_provisioning/synchronizations/raw_client.py
new file mode 100644
index 00000000..5829c8f7
--- /dev/null
+++ b/src/auth0/management/connections/directory_provisioning/synchronizations/raw_client.py
@@ -0,0 +1,238 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ....core.api_error import ApiError
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.http_response import AsyncHttpResponse, HttpResponse
+from ....core.jsonable_encoder import jsonable_encoder
+from ....core.pydantic_utilities import parse_obj_as
+from ....core.request_options import RequestOptions
+from ....errors.bad_request_error import BadRequestError
+from ....errors.conflict_error import ConflictError
+from ....errors.forbidden_error import ForbiddenError
+from ....errors.not_found_error import NotFoundError
+from ....errors.too_many_requests_error import TooManyRequestsError
+from ....errors.unauthorized_error import UnauthorizedError
+from ....types.create_directory_synchronization_response_content import CreateDirectorySynchronizationResponseContent
+
+
+class RawSynchronizationsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def create(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[CreateDirectorySynchronizationResponseContent]:
+ """
+ Request an on-demand synchronization of the directory.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to trigger synchronization for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateDirectorySynchronizationResponseContent]
+ The directory synchronization was triggered. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning/synchronizations",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateDirectorySynchronizationResponseContent,
+ parse_obj_as(
+ type_=CreateDirectorySynchronizationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSynchronizationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def create(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[CreateDirectorySynchronizationResponseContent]:
+ """
+ Request an on-demand synchronization of the directory.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to trigger synchronization for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateDirectorySynchronizationResponseContent]
+ The directory synchronization was triggered. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/directory-provisioning/synchronizations",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateDirectorySynchronizationResponseContent,
+ parse_obj_as(
+ type_=CreateDirectorySynchronizationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/connections/keys/__init__.py b/src/auth0/management/connections/keys/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/connections/keys/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/connections/keys/client.py b/src/auth0/management/connections/keys/client.py
new file mode 100644
index 00000000..1284137e
--- /dev/null
+++ b/src/auth0/management/connections/keys/client.py
@@ -0,0 +1,205 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.connection_key import ConnectionKey
+from ...types.rotate_connection_keys_request_content import RotateConnectionKeysRequestContent
+from ...types.rotate_connections_keys_response_content import RotateConnectionsKeysResponseContent
+from .raw_client import AsyncRawKeysClient, RawKeysClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class KeysClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawKeysClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawKeysClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawKeysClient
+ """
+ return self._raw_client
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[ConnectionKey]:
+ """
+ Gets the connection keys for the Okta or OIDC connection strategy.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[ConnectionKey]
+ Connection keys successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.keys.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def rotate(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[RotateConnectionKeysRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> RotateConnectionsKeysResponseContent:
+ """
+ Rotates the connection keys for the Okta or OIDC connection strategies.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection
+
+ request : typing.Optional[RotateConnectionKeysRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RotateConnectionsKeysResponseContent
+ Connection keys successfully rotated.
+
+ Examples
+ --------
+ from auth0 import Auth0, RotateConnectionKeysRequestContent
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.keys.rotate(
+ id="id",
+ request=RotateConnectionKeysRequestContent(),
+ )
+ """
+ _response = self._raw_client.rotate(id, request=request, request_options=request_options)
+ return _response.data
+
+
+class AsyncKeysClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawKeysClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawKeysClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawKeysClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[ConnectionKey]:
+ """
+ Gets the connection keys for the Okta or OIDC connection strategy.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[ConnectionKey]
+ Connection keys successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.keys.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def rotate(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[RotateConnectionKeysRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> RotateConnectionsKeysResponseContent:
+ """
+ Rotates the connection keys for the Okta or OIDC connection strategies.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection
+
+ request : typing.Optional[RotateConnectionKeysRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RotateConnectionsKeysResponseContent
+ Connection keys successfully rotated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, RotateConnectionKeysRequestContent
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.keys.rotate(
+ id="id",
+ request=RotateConnectionKeysRequestContent(),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.rotate(id, request=request, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/connections/keys/raw_client.py b/src/auth0/management/connections/keys/raw_client.py
new file mode 100644
index 00000000..262c687c
--- /dev/null
+++ b/src/auth0/management/connections/keys/raw_client.py
@@ -0,0 +1,435 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.connection_key import ConnectionKey
+from ...types.rotate_connection_keys_request_content import RotateConnectionKeysRequestContent
+from ...types.rotate_connections_keys_response_content import RotateConnectionsKeysResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawKeysClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[typing.List[ConnectionKey]]:
+ """
+ Gets the connection keys for the Okta or OIDC connection strategy.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[ConnectionKey]]
+ Connection keys successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/keys",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[ConnectionKey],
+ parse_obj_as(
+ type_=typing.List[ConnectionKey], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def rotate(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[RotateConnectionKeysRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[RotateConnectionsKeysResponseContent]:
+ """
+ Rotates the connection keys for the Okta or OIDC connection strategies.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection
+
+ request : typing.Optional[RotateConnectionKeysRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[RotateConnectionsKeysResponseContent]
+ Connection keys successfully rotated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/keys/rotate",
+ method="POST",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=typing.Optional[RotateConnectionKeysRequestContent], direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RotateConnectionsKeysResponseContent,
+ parse_obj_as(
+ type_=RotateConnectionsKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawKeysClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[typing.List[ConnectionKey]]:
+ """
+ Gets the connection keys for the Okta or OIDC connection strategy.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[ConnectionKey]]
+ Connection keys successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/keys",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[ConnectionKey],
+ parse_obj_as(
+ type_=typing.List[ConnectionKey], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def rotate(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[RotateConnectionKeysRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[RotateConnectionsKeysResponseContent]:
+ """
+ Rotates the connection keys for the Okta or OIDC connection strategies.
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection
+
+ request : typing.Optional[RotateConnectionKeysRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[RotateConnectionsKeysResponseContent]
+ Connection keys successfully rotated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/keys/rotate",
+ method="POST",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=typing.Optional[RotateConnectionKeysRequestContent], direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RotateConnectionsKeysResponseContent,
+ parse_obj_as(
+ type_=RotateConnectionsKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/connections/raw_client.py b/src/auth0/management/connections/raw_client.py
new file mode 100644
index 00000000..2305c939
--- /dev/null
+++ b/src/auth0/management/connections/raw_client.py
@@ -0,0 +1,1509 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.connection_authentication_purpose import ConnectionAuthenticationPurpose
+from ..types.connection_connected_accounts_purpose import ConnectionConnectedAccountsPurpose
+from ..types.connection_for_list import ConnectionForList
+from ..types.connection_identity_provider_enum import ConnectionIdentityProviderEnum
+from ..types.connection_properties_options import ConnectionPropertiesOptions
+from ..types.connection_strategy_enum import ConnectionStrategyEnum
+from ..types.connections_metadata import ConnectionsMetadata
+from ..types.create_connection_response_content import CreateConnectionResponseContent
+from ..types.get_connection_response_content import GetConnectionResponseContent
+from ..types.list_connections_checkpoint_paginated_response_content import (
+ ListConnectionsCheckpointPaginatedResponseContent,
+)
+from ..types.update_connection_options import UpdateConnectionOptions
+from ..types.update_connection_response_content import UpdateConnectionResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawConnectionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ strategy: typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]] = None,
+ name: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectionForList, ListConnectionsCheckpointPaginatedResponseContent]:
+ """
+ Retrieves detailed list of all connections that match the specified strategy. If no strategy is provided, all connections within your tenant are retrieved. This action can accept a list of fields to include or exclude from the resulting list of connections.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ strategy : typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]]
+ Provide strategies to only retrieve connections with such strategies
+
+ name : typing.Optional[str]
+ Provide the name of the connection to retrieve
+
+ fields : typing.Optional[str]
+ A comma separated list of fields to include or exclude (depending on include_fields) from the result, empty to retrieve all fields
+
+ include_fields : typing.Optional[bool]
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectionForList, ListConnectionsCheckpointPaginatedResponseContent]
+ The connections were retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "connections",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ "strategy": strategy,
+ "name": name,
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListConnectionsCheckpointPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListConnectionsCheckpointPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.connections
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ from_=_parsed_next,
+ take=take,
+ strategy=strategy,
+ name=name,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: str,
+ strategy: ConnectionIdentityProviderEnum,
+ display_name: typing.Optional[str] = OMIT,
+ options: typing.Optional[ConnectionPropertiesOptions] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ is_domain_connection: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ realms: typing.Optional[typing.Sequence[str]] = OMIT,
+ metadata: typing.Optional[ConnectionsMetadata] = OMIT,
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = OMIT,
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateConnectionResponseContent]:
+ """
+ Creates a new connection according to the JSON object received in body.true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+ show_as_button : typing.Optional[bool]
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD. (Defaults to false.)
+
+ realms : typing.Optional[typing.Sequence[str]]
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+
+ metadata : typing.Optional[ConnectionsMetadata]
+
+ authentication : typing.Optional[ConnectionAuthenticationPurpose]
+
+ connected_accounts : typing.Optional[ConnectionConnectedAccountsPurpose]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateConnectionResponseContent]
+ The connection was created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "connections",
+ method="POST",
+ json={
+ "name": name,
+ "display_name": display_name,
+ "strategy": strategy,
+ "options": convert_and_respect_annotation_metadata(
+ object_=options, annotation=ConnectionPropertiesOptions, direction="write"
+ ),
+ "enabled_clients": enabled_clients,
+ "is_domain_connection": is_domain_connection,
+ "show_as_button": show_as_button,
+ "realms": realms,
+ "metadata": metadata,
+ "authentication": convert_and_respect_annotation_metadata(
+ object_=authentication, annotation=ConnectionAuthenticationPurpose, direction="write"
+ ),
+ "connected_accounts": convert_and_respect_annotation_metadata(
+ object_=connected_accounts, annotation=ConnectionConnectedAccountsPurpose, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateConnectionResponseContent,
+ parse_obj_as(
+ type_=CreateConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[GetConnectionResponseContent]:
+ """
+ Retrieve details for a specified connection along with options that can be used for identity provider configuration.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve
+
+ fields : typing.Optional[str]
+ A comma separated list of fields to include or exclude (depending on include_fields) from the result, empty to retrieve all fields
+
+ include_fields : typing.Optional[bool]
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetConnectionResponseContent]
+ The connection was retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetConnectionResponseContent,
+ parse_obj_as(
+ type_=GetConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Removes a specific connection from your tenant. This action cannot be undone. Once removed, users can no longer use this connection to authenticate.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ display_name: typing.Optional[str] = OMIT,
+ options: typing.Optional[UpdateConnectionOptions] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ is_domain_connection: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ realms: typing.Optional[typing.Sequence[str]] = OMIT,
+ metadata: typing.Optional[ConnectionsMetadata] = OMIT,
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = OMIT,
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateConnectionResponseContent]:
+ """
+ Update details for a specific connection, including option properties for identity provider configuration.
+
+ Note: If you use the options parameter, the entire options object is overriden. To avoid partial data or other issues, ensure all parameters are present when using this option.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to update
+
+ display_name : typing.Optional[str]
+ The connection name used in the new universal login experience. If display_name is not included in the request, the field will be overwritten with the name value.
+
+ options : typing.Optional[UpdateConnectionOptions]
+
+ enabled_clients : typing.Optional[typing.Sequence[str]]
+ DEPRECATED property. Use the PATCH /v2/connections/{id}/clients endpoint to enable or disable the connection for any clients.
+
+ is_domain_connection : typing.Optional[bool]
+ true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+ show_as_button : typing.Optional[bool]
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD. (Defaults to false.)
+
+ realms : typing.Optional[typing.Sequence[str]]
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+
+ metadata : typing.Optional[ConnectionsMetadata]
+
+ authentication : typing.Optional[ConnectionAuthenticationPurpose]
+
+ connected_accounts : typing.Optional[ConnectionConnectedAccountsPurpose]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateConnectionResponseContent]
+ The connection was updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "display_name": display_name,
+ "options": convert_and_respect_annotation_metadata(
+ object_=options, annotation=typing.Optional[UpdateConnectionOptions], direction="write"
+ ),
+ "enabled_clients": enabled_clients,
+ "is_domain_connection": is_domain_connection,
+ "show_as_button": show_as_button,
+ "realms": realms,
+ "metadata": metadata,
+ "authentication": convert_and_respect_annotation_metadata(
+ object_=authentication, annotation=ConnectionAuthenticationPurpose, direction="write"
+ ),
+ "connected_accounts": convert_and_respect_annotation_metadata(
+ object_=connected_accounts, annotation=ConnectionConnectedAccountsPurpose, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateConnectionResponseContent,
+ parse_obj_as(
+ type_=UpdateConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def check_status(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Retrieves the status of an ad/ldap connection referenced by its ID. 200 OK http status code response is returned when the connection is online, otherwise a 404 status code is returned along with an error message
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection to check
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/status",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawConnectionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ strategy: typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]] = None,
+ name: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectionForList, ListConnectionsCheckpointPaginatedResponseContent]:
+ """
+ Retrieves detailed list of all connections that match the specified strategy. If no strategy is provided, all connections within your tenant are retrieved. This action can accept a list of fields to include or exclude from the resulting list of connections.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ strategy : typing.Optional[typing.Union[ConnectionStrategyEnum, typing.Sequence[ConnectionStrategyEnum]]]
+ Provide strategies to only retrieve connections with such strategies
+
+ name : typing.Optional[str]
+ Provide the name of the connection to retrieve
+
+ fields : typing.Optional[str]
+ A comma separated list of fields to include or exclude (depending on include_fields) from the result, empty to retrieve all fields
+
+ include_fields : typing.Optional[bool]
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectionForList, ListConnectionsCheckpointPaginatedResponseContent]
+ The connections were retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "connections",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ "strategy": strategy,
+ "name": name,
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListConnectionsCheckpointPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListConnectionsCheckpointPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.connections
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ from_=_parsed_next,
+ take=take,
+ strategy=strategy,
+ name=name,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: str,
+ strategy: ConnectionIdentityProviderEnum,
+ display_name: typing.Optional[str] = OMIT,
+ options: typing.Optional[ConnectionPropertiesOptions] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ is_domain_connection: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ realms: typing.Optional[typing.Sequence[str]] = OMIT,
+ metadata: typing.Optional[ConnectionsMetadata] = OMIT,
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = OMIT,
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateConnectionResponseContent]:
+ """
+ Creates a new connection according to the JSON object received in body.true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+ show_as_button : typing.Optional[bool]
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD. (Defaults to false.)
+
+ realms : typing.Optional[typing.Sequence[str]]
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+
+ metadata : typing.Optional[ConnectionsMetadata]
+
+ authentication : typing.Optional[ConnectionAuthenticationPurpose]
+
+ connected_accounts : typing.Optional[ConnectionConnectedAccountsPurpose]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateConnectionResponseContent]
+ The connection was created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "connections",
+ method="POST",
+ json={
+ "name": name,
+ "display_name": display_name,
+ "strategy": strategy,
+ "options": convert_and_respect_annotation_metadata(
+ object_=options, annotation=ConnectionPropertiesOptions, direction="write"
+ ),
+ "enabled_clients": enabled_clients,
+ "is_domain_connection": is_domain_connection,
+ "show_as_button": show_as_button,
+ "realms": realms,
+ "metadata": metadata,
+ "authentication": convert_and_respect_annotation_metadata(
+ object_=authentication, annotation=ConnectionAuthenticationPurpose, direction="write"
+ ),
+ "connected_accounts": convert_and_respect_annotation_metadata(
+ object_=connected_accounts, annotation=ConnectionConnectedAccountsPurpose, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateConnectionResponseContent,
+ parse_obj_as(
+ type_=CreateConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[GetConnectionResponseContent]:
+ """
+ Retrieve details for a specified connection along with options that can be used for identity provider configuration.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve
+
+ fields : typing.Optional[str]
+ A comma separated list of fields to include or exclude (depending on include_fields) from the result, empty to retrieve all fields
+
+ include_fields : typing.Optional[bool]
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetConnectionResponseContent]
+ The connection was retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetConnectionResponseContent,
+ parse_obj_as(
+ type_=GetConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Removes a specific connection from your tenant. This action cannot be undone. Once removed, users can no longer use this connection to authenticate.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ display_name: typing.Optional[str] = OMIT,
+ options: typing.Optional[UpdateConnectionOptions] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ is_domain_connection: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ realms: typing.Optional[typing.Sequence[str]] = OMIT,
+ metadata: typing.Optional[ConnectionsMetadata] = OMIT,
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = OMIT,
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateConnectionResponseContent]:
+ """
+ Update details for a specific connection, including option properties for identity provider configuration.
+
+ Note: If you use the options parameter, the entire options object is overriden. To avoid partial data or other issues, ensure all parameters are present when using this option.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to update
+
+ display_name : typing.Optional[str]
+ The connection name used in the new universal login experience. If display_name is not included in the request, the field will be overwritten with the name value.
+
+ options : typing.Optional[UpdateConnectionOptions]
+
+ enabled_clients : typing.Optional[typing.Sequence[str]]
+ DEPRECATED property. Use the PATCH /v2/connections/{id}/clients endpoint to enable or disable the connection for any clients.
+
+ is_domain_connection : typing.Optional[bool]
+ true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+ show_as_button : typing.Optional[bool]
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD. (Defaults to false.)
+
+ realms : typing.Optional[typing.Sequence[str]]
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+
+ metadata : typing.Optional[ConnectionsMetadata]
+
+ authentication : typing.Optional[ConnectionAuthenticationPurpose]
+
+ connected_accounts : typing.Optional[ConnectionConnectedAccountsPurpose]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateConnectionResponseContent]
+ The connection was updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "display_name": display_name,
+ "options": convert_and_respect_annotation_metadata(
+ object_=options, annotation=typing.Optional[UpdateConnectionOptions], direction="write"
+ ),
+ "enabled_clients": enabled_clients,
+ "is_domain_connection": is_domain_connection,
+ "show_as_button": show_as_button,
+ "realms": realms,
+ "metadata": metadata,
+ "authentication": convert_and_respect_annotation_metadata(
+ object_=authentication, annotation=ConnectionAuthenticationPurpose, direction="write"
+ ),
+ "connected_accounts": convert_and_respect_annotation_metadata(
+ object_=connected_accounts, annotation=ConnectionConnectedAccountsPurpose, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateConnectionResponseContent,
+ parse_obj_as(
+ type_=UpdateConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def check_status(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Retrieves the status of an ad/ldap connection referenced by its ID. 200 OK http status code response is returned when the connection is online, otherwise a 404 status code is returned along with an error message
+
+ Parameters
+ ----------
+ id : str
+ ID of the connection to check
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/status",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/connections/scim_configuration/__init__.py b/src/auth0/management/connections/scim_configuration/__init__.py
new file mode 100644
index 00000000..d3f2a03f
--- /dev/null
+++ b/src/auth0/management/connections/scim_configuration/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import tokens
+_dynamic_imports: typing.Dict[str, str] = {"tokens": ".tokens"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["tokens"]
diff --git a/src/auth0/management/connections/scim_configuration/client.py b/src/auth0/management/connections/scim_configuration/client.py
new file mode 100644
index 00000000..73b4d03c
--- /dev/null
+++ b/src/auth0/management/connections/scim_configuration/client.py
@@ -0,0 +1,482 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.create_scim_configuration_request_content import CreateScimConfigurationRequestContent
+from ...types.create_scim_configuration_response_content import CreateScimConfigurationResponseContent
+from ...types.get_scim_configuration_default_mapping_response_content import (
+ GetScimConfigurationDefaultMappingResponseContent,
+)
+from ...types.get_scim_configuration_response_content import GetScimConfigurationResponseContent
+from ...types.scim_mapping_item import ScimMappingItem
+from ...types.update_scim_configuration_response_content import UpdateScimConfigurationResponseContent
+from .raw_client import AsyncRawScimConfigurationClient, RawScimConfigurationClient
+
+if typing.TYPE_CHECKING:
+ from .tokens.client import AsyncTokensClient, TokensClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ScimConfigurationClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawScimConfigurationClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._tokens: typing.Optional[TokensClient] = None
+
+ @property
+ def with_raw_response(self) -> RawScimConfigurationClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawScimConfigurationClient
+ """
+ return self._raw_client
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetScimConfigurationResponseContent:
+ """
+ Retrieves a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetScimConfigurationResponseContent
+ The connection's SCIM configuration was retrieved. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.scim_configuration.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def create(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[CreateScimConfigurationRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateScimConfigurationResponseContent:
+ """
+ Create a scim configuration for a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its SCIM configuration
+
+ request : typing.Optional[CreateScimConfigurationRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateScimConfigurationResponseContent
+ The connection's SCIM configuration was created. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0, CreateScimConfigurationRequestContent
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.scim_configuration.create(
+ id="id",
+ request=CreateScimConfigurationRequestContent(),
+ )
+ """
+ _response = self._raw_client.create(id, request=request, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Deletes a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.scim_configuration.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ user_id_attribute: str,
+ mapping: typing.Sequence[ScimMappingItem],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateScimConfigurationResponseContent:
+ """
+ Update a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to update its SCIM configuration
+
+ user_id_attribute : str
+ User ID attribute for generating unique user ids
+
+ mapping : typing.Sequence[ScimMappingItem]
+ The mapping between auth0 and SCIM
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateScimConfigurationResponseContent
+ The connection's SCIM configuration was updated. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0, ScimMappingItem
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.scim_configuration.update(
+ id="id",
+ user_id_attribute="user_id_attribute",
+ mapping=[ScimMappingItem()],
+ )
+ """
+ _response = self._raw_client.update(
+ id, user_id_attribute=user_id_attribute, mapping=mapping, request_options=request_options
+ )
+ return _response.data
+
+ def get_default_mapping(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetScimConfigurationDefaultMappingResponseContent:
+ """
+ Retrieves a scim configuration's default mapping by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its default SCIM mapping
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetScimConfigurationDefaultMappingResponseContent
+ The connection's default SCIM mapping was retrieved. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.scim_configuration.get_default_mapping(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get_default_mapping(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def tokens(self):
+ if self._tokens is None:
+ from .tokens.client import TokensClient # noqa: E402
+
+ self._tokens = TokensClient(client_wrapper=self._client_wrapper)
+ return self._tokens
+
+
+class AsyncScimConfigurationClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawScimConfigurationClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._tokens: typing.Optional[AsyncTokensClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawScimConfigurationClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawScimConfigurationClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetScimConfigurationResponseContent:
+ """
+ Retrieves a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetScimConfigurationResponseContent
+ The connection's SCIM configuration was retrieved. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.scim_configuration.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def create(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[CreateScimConfigurationRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateScimConfigurationResponseContent:
+ """
+ Create a scim configuration for a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its SCIM configuration
+
+ request : typing.Optional[CreateScimConfigurationRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateScimConfigurationResponseContent
+ The connection's SCIM configuration was created. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, CreateScimConfigurationRequestContent
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.scim_configuration.create(
+ id="id",
+ request=CreateScimConfigurationRequestContent(),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(id, request=request, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Deletes a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.scim_configuration.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ user_id_attribute: str,
+ mapping: typing.Sequence[ScimMappingItem],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateScimConfigurationResponseContent:
+ """
+ Update a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to update its SCIM configuration
+
+ user_id_attribute : str
+ User ID attribute for generating unique user ids
+
+ mapping : typing.Sequence[ScimMappingItem]
+ The mapping between auth0 and SCIM
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateScimConfigurationResponseContent
+ The connection's SCIM configuration was updated. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, ScimMappingItem
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.scim_configuration.update(
+ id="id",
+ user_id_attribute="user_id_attribute",
+ mapping=[ScimMappingItem()],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id, user_id_attribute=user_id_attribute, mapping=mapping, request_options=request_options
+ )
+ return _response.data
+
+ async def get_default_mapping(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetScimConfigurationDefaultMappingResponseContent:
+ """
+ Retrieves a scim configuration's default mapping by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its default SCIM mapping
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetScimConfigurationDefaultMappingResponseContent
+ The connection's default SCIM mapping was retrieved. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.scim_configuration.get_default_mapping(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_default_mapping(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def tokens(self):
+ if self._tokens is None:
+ from .tokens.client import AsyncTokensClient # noqa: E402
+
+ self._tokens = AsyncTokensClient(client_wrapper=self._client_wrapper)
+ return self._tokens
diff --git a/src/auth0/management/connections/scim_configuration/raw_client.py b/src/auth0/management/connections/scim_configuration/raw_client.py
new file mode 100644
index 00000000..076fb844
--- /dev/null
+++ b/src/auth0/management/connections/scim_configuration/raw_client.py
@@ -0,0 +1,695 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.not_found_error import NotFoundError
+from ...types.create_scim_configuration_request_content import CreateScimConfigurationRequestContent
+from ...types.create_scim_configuration_response_content import CreateScimConfigurationResponseContent
+from ...types.get_scim_configuration_default_mapping_response_content import (
+ GetScimConfigurationDefaultMappingResponseContent,
+)
+from ...types.get_scim_configuration_response_content import GetScimConfigurationResponseContent
+from ...types.scim_mapping_item import ScimMappingItem
+from ...types.update_scim_configuration_response_content import UpdateScimConfigurationResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawScimConfigurationClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetScimConfigurationResponseContent]:
+ """
+ Retrieves a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetScimConfigurationResponseContent]
+ The connection's SCIM configuration was retrieved. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetScimConfigurationResponseContent,
+ parse_obj_as(
+ type_=GetScimConfigurationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[CreateScimConfigurationRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateScimConfigurationResponseContent]:
+ """
+ Create a scim configuration for a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its SCIM configuration
+
+ request : typing.Optional[CreateScimConfigurationRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateScimConfigurationResponseContent]
+ The connection's SCIM configuration was created. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration",
+ method="POST",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=typing.Optional[CreateScimConfigurationRequestContent], direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateScimConfigurationResponseContent,
+ parse_obj_as(
+ type_=CreateScimConfigurationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Deletes a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ user_id_attribute: str,
+ mapping: typing.Sequence[ScimMappingItem],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateScimConfigurationResponseContent]:
+ """
+ Update a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to update its SCIM configuration
+
+ user_id_attribute : str
+ User ID attribute for generating unique user ids
+
+ mapping : typing.Sequence[ScimMappingItem]
+ The mapping between auth0 and SCIM
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateScimConfigurationResponseContent]
+ The connection's SCIM configuration was updated. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration",
+ method="PATCH",
+ json={
+ "user_id_attribute": user_id_attribute,
+ "mapping": convert_and_respect_annotation_metadata(
+ object_=mapping, annotation=typing.Sequence[ScimMappingItem], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateScimConfigurationResponseContent,
+ parse_obj_as(
+ type_=UpdateScimConfigurationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get_default_mapping(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetScimConfigurationDefaultMappingResponseContent]:
+ """
+ Retrieves a scim configuration's default mapping by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its default SCIM mapping
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetScimConfigurationDefaultMappingResponseContent]
+ The connection's default SCIM mapping was retrieved. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration/default-mapping",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetScimConfigurationDefaultMappingResponseContent,
+ parse_obj_as(
+ type_=GetScimConfigurationDefaultMappingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawScimConfigurationClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetScimConfigurationResponseContent]:
+ """
+ Retrieves a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetScimConfigurationResponseContent]
+ The connection's SCIM configuration was retrieved. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetScimConfigurationResponseContent,
+ parse_obj_as(
+ type_=GetScimConfigurationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ id: str,
+ *,
+ request: typing.Optional[CreateScimConfigurationRequestContent] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateScimConfigurationResponseContent]:
+ """
+ Create a scim configuration for a connection.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its SCIM configuration
+
+ request : typing.Optional[CreateScimConfigurationRequestContent]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateScimConfigurationResponseContent]
+ The connection's SCIM configuration was created. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration",
+ method="POST",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=typing.Optional[CreateScimConfigurationRequestContent], direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateScimConfigurationResponseContent,
+ parse_obj_as(
+ type_=CreateScimConfigurationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Deletes a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to delete its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ user_id_attribute: str,
+ mapping: typing.Sequence[ScimMappingItem],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateScimConfigurationResponseContent]:
+ """
+ Update a scim configuration by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to update its SCIM configuration
+
+ user_id_attribute : str
+ User ID attribute for generating unique user ids
+
+ mapping : typing.Sequence[ScimMappingItem]
+ The mapping between auth0 and SCIM
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateScimConfigurationResponseContent]
+ The connection's SCIM configuration was updated. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration",
+ method="PATCH",
+ json={
+ "user_id_attribute": user_id_attribute,
+ "mapping": convert_and_respect_annotation_metadata(
+ object_=mapping, annotation=typing.Sequence[ScimMappingItem], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateScimConfigurationResponseContent,
+ parse_obj_as(
+ type_=UpdateScimConfigurationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get_default_mapping(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetScimConfigurationDefaultMappingResponseContent]:
+ """
+ Retrieves a scim configuration's default mapping by its connectionId.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its default SCIM mapping
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetScimConfigurationDefaultMappingResponseContent]
+ The connection's default SCIM mapping was retrieved. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration/default-mapping",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetScimConfigurationDefaultMappingResponseContent,
+ parse_obj_as(
+ type_=GetScimConfigurationDefaultMappingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/connections/scim_configuration/tokens/__init__.py b/src/auth0/management/connections/scim_configuration/tokens/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/connections/scim_configuration/tokens/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/connections/scim_configuration/tokens/client.py b/src/auth0/management/connections/scim_configuration/tokens/client.py
new file mode 100644
index 00000000..a96ef28a
--- /dev/null
+++ b/src/auth0/management/connections/scim_configuration/tokens/client.py
@@ -0,0 +1,292 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.request_options import RequestOptions
+from ....types.create_scim_token_response_content import CreateScimTokenResponseContent
+from ....types.get_scim_tokens_response_content import GetScimTokensResponseContent
+from .raw_client import AsyncRawTokensClient, RawTokensClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class TokensClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawTokensClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawTokensClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawTokensClient
+ """
+ return self._raw_client
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetScimTokensResponseContent:
+ """
+ Retrieves all scim tokens by its connection id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetScimTokensResponseContent
+ The connection's SCIM tokens were retrieved. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.scim_configuration.tokens.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def create(
+ self,
+ id: str,
+ *,
+ scopes: typing.Optional[typing.Sequence[str]] = OMIT,
+ token_lifetime: typing.Optional[int] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateScimTokenResponseContent:
+ """
+ Create a scim token for a scim client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its SCIM token
+
+ scopes : typing.Optional[typing.Sequence[str]]
+ The scopes of the scim token
+
+ token_lifetime : typing.Optional[int]
+ Lifetime of the token in seconds. Must be greater than 900
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateScimTokenResponseContent
+ The connection's SCIM token was created. See Response Schemas for schema.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.scim_configuration.tokens.create(
+ id="id",
+ )
+ """
+ _response = self._raw_client.create(
+ id, scopes=scopes, token_lifetime=token_lifetime, request_options=request_options
+ )
+ return _response.data
+
+ def delete(self, id: str, token_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Deletes a scim token by its connection id and tokenId.
+
+ Parameters
+ ----------
+ id : str
+ The connection id that owns the SCIM token to delete
+
+ token_id : str
+ The id of the scim token to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.scim_configuration.tokens.delete(
+ id="id",
+ token_id="tokenId",
+ )
+ """
+ _response = self._raw_client.delete(id, token_id, request_options=request_options)
+ return _response.data
+
+
+class AsyncTokensClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawTokensClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawTokensClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawTokensClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetScimTokensResponseContent:
+ """
+ Retrieves all scim tokens by its connection id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetScimTokensResponseContent
+ The connection's SCIM tokens were retrieved. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.scim_configuration.tokens.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def create(
+ self,
+ id: str,
+ *,
+ scopes: typing.Optional[typing.Sequence[str]] = OMIT,
+ token_lifetime: typing.Optional[int] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateScimTokenResponseContent:
+ """
+ Create a scim token for a scim client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its SCIM token
+
+ scopes : typing.Optional[typing.Sequence[str]]
+ The scopes of the scim token
+
+ token_lifetime : typing.Optional[int]
+ Lifetime of the token in seconds. Must be greater than 900
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateScimTokenResponseContent
+ The connection's SCIM token was created. See Response Schemas for schema.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.scim_configuration.tokens.create(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ id, scopes=scopes, token_lifetime=token_lifetime, request_options=request_options
+ )
+ return _response.data
+
+ async def delete(self, id: str, token_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Deletes a scim token by its connection id and tokenId.
+
+ Parameters
+ ----------
+ id : str
+ The connection id that owns the SCIM token to delete
+
+ token_id : str
+ The id of the scim token to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.scim_configuration.tokens.delete(
+ id="id",
+ token_id="tokenId",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, token_id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/connections/scim_configuration/tokens/raw_client.py b/src/auth0/management/connections/scim_configuration/tokens/raw_client.py
new file mode 100644
index 00000000..7b8fab67
--- /dev/null
+++ b/src/auth0/management/connections/scim_configuration/tokens/raw_client.py
@@ -0,0 +1,445 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ....core.api_error import ApiError
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.http_response import AsyncHttpResponse, HttpResponse
+from ....core.jsonable_encoder import jsonable_encoder
+from ....core.pydantic_utilities import parse_obj_as
+from ....core.request_options import RequestOptions
+from ....errors.bad_request_error import BadRequestError
+from ....errors.conflict_error import ConflictError
+from ....errors.not_found_error import NotFoundError
+from ....types.create_scim_token_response_content import CreateScimTokenResponseContent
+from ....types.get_scim_tokens_response_content import GetScimTokensResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawTokensClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetScimTokensResponseContent]:
+ """
+ Retrieves all scim tokens by its connection id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetScimTokensResponseContent]
+ The connection's SCIM tokens were retrieved. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration/tokens",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetScimTokensResponseContent,
+ parse_obj_as(
+ type_=GetScimTokensResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ id: str,
+ *,
+ scopes: typing.Optional[typing.Sequence[str]] = OMIT,
+ token_lifetime: typing.Optional[int] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateScimTokenResponseContent]:
+ """
+ Create a scim token for a scim client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its SCIM token
+
+ scopes : typing.Optional[typing.Sequence[str]]
+ The scopes of the scim token
+
+ token_lifetime : typing.Optional[int]
+ Lifetime of the token in seconds. Must be greater than 900
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateScimTokenResponseContent]
+ The connection's SCIM token was created. See Response Schemas for schema.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration/tokens",
+ method="POST",
+ json={
+ "scopes": scopes,
+ "token_lifetime": token_lifetime,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateScimTokenResponseContent,
+ parse_obj_as(
+ type_=CreateScimTokenResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, id: str, token_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Deletes a scim token by its connection id and tokenId.
+
+ Parameters
+ ----------
+ id : str
+ The connection id that owns the SCIM token to delete
+
+ token_id : str
+ The id of the scim token to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration/tokens/{jsonable_encoder(token_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawTokensClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetScimTokensResponseContent]:
+ """
+ Retrieves all scim tokens by its connection id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to retrieve its SCIM configuration
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetScimTokensResponseContent]
+ The connection's SCIM tokens were retrieved. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration/tokens",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetScimTokensResponseContent,
+ parse_obj_as(
+ type_=GetScimTokensResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ id: str,
+ *,
+ scopes: typing.Optional[typing.Sequence[str]] = OMIT,
+ token_lifetime: typing.Optional[int] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateScimTokenResponseContent]:
+ """
+ Create a scim token for a scim client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection to create its SCIM token
+
+ scopes : typing.Optional[typing.Sequence[str]]
+ The scopes of the scim token
+
+ token_lifetime : typing.Optional[int]
+ Lifetime of the token in seconds. Must be greater than 900
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateScimTokenResponseContent]
+ The connection's SCIM token was created. See Response Schemas for schema.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration/tokens",
+ method="POST",
+ json={
+ "scopes": scopes,
+ "token_lifetime": token_lifetime,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateScimTokenResponseContent,
+ parse_obj_as(
+ type_=CreateScimTokenResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, token_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Deletes a scim token by its connection id and tokenId.
+
+ Parameters
+ ----------
+ id : str
+ The connection id that owns the SCIM token to delete
+
+ token_id : str
+ The id of the scim token to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/scim-configuration/tokens/{jsonable_encoder(token_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/connections/users/__init__.py b/src/auth0/management/connections/users/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/connections/users/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/connections/users/client.py b/src/auth0/management/connections/users/client.py
new file mode 100644
index 00000000..a508e711
--- /dev/null
+++ b/src/auth0/management/connections/users/client.py
@@ -0,0 +1,117 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from .raw_client import AsyncRawUsersClient, RawUsersClient
+
+
+class UsersClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawUsersClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawUsersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawUsersClient
+ """
+ return self._raw_client
+
+ def delete_by_email(self, id: str, *, email: str, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Deletes a specified connection user by its email (you cannot delete all users from specific connection). Currently, only Database Connections are supported.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection (currently only database connections are supported)
+
+ email : str
+ The email of the user to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.connections.users.delete_by_email(
+ id="id",
+ email="email",
+ )
+ """
+ _response = self._raw_client.delete_by_email(id, email=email, request_options=request_options)
+ return _response.data
+
+
+class AsyncUsersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawUsersClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawUsersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawUsersClient
+ """
+ return self._raw_client
+
+ async def delete_by_email(
+ self, id: str, *, email: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Deletes a specified connection user by its email (you cannot delete all users from specific connection). Currently, only Database Connections are supported.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection (currently only database connections are supported)
+
+ email : str
+ The email of the user to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.connections.users.delete_by_email(
+ id="id",
+ email="email",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete_by_email(id, email=email, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/connections/users/raw_client.py b/src/auth0/management/connections/users/raw_client.py
new file mode 100644
index 00000000..43e9098e
--- /dev/null
+++ b/src/auth0/management/connections/users/raw_client.py
@@ -0,0 +1,187 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+
+
+class RawUsersClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def delete_by_email(
+ self, id: str, *, email: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Deletes a specified connection user by its email (you cannot delete all users from specific connection). Currently, only Database Connections are supported.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection (currently only database connections are supported)
+
+ email : str
+ The email of the user to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/users",
+ method="DELETE",
+ params={
+ "email": email,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawUsersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def delete_by_email(
+ self, id: str, *, email: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Deletes a specified connection user by its email (you cannot delete all users from specific connection). Currently, only Database Connections are supported.
+
+ Parameters
+ ----------
+ id : str
+ The id of the connection (currently only database connections are supported)
+
+ email : str
+ The email of the user to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"connections/{jsonable_encoder(id)}/users",
+ method="DELETE",
+ params={
+ "email": email,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/core/__init__.py b/src/auth0/management/core/__init__.py
new file mode 100644
index 00000000..3b5240ad
--- /dev/null
+++ b/src/auth0/management/core/__init__.py
@@ -0,0 +1,115 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from .api_error import ApiError
+ from .client_wrapper import AsyncClientWrapper, BaseClientWrapper, SyncClientWrapper
+ from .custom_pagination import AsyncCustomPager, SyncCustomPager
+ from .datetime_utils import serialize_datetime
+ from .file import File, convert_file_dict_to_httpx_tuples, with_content_type
+ from .http_client import AsyncHttpClient, HttpClient
+ from .http_response import AsyncHttpResponse, HttpResponse
+ from .jsonable_encoder import jsonable_encoder
+ from .pagination import AsyncPager, SyncPager
+ from .pydantic_utilities import (
+ IS_PYDANTIC_V2,
+ UniversalBaseModel,
+ UniversalRootModel,
+ parse_obj_as,
+ universal_field_validator,
+ universal_root_validator,
+ update_forward_refs,
+ )
+ from .query_encoder import encode_query
+ from .remove_none_from_dict import remove_none_from_dict
+ from .request_options import RequestOptions
+ from .serialization import FieldMetadata, convert_and_respect_annotation_metadata
+_dynamic_imports: typing.Dict[str, str] = {
+ "ApiError": ".api_error",
+ "AsyncClientWrapper": ".client_wrapper",
+ "AsyncCustomPager": ".custom_pagination",
+ "AsyncHttpClient": ".http_client",
+ "AsyncHttpResponse": ".http_response",
+ "AsyncPager": ".pagination",
+ "BaseClientWrapper": ".client_wrapper",
+ "FieldMetadata": ".serialization",
+ "File": ".file",
+ "HttpClient": ".http_client",
+ "HttpResponse": ".http_response",
+ "IS_PYDANTIC_V2": ".pydantic_utilities",
+ "RequestOptions": ".request_options",
+ "SyncClientWrapper": ".client_wrapper",
+ "SyncCustomPager": ".custom_pagination",
+ "SyncPager": ".pagination",
+ "UniversalBaseModel": ".pydantic_utilities",
+ "UniversalRootModel": ".pydantic_utilities",
+ "convert_and_respect_annotation_metadata": ".serialization",
+ "convert_file_dict_to_httpx_tuples": ".file",
+ "encode_query": ".query_encoder",
+ "jsonable_encoder": ".jsonable_encoder",
+ "parse_obj_as": ".pydantic_utilities",
+ "remove_none_from_dict": ".remove_none_from_dict",
+ "serialize_datetime": ".datetime_utils",
+ "universal_field_validator": ".pydantic_utilities",
+ "universal_root_validator": ".pydantic_utilities",
+ "update_forward_refs": ".pydantic_utilities",
+ "with_content_type": ".file",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = [
+ "ApiError",
+ "AsyncClientWrapper",
+ "AsyncCustomPager",
+ "AsyncHttpClient",
+ "AsyncHttpResponse",
+ "AsyncPager",
+ "BaseClientWrapper",
+ "FieldMetadata",
+ "File",
+ "HttpClient",
+ "HttpResponse",
+ "IS_PYDANTIC_V2",
+ "RequestOptions",
+ "SyncClientWrapper",
+ "SyncCustomPager",
+ "SyncPager",
+ "UniversalBaseModel",
+ "UniversalRootModel",
+ "convert_and_respect_annotation_metadata",
+ "convert_file_dict_to_httpx_tuples",
+ "encode_query",
+ "jsonable_encoder",
+ "parse_obj_as",
+ "remove_none_from_dict",
+ "serialize_datetime",
+ "universal_field_validator",
+ "universal_root_validator",
+ "update_forward_refs",
+ "with_content_type",
+]
diff --git a/src/auth0/management/core/api_error.py b/src/auth0/management/core/api_error.py
new file mode 100644
index 00000000..6f850a60
--- /dev/null
+++ b/src/auth0/management/core/api_error.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from typing import Any, Dict, Optional
+
+
+class ApiError(Exception):
+ headers: Optional[Dict[str, str]]
+ status_code: Optional[int]
+ body: Any
+
+ def __init__(
+ self,
+ *,
+ headers: Optional[Dict[str, str]] = None,
+ status_code: Optional[int] = None,
+ body: Any = None,
+ ) -> None:
+ self.headers = headers
+ self.status_code = status_code
+ self.body = body
+
+ def __str__(self) -> str:
+ return f"headers: {self.headers}, status_code: {self.status_code}, body: {self.body}"
diff --git a/src/auth0/management/core/client_wrapper.py b/src/auth0/management/core/client_wrapper.py
new file mode 100644
index 00000000..3984e5ee
--- /dev/null
+++ b/src/auth0/management/core/client_wrapper.py
@@ -0,0 +1,94 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import httpx
+from .http_client import AsyncHttpClient, HttpClient
+
+
+class BaseClientWrapper:
+ def __init__(
+ self,
+ *,
+ token: typing.Union[str, typing.Callable[[], str]],
+ headers: typing.Optional[typing.Dict[str, str]] = None,
+ base_url: str,
+ timeout: typing.Optional[float] = None,
+ ):
+ self._token = token
+ self._headers = headers
+ self._base_url = base_url
+ self._timeout = timeout
+
+ def get_headers(self) -> typing.Dict[str, str]:
+ headers: typing.Dict[str, str] = {
+ "X-Fern-Language": "Python",
+ "X-Fern-SDK-Name": "auth0",
+ "X-Fern-SDK-Version": "0.0.0",
+ **(self.get_custom_headers() or {}),
+ }
+ headers["Authorization"] = f"Bearer {self._get_token()}"
+ return headers
+
+ def _get_token(self) -> str:
+ if isinstance(self._token, str):
+ return self._token
+ else:
+ return self._token()
+
+ def get_custom_headers(self) -> typing.Optional[typing.Dict[str, str]]:
+ return self._headers
+
+ def get_base_url(self) -> str:
+ return self._base_url
+
+ def get_timeout(self) -> typing.Optional[float]:
+ return self._timeout
+
+
+class SyncClientWrapper(BaseClientWrapper):
+ def __init__(
+ self,
+ *,
+ token: typing.Union[str, typing.Callable[[], str]],
+ headers: typing.Optional[typing.Dict[str, str]] = None,
+ base_url: str,
+ timeout: typing.Optional[float] = None,
+ httpx_client: httpx.Client,
+ ):
+ super().__init__(token=token, headers=headers, base_url=base_url, timeout=timeout)
+ self.httpx_client = HttpClient(
+ httpx_client=httpx_client,
+ base_headers=self.get_headers,
+ base_timeout=self.get_timeout,
+ base_url=self.get_base_url,
+ )
+
+
+class AsyncClientWrapper(BaseClientWrapper):
+ def __init__(
+ self,
+ *,
+ token: typing.Union[str, typing.Callable[[], str]],
+ headers: typing.Optional[typing.Dict[str, str]] = None,
+ base_url: str,
+ timeout: typing.Optional[float] = None,
+ async_token: typing.Optional[typing.Callable[[], typing.Awaitable[str]]] = None,
+ httpx_client: httpx.AsyncClient,
+ ):
+ super().__init__(token=token, headers=headers, base_url=base_url, timeout=timeout)
+ self._async_token = async_token
+ self.httpx_client = AsyncHttpClient(
+ httpx_client=httpx_client,
+ base_headers=self.get_headers,
+ base_timeout=self.get_timeout,
+ base_url=self.get_base_url,
+ async_base_headers=self.async_get_headers,
+ )
+
+ async def async_get_headers(self) -> typing.Dict[str, str]:
+ headers = self.get_headers()
+ if self._async_token is not None:
+ token = await self._async_token()
+ headers["Authorization"] = f"Bearer {token}"
+ return headers
diff --git a/src/auth0/management/core/custom_pagination.py b/src/auth0/management/core/custom_pagination.py
new file mode 100644
index 00000000..5de2c7a8
--- /dev/null
+++ b/src/auth0/management/core/custom_pagination.py
@@ -0,0 +1,152 @@
+# This file was auto-generated by Fern from our API Definition.
+
+"""
+Custom Pagination Support
+
+This file is designed to be modified by SDK users to implement their own
+pagination logic. The generator will import SyncCustomPager and AsyncCustomPager
+from this module when custom pagination is used.
+
+Users should:
+1. Implement their custom pager (e.g., PayrocPager, MyCustomPager, etc.)
+2. Create adapter classes (SyncCustomPager/AsyncCustomPager) that bridge
+ between the generated SDK code and their custom pager implementation
+"""
+
+from __future__ import annotations
+
+from typing import Any, AsyncIterator, Generic, Iterator, TypeVar
+
+# Import the base utilities you'll need
+# Adjust these imports based on your actual structure
+try:
+ from .client_wrapper import AsyncClientWrapper, SyncClientWrapper
+except ImportError:
+ # Fallback for type hints
+ AsyncClientWrapper = Any # type: ignore
+ SyncClientWrapper = Any # type: ignore
+
+TItem = TypeVar("TItem")
+TResponse = TypeVar("TResponse")
+
+
+class SyncCustomPager(Generic[TItem, TResponse]):
+ """
+ Adapter for custom synchronous pagination.
+
+ The generator will call this with:
+ SyncCustomPager(initial_response=response, client_wrapper=client_wrapper)
+
+ Implement this class to extract pagination metadata from your response
+ and delegate to your custom pager implementation.
+
+ Example implementation:
+
+ class SyncCustomPager(Generic[TItem, TResponse]):
+ def __init__(
+ self,
+ *,
+ initial_response: TResponse,
+ client_wrapper: SyncClientWrapper,
+ ):
+ # Extract data and pagination metadata from response
+ data = initial_response.data # Adjust based on your response structure
+ links = initial_response.links
+
+ # Initialize your custom pager
+ self._pager = MyCustomPager(
+ current_page=Page(data),
+ httpx_client=client_wrapper.httpx_client,
+ get_headers=client_wrapper.get_headers,
+ # ... other parameters
+ )
+
+ def __iter__(self):
+ return iter(self._pager)
+
+ # Delegate other methods to your pager...
+ """
+
+ def __init__(
+ self,
+ *,
+ initial_response: TResponse,
+ client_wrapper: SyncClientWrapper,
+ ):
+ """
+ Initialize the custom pager.
+
+ Args:
+ initial_response: The parsed API response from the first request
+ client_wrapper: The client wrapper providing HTTP client and utilities
+ """
+ raise NotImplementedError(
+ "SyncCustomPager must be implemented. "
+ "Please implement this class in core/custom_pagination.py to define your pagination logic. "
+ "See the class docstring for examples."
+ )
+
+ def __iter__(self) -> Iterator[TItem]:
+ """Iterate through all items across all pages."""
+ raise NotImplementedError("Must implement __iter__ method")
+
+
+class AsyncCustomPager(Generic[TItem, TResponse]):
+ """
+ Adapter for custom asynchronous pagination.
+
+ The generator will call this with:
+ AsyncCustomPager(initial_response=response, client_wrapper=client_wrapper)
+
+ Implement this class to extract pagination metadata from your response
+ and delegate to your custom async pager implementation.
+
+ Example implementation:
+
+ class AsyncCustomPager(Generic[TItem, TResponse]):
+ def __init__(
+ self,
+ *,
+ initial_response: TResponse,
+ client_wrapper: AsyncClientWrapper,
+ ):
+ # Extract data and pagination metadata from response
+ data = initial_response.data # Adjust based on your response structure
+ links = initial_response.links
+
+ # Initialize your custom async pager
+ self._pager = MyAsyncCustomPager(
+ current_page=Page(data),
+ httpx_client=client_wrapper.httpx_client,
+ get_headers=client_wrapper.get_headers,
+ # ... other parameters
+ )
+
+ async def __aiter__(self):
+ return self._pager.__aiter__()
+
+ # Delegate other methods to your pager...
+ """
+
+ def __init__(
+ self,
+ *,
+ initial_response: TResponse,
+ client_wrapper: AsyncClientWrapper,
+ ):
+ """
+ Initialize the custom async pager.
+
+ Args:
+ initial_response: The parsed API response from the first request
+ client_wrapper: The client wrapper providing HTTP client and utilities
+ """
+ raise NotImplementedError(
+ "AsyncCustomPager must be implemented. "
+ "Please implement this class in core/custom_pagination.py to define your pagination logic. "
+ "See the class docstring for examples."
+ )
+
+ async def __aiter__(self) -> AsyncIterator[TItem]:
+ """Asynchronously iterate through all items across all pages."""
+ raise NotImplementedError("Must implement __aiter__ method")
diff --git a/src/auth0/management/core/datetime_utils.py b/src/auth0/management/core/datetime_utils.py
new file mode 100644
index 00000000..7c9864a9
--- /dev/null
+++ b/src/auth0/management/core/datetime_utils.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+
+
+def serialize_datetime(v: dt.datetime) -> str:
+ """
+ Serialize a datetime including timezone info.
+
+ Uses the timezone info provided if present, otherwise uses the current runtime's timezone info.
+
+ UTC datetimes end in "Z" while all other timezones are represented as offset from UTC, e.g. +05:00.
+ """
+
+ def _serialize_zoned_datetime(v: dt.datetime) -> str:
+ if v.tzinfo is not None and v.tzinfo.tzname(None) == dt.timezone.utc.tzname(None):
+ # UTC is a special case where we use "Z" at the end instead of "+00:00"
+ return v.isoformat().replace("+00:00", "Z")
+ else:
+ # Delegate to the typical +/- offset format
+ return v.isoformat()
+
+ if v.tzinfo is not None:
+ return _serialize_zoned_datetime(v)
+ else:
+ local_tz = dt.datetime.now().astimezone().tzinfo
+ localized_dt = v.replace(tzinfo=local_tz)
+ return _serialize_zoned_datetime(localized_dt)
diff --git a/src/auth0/management/core/file.py b/src/auth0/management/core/file.py
new file mode 100644
index 00000000..44b0d27c
--- /dev/null
+++ b/src/auth0/management/core/file.py
@@ -0,0 +1,67 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from typing import IO, Dict, List, Mapping, Optional, Tuple, Union, cast
+
+# File typing inspired by the flexibility of types within the httpx library
+# https://github.com/encode/httpx/blob/master/httpx/_types.py
+FileContent = Union[IO[bytes], bytes, str]
+File = Union[
+ # file (or bytes)
+ FileContent,
+ # (filename, file (or bytes))
+ Tuple[Optional[str], FileContent],
+ # (filename, file (or bytes), content_type)
+ Tuple[Optional[str], FileContent, Optional[str]],
+ # (filename, file (or bytes), content_type, headers)
+ Tuple[
+ Optional[str],
+ FileContent,
+ Optional[str],
+ Mapping[str, str],
+ ],
+]
+
+
+def convert_file_dict_to_httpx_tuples(
+ d: Dict[str, Union[File, List[File]]],
+) -> List[Tuple[str, File]]:
+ """
+ The format we use is a list of tuples, where the first element is the
+ name of the file and the second is the file object. Typically HTTPX wants
+ a dict, but to be able to send lists of files, you have to use the list
+ approach (which also works for non-lists)
+ https://github.com/encode/httpx/pull/1032
+ """
+
+ httpx_tuples = []
+ for key, file_like in d.items():
+ if isinstance(file_like, list):
+ for file_like_item in file_like:
+ httpx_tuples.append((key, file_like_item))
+ else:
+ httpx_tuples.append((key, file_like))
+ return httpx_tuples
+
+
+def with_content_type(*, file: File, default_content_type: str) -> File:
+ """
+ This function resolves to the file's content type, if provided, and defaults
+ to the default_content_type value if not.
+ """
+ if isinstance(file, tuple):
+ if len(file) == 2:
+ filename, content = cast(Tuple[Optional[str], FileContent], file) # type: ignore
+ return (filename, content, default_content_type)
+ elif len(file) == 3:
+ filename, content, file_content_type = cast(Tuple[Optional[str], FileContent, Optional[str]], file) # type: ignore
+ out_content_type = file_content_type or default_content_type
+ return (filename, content, out_content_type)
+ elif len(file) == 4:
+ filename, content, file_content_type, headers = cast( # type: ignore
+ Tuple[Optional[str], FileContent, Optional[str], Mapping[str, str]], file
+ )
+ out_content_type = file_content_type or default_content_type
+ return (filename, content, out_content_type, headers)
+ else:
+ raise ValueError(f"Unexpected tuple length: {len(file)}")
+ return (None, file, default_content_type)
diff --git a/src/auth0/management/core/force_multipart.py b/src/auth0/management/core/force_multipart.py
new file mode 100644
index 00000000..5440913f
--- /dev/null
+++ b/src/auth0/management/core/force_multipart.py
@@ -0,0 +1,18 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from typing import Any, Dict
+
+
+class ForceMultipartDict(Dict[str, Any]):
+ """
+ A dictionary subclass that always evaluates to True in boolean contexts.
+
+ This is used to force multipart/form-data encoding in HTTP requests even when
+ the dictionary is empty, which would normally evaluate to False.
+ """
+
+ def __bool__(self) -> bool:
+ return True
+
+
+FORCE_MULTIPART = ForceMultipartDict()
diff --git a/src/auth0/management/core/http_client.py b/src/auth0/management/core/http_client.py
new file mode 100644
index 00000000..dced9f6b
--- /dev/null
+++ b/src/auth0/management/core/http_client.py
@@ -0,0 +1,629 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import asyncio
+import email.utils
+import re
+import time
+import typing
+import urllib.parse
+from contextlib import asynccontextmanager, contextmanager
+from random import random
+
+import httpx
+from .file import File, convert_file_dict_to_httpx_tuples
+from .force_multipart import FORCE_MULTIPART
+from .jsonable_encoder import jsonable_encoder
+from .query_encoder import encode_query
+from .remove_none_from_dict import remove_none_from_dict as remove_none_from_dict
+from .request_options import RequestOptions
+from httpx._types import RequestFiles
+
+INITIAL_RETRY_DELAY_SECONDS = 1.0
+MAX_RETRY_DELAY_SECONDS = 60.0
+JITTER_FACTOR = 0.2 # 20% random jitter
+
+
+def _parse_retry_after(response_headers: httpx.Headers) -> typing.Optional[float]:
+ """
+ This function parses the `Retry-After` header in a HTTP response and returns the number of seconds to wait.
+
+ Inspired by the urllib3 retry implementation.
+ """
+ retry_after_ms = response_headers.get("retry-after-ms")
+ if retry_after_ms is not None:
+ try:
+ return int(retry_after_ms) / 1000 if retry_after_ms > 0 else 0
+ except Exception:
+ pass
+
+ retry_after = response_headers.get("retry-after")
+ if retry_after is None:
+ return None
+
+ # Attempt to parse the header as an int.
+ if re.match(r"^\s*[0-9]+\s*$", retry_after):
+ seconds = float(retry_after)
+ # Fallback to parsing it as a date.
+ else:
+ retry_date_tuple = email.utils.parsedate_tz(retry_after)
+ if retry_date_tuple is None:
+ return None
+ if retry_date_tuple[9] is None: # Python 2
+ # Assume UTC if no timezone was specified
+ # On Python2.7, parsedate_tz returns None for a timezone offset
+ # instead of 0 if no timezone is given, where mktime_tz treats
+ # a None timezone offset as local time.
+ retry_date_tuple = retry_date_tuple[:9] + (0,) + retry_date_tuple[10:]
+
+ retry_date = email.utils.mktime_tz(retry_date_tuple)
+ seconds = retry_date - time.time()
+
+ if seconds < 0:
+ seconds = 0
+
+ return seconds
+
+
+def _add_positive_jitter(delay: float) -> float:
+ """Add positive jitter (0-20%) to prevent thundering herd."""
+ jitter_multiplier = 1 + random() * JITTER_FACTOR
+ return delay * jitter_multiplier
+
+
+def _add_symmetric_jitter(delay: float) -> float:
+ """Add symmetric jitter (±10%) for exponential backoff."""
+ jitter_multiplier = 1 + (random() - 0.5) * JITTER_FACTOR
+ return delay * jitter_multiplier
+
+
+def _parse_x_ratelimit_reset(response_headers: httpx.Headers) -> typing.Optional[float]:
+ """
+ Parse the X-RateLimit-Reset header (Unix timestamp in seconds).
+ Returns seconds to wait, or None if header is missing/invalid.
+ """
+ reset_time_str = response_headers.get("x-ratelimit-reset")
+ if reset_time_str is None:
+ return None
+
+ try:
+ reset_time = int(reset_time_str)
+ delay = reset_time - time.time()
+ if delay > 0:
+ return delay
+ except (ValueError, TypeError):
+ pass
+
+ return None
+
+
+def _retry_timeout(response: httpx.Response, retries: int) -> float:
+ """
+ Determine the amount of time to wait before retrying a request.
+ This function begins by trying to parse a retry-after header from the response, and then proceeds to use exponential backoff
+ with a jitter to determine the number of seconds to wait.
+ """
+
+ # 1. Check Retry-After header first
+ retry_after = _parse_retry_after(response.headers)
+ if retry_after is not None and retry_after > 0:
+ return min(retry_after, MAX_RETRY_DELAY_SECONDS)
+
+ # 2. Check X-RateLimit-Reset header (with positive jitter)
+ ratelimit_reset = _parse_x_ratelimit_reset(response.headers)
+ if ratelimit_reset is not None:
+ return _add_positive_jitter(min(ratelimit_reset, MAX_RETRY_DELAY_SECONDS))
+
+ # 3. Fall back to exponential backoff (with symmetric jitter)
+ backoff = min(INITIAL_RETRY_DELAY_SECONDS * pow(2.0, retries), MAX_RETRY_DELAY_SECONDS)
+ return _add_symmetric_jitter(backoff)
+
+
+def _should_retry(response: httpx.Response) -> bool:
+ retryable_400s = [429, 408, 409]
+ return response.status_code >= 500 or response.status_code in retryable_400s
+
+
+def _maybe_filter_none_from_multipart_data(
+ data: typing.Optional[typing.Any],
+ request_files: typing.Optional[RequestFiles],
+ force_multipart: typing.Optional[bool],
+) -> typing.Optional[typing.Any]:
+ """
+ Filter None values from data body for multipart/form requests.
+ This prevents httpx from converting None to empty strings in multipart encoding.
+ Only applies when files are present or force_multipart is True.
+ """
+ if data is not None and isinstance(data, typing.Mapping) and (request_files or force_multipart):
+ return remove_none_from_dict(data)
+ return data
+
+
+def remove_omit_from_dict(
+ original: typing.Dict[str, typing.Optional[typing.Any]],
+ omit: typing.Optional[typing.Any],
+) -> typing.Dict[str, typing.Any]:
+ if omit is None:
+ return original
+ new: typing.Dict[str, typing.Any] = {}
+ for key, value in original.items():
+ if value is not omit:
+ new[key] = value
+ return new
+
+
+def maybe_filter_request_body(
+ data: typing.Optional[typing.Any],
+ request_options: typing.Optional[RequestOptions],
+ omit: typing.Optional[typing.Any],
+) -> typing.Optional[typing.Any]:
+ if data is None:
+ return (
+ jsonable_encoder(request_options.get("additional_body_parameters", {})) or {}
+ if request_options is not None
+ else None
+ )
+ elif not isinstance(data, typing.Mapping):
+ data_content = jsonable_encoder(data)
+ else:
+ data_content = {
+ **(jsonable_encoder(remove_omit_from_dict(data, omit))), # type: ignore
+ **(
+ jsonable_encoder(request_options.get("additional_body_parameters", {})) or {}
+ if request_options is not None
+ else {}
+ ),
+ }
+ return data_content
+
+
+# Abstracted out for testing purposes
+def get_request_body(
+ *,
+ json: typing.Optional[typing.Any],
+ data: typing.Optional[typing.Any],
+ request_options: typing.Optional[RequestOptions],
+ omit: typing.Optional[typing.Any],
+) -> typing.Tuple[typing.Optional[typing.Any], typing.Optional[typing.Any]]:
+ json_body = None
+ data_body = None
+ if data is not None:
+ data_body = maybe_filter_request_body(data, request_options, omit)
+ else:
+ # If both data and json are None, we send json data in the event extra properties are specified
+ json_body = maybe_filter_request_body(json, request_options, omit)
+
+ # If you have an empty JSON body, you should just send None
+ return (json_body if json_body != {} else None), data_body if data_body != {} else None
+
+
+class HttpClient:
+ def __init__(
+ self,
+ *,
+ httpx_client: httpx.Client,
+ base_timeout: typing.Callable[[], typing.Optional[float]],
+ base_headers: typing.Callable[[], typing.Dict[str, str]],
+ base_url: typing.Optional[typing.Callable[[], str]] = None,
+ ):
+ self.base_url = base_url
+ self.base_timeout = base_timeout
+ self.base_headers = base_headers
+ self.httpx_client = httpx_client
+
+ def get_base_url(self, maybe_base_url: typing.Optional[str]) -> str:
+ base_url = maybe_base_url
+ if self.base_url is not None and base_url is None:
+ base_url = self.base_url()
+
+ if base_url is None:
+ raise ValueError("A base_url is required to make this request, please provide one and try again.")
+ return base_url
+
+ def request(
+ self,
+ path: typing.Optional[str] = None,
+ *,
+ method: str,
+ base_url: typing.Optional[str] = None,
+ params: typing.Optional[typing.Dict[str, typing.Any]] = None,
+ json: typing.Optional[typing.Any] = None,
+ data: typing.Optional[typing.Any] = None,
+ content: typing.Optional[typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]]] = None,
+ files: typing.Optional[
+ typing.Union[
+ typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]],
+ typing.List[typing.Tuple[str, File]],
+ ]
+ ] = None,
+ headers: typing.Optional[typing.Dict[str, typing.Any]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ retries: int = 0,
+ omit: typing.Optional[typing.Any] = None,
+ force_multipart: typing.Optional[bool] = None,
+ ) -> httpx.Response:
+ base_url = self.get_base_url(base_url)
+ timeout = (
+ request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else self.base_timeout()
+ )
+
+ json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
+
+ request_files: typing.Optional[RequestFiles] = (
+ convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
+ if (files is not None and files is not omit and isinstance(files, dict))
+ else None
+ )
+
+ if (request_files is None or len(request_files) == 0) and force_multipart:
+ request_files = FORCE_MULTIPART
+
+ data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart)
+
+ # Compute encoded params separately to avoid passing empty list to httpx
+ # (httpx strips existing query params from URL when params=[] is passed)
+ _encoded_params = encode_query(
+ jsonable_encoder(
+ remove_none_from_dict(
+ remove_omit_from_dict(
+ {
+ **(params if params is not None else {}),
+ **(
+ request_options.get("additional_query_parameters", {}) or {}
+ if request_options is not None
+ else {}
+ ),
+ },
+ omit,
+ )
+ )
+ )
+ )
+
+ response = self.httpx_client.request(
+ method=method,
+ url=urllib.parse.urljoin(f"{base_url}/", path),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self.base_headers(),
+ **(headers if headers is not None else {}),
+ **(request_options.get("additional_headers", {}) or {} if request_options is not None else {}),
+ }
+ )
+ ),
+ params=_encoded_params if _encoded_params else None,
+ json=json_body,
+ data=data_body,
+ content=content,
+ files=request_files,
+ timeout=timeout,
+ )
+
+ max_retries: int = request_options.get("max_retries", 2) if request_options is not None else 2
+ if _should_retry(response=response):
+ if retries < max_retries:
+ time.sleep(_retry_timeout(response=response, retries=retries))
+ return self.request(
+ path=path,
+ method=method,
+ base_url=base_url,
+ params=params,
+ json=json,
+ content=content,
+ files=files,
+ headers=headers,
+ request_options=request_options,
+ retries=retries + 1,
+ omit=omit,
+ )
+
+ return response
+
+ @contextmanager
+ def stream(
+ self,
+ path: typing.Optional[str] = None,
+ *,
+ method: str,
+ base_url: typing.Optional[str] = None,
+ params: typing.Optional[typing.Dict[str, typing.Any]] = None,
+ json: typing.Optional[typing.Any] = None,
+ data: typing.Optional[typing.Any] = None,
+ content: typing.Optional[typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]]] = None,
+ files: typing.Optional[
+ typing.Union[
+ typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]],
+ typing.List[typing.Tuple[str, File]],
+ ]
+ ] = None,
+ headers: typing.Optional[typing.Dict[str, typing.Any]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ retries: int = 0,
+ omit: typing.Optional[typing.Any] = None,
+ force_multipart: typing.Optional[bool] = None,
+ ) -> typing.Iterator[httpx.Response]:
+ base_url = self.get_base_url(base_url)
+ timeout = (
+ request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else self.base_timeout()
+ )
+
+ request_files: typing.Optional[RequestFiles] = (
+ convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
+ if (files is not None and files is not omit and isinstance(files, dict))
+ else None
+ )
+
+ if (request_files is None or len(request_files) == 0) and force_multipart:
+ request_files = FORCE_MULTIPART
+
+ json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
+
+ data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart)
+
+ # Compute encoded params separately to avoid passing empty list to httpx
+ # (httpx strips existing query params from URL when params=[] is passed)
+ _encoded_params = encode_query(
+ jsonable_encoder(
+ remove_none_from_dict(
+ remove_omit_from_dict(
+ {
+ **(params if params is not None else {}),
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ },
+ omit,
+ )
+ )
+ )
+ )
+
+ with self.httpx_client.stream(
+ method=method,
+ url=urllib.parse.urljoin(f"{base_url}/", path),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self.base_headers(),
+ **(headers if headers is not None else {}),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ params=_encoded_params if _encoded_params else None,
+ json=json_body,
+ data=data_body,
+ content=content,
+ files=request_files,
+ timeout=timeout,
+ ) as stream:
+ yield stream
+
+
+class AsyncHttpClient:
+ def __init__(
+ self,
+ *,
+ httpx_client: httpx.AsyncClient,
+ base_timeout: typing.Callable[[], typing.Optional[float]],
+ base_headers: typing.Callable[[], typing.Dict[str, str]],
+ base_url: typing.Optional[typing.Callable[[], str]] = None,
+ async_base_headers: typing.Optional[typing.Callable[[], typing.Awaitable[typing.Dict[str, str]]]] = None,
+ ):
+ self.base_url = base_url
+ self.base_timeout = base_timeout
+ self.base_headers = base_headers
+ self.async_base_headers = async_base_headers
+ self.httpx_client = httpx_client
+
+ async def _get_headers(self) -> typing.Dict[str, str]:
+ if self.async_base_headers is not None:
+ return await self.async_base_headers()
+ return self.base_headers()
+
+ def get_base_url(self, maybe_base_url: typing.Optional[str]) -> str:
+ base_url = maybe_base_url
+ if self.base_url is not None and base_url is None:
+ base_url = self.base_url()
+
+ if base_url is None:
+ raise ValueError("A base_url is required to make this request, please provide one and try again.")
+ return base_url
+
+ async def request(
+ self,
+ path: typing.Optional[str] = None,
+ *,
+ method: str,
+ base_url: typing.Optional[str] = None,
+ params: typing.Optional[typing.Dict[str, typing.Any]] = None,
+ json: typing.Optional[typing.Any] = None,
+ data: typing.Optional[typing.Any] = None,
+ content: typing.Optional[typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]]] = None,
+ files: typing.Optional[
+ typing.Union[
+ typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]],
+ typing.List[typing.Tuple[str, File]],
+ ]
+ ] = None,
+ headers: typing.Optional[typing.Dict[str, typing.Any]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ retries: int = 0,
+ omit: typing.Optional[typing.Any] = None,
+ force_multipart: typing.Optional[bool] = None,
+ ) -> httpx.Response:
+ base_url = self.get_base_url(base_url)
+ timeout = (
+ request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else self.base_timeout()
+ )
+
+ request_files: typing.Optional[RequestFiles] = (
+ convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
+ if (files is not None and files is not omit and isinstance(files, dict))
+ else None
+ )
+
+ if (request_files is None or len(request_files) == 0) and force_multipart:
+ request_files = FORCE_MULTIPART
+
+ json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
+
+ data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart)
+
+ # Get headers (supports async token providers)
+ _headers = await self._get_headers()
+
+ # Compute encoded params separately to avoid passing empty list to httpx
+ # (httpx strips existing query params from URL when params=[] is passed)
+ _encoded_params = encode_query(
+ jsonable_encoder(
+ remove_none_from_dict(
+ remove_omit_from_dict(
+ {
+ **(params if params is not None else {}),
+ **(
+ request_options.get("additional_query_parameters", {}) or {}
+ if request_options is not None
+ else {}
+ ),
+ },
+ omit,
+ )
+ )
+ )
+ )
+
+ # Add the input to each of these and do None-safety checks
+ response = await self.httpx_client.request(
+ method=method,
+ url=urllib.parse.urljoin(f"{base_url}/", path),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **_headers,
+ **(headers if headers is not None else {}),
+ **(request_options.get("additional_headers", {}) or {} if request_options is not None else {}),
+ }
+ )
+ ),
+ params=_encoded_params if _encoded_params else None,
+ json=json_body,
+ data=data_body,
+ content=content,
+ files=request_files,
+ timeout=timeout,
+ )
+
+ max_retries: int = request_options.get("max_retries", 2) if request_options is not None else 2
+ if _should_retry(response=response):
+ if retries < max_retries:
+ await asyncio.sleep(_retry_timeout(response=response, retries=retries))
+ return await self.request(
+ path=path,
+ method=method,
+ base_url=base_url,
+ params=params,
+ json=json,
+ content=content,
+ files=files,
+ headers=headers,
+ request_options=request_options,
+ retries=retries + 1,
+ omit=omit,
+ )
+ return response
+
+ @asynccontextmanager
+ async def stream(
+ self,
+ path: typing.Optional[str] = None,
+ *,
+ method: str,
+ base_url: typing.Optional[str] = None,
+ params: typing.Optional[typing.Dict[str, typing.Any]] = None,
+ json: typing.Optional[typing.Any] = None,
+ data: typing.Optional[typing.Any] = None,
+ content: typing.Optional[typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]]] = None,
+ files: typing.Optional[
+ typing.Union[
+ typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]],
+ typing.List[typing.Tuple[str, File]],
+ ]
+ ] = None,
+ headers: typing.Optional[typing.Dict[str, typing.Any]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ retries: int = 0,
+ omit: typing.Optional[typing.Any] = None,
+ force_multipart: typing.Optional[bool] = None,
+ ) -> typing.AsyncIterator[httpx.Response]:
+ base_url = self.get_base_url(base_url)
+ timeout = (
+ request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else self.base_timeout()
+ )
+
+ request_files: typing.Optional[RequestFiles] = (
+ convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
+ if (files is not None and files is not omit and isinstance(files, dict))
+ else None
+ )
+
+ if (request_files is None or len(request_files) == 0) and force_multipart:
+ request_files = FORCE_MULTIPART
+
+ json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
+
+ data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart)
+
+ # Get headers (supports async token providers)
+ _headers = await self._get_headers()
+
+ # Compute encoded params separately to avoid passing empty list to httpx
+ # (httpx strips existing query params from URL when params=[] is passed)
+ _encoded_params = encode_query(
+ jsonable_encoder(
+ remove_none_from_dict(
+ remove_omit_from_dict(
+ {
+ **(params if params is not None else {}),
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ },
+ omit=omit,
+ )
+ )
+ )
+ )
+
+ async with self.httpx_client.stream(
+ method=method,
+ url=urllib.parse.urljoin(f"{base_url}/", path),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **_headers,
+ **(headers if headers is not None else {}),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ params=_encoded_params if _encoded_params else None,
+ json=json_body,
+ data=data_body,
+ content=content,
+ files=request_files,
+ timeout=timeout,
+ ) as stream:
+ yield stream
diff --git a/src/auth0/management/core/http_response.py b/src/auth0/management/core/http_response.py
new file mode 100644
index 00000000..2479747e
--- /dev/null
+++ b/src/auth0/management/core/http_response.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from typing import Dict, Generic, TypeVar
+
+import httpx
+
+# Generic to represent the underlying type of the data wrapped by the HTTP response.
+T = TypeVar("T")
+
+
+class BaseHttpResponse:
+ """Minimalist HTTP response wrapper that exposes response headers."""
+
+ _response: httpx.Response
+
+ def __init__(self, response: httpx.Response):
+ self._response = response
+
+ @property
+ def headers(self) -> Dict[str, str]:
+ return dict(self._response.headers)
+
+
+class HttpResponse(Generic[T], BaseHttpResponse):
+ """HTTP response wrapper that exposes response headers and data."""
+
+ _data: T
+
+ def __init__(self, response: httpx.Response, data: T):
+ super().__init__(response)
+ self._data = data
+
+ @property
+ def data(self) -> T:
+ return self._data
+
+ def close(self) -> None:
+ self._response.close()
+
+
+class AsyncHttpResponse(Generic[T], BaseHttpResponse):
+ """HTTP response wrapper that exposes response headers and data."""
+
+ _data: T
+
+ def __init__(self, response: httpx.Response, data: T):
+ super().__init__(response)
+ self._data = data
+
+ @property
+ def data(self) -> T:
+ return self._data
+
+ async def close(self) -> None:
+ await self._response.aclose()
diff --git a/src/auth0/management/core/http_sse/__init__.py b/src/auth0/management/core/http_sse/__init__.py
new file mode 100644
index 00000000..730e5a33
--- /dev/null
+++ b/src/auth0/management/core/http_sse/__init__.py
@@ -0,0 +1,42 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from ._api import EventSource, aconnect_sse, connect_sse
+ from ._exceptions import SSEError
+ from ._models import ServerSentEvent
+_dynamic_imports: typing.Dict[str, str] = {
+ "EventSource": "._api",
+ "SSEError": "._exceptions",
+ "ServerSentEvent": "._models",
+ "aconnect_sse": "._api",
+ "connect_sse": "._api",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["EventSource", "SSEError", "ServerSentEvent", "aconnect_sse", "connect_sse"]
diff --git a/src/auth0/management/core/http_sse/_api.py b/src/auth0/management/core/http_sse/_api.py
new file mode 100644
index 00000000..f900b3b6
--- /dev/null
+++ b/src/auth0/management/core/http_sse/_api.py
@@ -0,0 +1,112 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import re
+from contextlib import asynccontextmanager, contextmanager
+from typing import Any, AsyncGenerator, AsyncIterator, Iterator, cast
+
+import httpx
+from ._decoders import SSEDecoder
+from ._exceptions import SSEError
+from ._models import ServerSentEvent
+
+
+class EventSource:
+ def __init__(self, response: httpx.Response) -> None:
+ self._response = response
+
+ def _check_content_type(self) -> None:
+ content_type = self._response.headers.get("content-type", "").partition(";")[0]
+ if "text/event-stream" not in content_type:
+ raise SSEError(
+ f"Expected response header Content-Type to contain 'text/event-stream', got {content_type!r}"
+ )
+
+ def _get_charset(self) -> str:
+ """Extract charset from Content-Type header, fallback to UTF-8."""
+ content_type = self._response.headers.get("content-type", "")
+
+ # Parse charset parameter using regex
+ charset_match = re.search(r"charset=([^;\s]+)", content_type, re.IGNORECASE)
+ if charset_match:
+ charset = charset_match.group(1).strip("\"'")
+ # Validate that it's a known encoding
+ try:
+ # Test if the charset is valid by trying to encode/decode
+ "test".encode(charset).decode(charset)
+ return charset
+ except (LookupError, UnicodeError):
+ # If charset is invalid, fall back to UTF-8
+ pass
+
+ # Default to UTF-8 if no charset specified or invalid charset
+ return "utf-8"
+
+ @property
+ def response(self) -> httpx.Response:
+ return self._response
+
+ def iter_sse(self) -> Iterator[ServerSentEvent]:
+ self._check_content_type()
+ decoder = SSEDecoder()
+ charset = self._get_charset()
+
+ buffer = ""
+ for chunk in self._response.iter_bytes():
+ # Decode chunk using detected charset
+ text_chunk = chunk.decode(charset, errors="replace")
+ buffer += text_chunk
+
+ # Process complete lines
+ while "\n" in buffer:
+ line, buffer = buffer.split("\n", 1)
+ line = line.rstrip("\r")
+ sse = decoder.decode(line)
+ # when we reach a "\n\n" => line = ''
+ # => decoder will attempt to return an SSE Event
+ if sse is not None:
+ yield sse
+
+ # Process any remaining data in buffer
+ if buffer.strip():
+ line = buffer.rstrip("\r")
+ sse = decoder.decode(line)
+ if sse is not None:
+ yield sse
+
+ async def aiter_sse(self) -> AsyncGenerator[ServerSentEvent, None]:
+ self._check_content_type()
+ decoder = SSEDecoder()
+ lines = cast(AsyncGenerator[str, None], self._response.aiter_lines())
+ try:
+ async for line in lines:
+ line = line.rstrip("\n")
+ sse = decoder.decode(line)
+ if sse is not None:
+ yield sse
+ finally:
+ await lines.aclose()
+
+
+@contextmanager
+def connect_sse(client: httpx.Client, method: str, url: str, **kwargs: Any) -> Iterator[EventSource]:
+ headers = kwargs.pop("headers", {})
+ headers["Accept"] = "text/event-stream"
+ headers["Cache-Control"] = "no-store"
+
+ with client.stream(method, url, headers=headers, **kwargs) as response:
+ yield EventSource(response)
+
+
+@asynccontextmanager
+async def aconnect_sse(
+ client: httpx.AsyncClient,
+ method: str,
+ url: str,
+ **kwargs: Any,
+) -> AsyncIterator[EventSource]:
+ headers = kwargs.pop("headers", {})
+ headers["Accept"] = "text/event-stream"
+ headers["Cache-Control"] = "no-store"
+
+ async with client.stream(method, url, headers=headers, **kwargs) as response:
+ yield EventSource(response)
diff --git a/src/auth0/management/core/http_sse/_decoders.py b/src/auth0/management/core/http_sse/_decoders.py
new file mode 100644
index 00000000..339b0890
--- /dev/null
+++ b/src/auth0/management/core/http_sse/_decoders.py
@@ -0,0 +1,61 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from typing import List, Optional
+
+from ._models import ServerSentEvent
+
+
+class SSEDecoder:
+ def __init__(self) -> None:
+ self._event = ""
+ self._data: List[str] = []
+ self._last_event_id = ""
+ self._retry: Optional[int] = None
+
+ def decode(self, line: str) -> Optional[ServerSentEvent]:
+ # See: https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation # noqa: E501
+
+ if not line:
+ if not self._event and not self._data and not self._last_event_id and self._retry is None:
+ return None
+
+ sse = ServerSentEvent(
+ event=self._event,
+ data="\n".join(self._data),
+ id=self._last_event_id,
+ retry=self._retry,
+ )
+
+ # NOTE: as per the SSE spec, do not reset last_event_id.
+ self._event = ""
+ self._data = []
+ self._retry = None
+
+ return sse
+
+ if line.startswith(":"):
+ return None
+
+ fieldname, _, value = line.partition(":")
+
+ if value.startswith(" "):
+ value = value[1:]
+
+ if fieldname == "event":
+ self._event = value
+ elif fieldname == "data":
+ self._data.append(value)
+ elif fieldname == "id":
+ if "\0" in value:
+ pass
+ else:
+ self._last_event_id = value
+ elif fieldname == "retry":
+ try:
+ self._retry = int(value)
+ except (TypeError, ValueError):
+ pass
+ else:
+ pass # Field is ignored.
+
+ return None
diff --git a/src/auth0/management/core/http_sse/_exceptions.py b/src/auth0/management/core/http_sse/_exceptions.py
new file mode 100644
index 00000000..81605a8a
--- /dev/null
+++ b/src/auth0/management/core/http_sse/_exceptions.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import httpx
+
+
+class SSEError(httpx.TransportError):
+ pass
diff --git a/src/auth0/management/core/http_sse/_models.py b/src/auth0/management/core/http_sse/_models.py
new file mode 100644
index 00000000..1af57f8f
--- /dev/null
+++ b/src/auth0/management/core/http_sse/_models.py
@@ -0,0 +1,17 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import json
+from dataclasses import dataclass
+from typing import Any, Optional
+
+
+@dataclass(frozen=True)
+class ServerSentEvent:
+ event: str = "message"
+ data: str = ""
+ id: str = ""
+ retry: Optional[int] = None
+
+ def json(self) -> Any:
+ """Parse the data field as JSON."""
+ return json.loads(self.data)
diff --git a/src/auth0/management/core/jsonable_encoder.py b/src/auth0/management/core/jsonable_encoder.py
new file mode 100644
index 00000000..afee3662
--- /dev/null
+++ b/src/auth0/management/core/jsonable_encoder.py
@@ -0,0 +1,100 @@
+# This file was auto-generated by Fern from our API Definition.
+
+"""
+jsonable_encoder converts a Python object to a JSON-friendly dict
+(e.g. datetimes to strings, Pydantic models to dicts).
+
+Taken from FastAPI, and made a bit simpler
+https://github.com/tiangolo/fastapi/blob/master/fastapi/encoders.py
+"""
+
+import base64
+import dataclasses
+import datetime as dt
+from enum import Enum
+from pathlib import PurePath
+from types import GeneratorType
+from typing import Any, Callable, Dict, List, Optional, Set, Union
+
+import pydantic
+from .datetime_utils import serialize_datetime
+from .pydantic_utilities import (
+ IS_PYDANTIC_V2,
+ encode_by_type,
+ to_jsonable_with_fallback,
+)
+
+SetIntStr = Set[Union[int, str]]
+DictIntStrAny = Dict[Union[int, str], Any]
+
+
+def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any], Any]]] = None) -> Any:
+ custom_encoder = custom_encoder or {}
+ if custom_encoder:
+ if type(obj) in custom_encoder:
+ return custom_encoder[type(obj)](obj)
+ else:
+ for encoder_type, encoder_instance in custom_encoder.items():
+ if isinstance(obj, encoder_type):
+ return encoder_instance(obj)
+ if isinstance(obj, pydantic.BaseModel):
+ if IS_PYDANTIC_V2:
+ encoder = getattr(obj.model_config, "json_encoders", {}) # type: ignore # Pydantic v2
+ else:
+ encoder = getattr(obj.__config__, "json_encoders", {}) # type: ignore # Pydantic v1
+ if custom_encoder:
+ encoder.update(custom_encoder)
+ obj_dict = obj.dict(by_alias=True)
+ if "__root__" in obj_dict:
+ obj_dict = obj_dict["__root__"]
+ if "root" in obj_dict:
+ obj_dict = obj_dict["root"]
+ return jsonable_encoder(obj_dict, custom_encoder=encoder)
+ if dataclasses.is_dataclass(obj):
+ obj_dict = dataclasses.asdict(obj) # type: ignore
+ return jsonable_encoder(obj_dict, custom_encoder=custom_encoder)
+ if isinstance(obj, bytes):
+ return base64.b64encode(obj).decode("utf-8")
+ if isinstance(obj, Enum):
+ return obj.value
+ if isinstance(obj, PurePath):
+ return str(obj)
+ if isinstance(obj, (str, int, float, type(None))):
+ return obj
+ if isinstance(obj, dt.datetime):
+ return serialize_datetime(obj)
+ if isinstance(obj, dt.date):
+ return str(obj)
+ if isinstance(obj, dict):
+ encoded_dict = {}
+ allowed_keys = set(obj.keys())
+ for key, value in obj.items():
+ if key in allowed_keys:
+ encoded_key = jsonable_encoder(key, custom_encoder=custom_encoder)
+ encoded_value = jsonable_encoder(value, custom_encoder=custom_encoder)
+ encoded_dict[encoded_key] = encoded_value
+ return encoded_dict
+ if isinstance(obj, (list, set, frozenset, GeneratorType, tuple)):
+ encoded_list = []
+ for item in obj:
+ encoded_list.append(jsonable_encoder(item, custom_encoder=custom_encoder))
+ return encoded_list
+
+ def fallback_serializer(o: Any) -> Any:
+ attempt_encode = encode_by_type(o)
+ if attempt_encode is not None:
+ return attempt_encode
+
+ try:
+ data = dict(o)
+ except Exception as e:
+ errors: List[Exception] = []
+ errors.append(e)
+ try:
+ data = vars(o)
+ except Exception as e:
+ errors.append(e)
+ raise ValueError(errors) from e
+ return jsonable_encoder(data, custom_encoder=custom_encoder)
+
+ return to_jsonable_with_fallback(obj, fallback_serializer)
diff --git a/src/auth0/management/core/pagination.py b/src/auth0/management/core/pagination.py
new file mode 100644
index 00000000..760b0899
--- /dev/null
+++ b/src/auth0/management/core/pagination.py
@@ -0,0 +1,82 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import AsyncIterator, Awaitable, Callable, Generic, Iterator, List, Optional, TypeVar
+
+# Generic to represent the underlying type of the results within a page
+T = TypeVar("T")
+# Generic to represent the type of the API response
+R = TypeVar("R")
+
+
+# SDKs implement a Page ABC per-pagination request, the endpoint then returns a pager that wraps this type
+# for example, an endpoint will return SyncPager[UserPage] where UserPage implements the Page ABC. ex:
+#
+# SyncPagerdomain:1 (ascending order by domain) is supported at this time.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListCustomDomainsResponseContent
+ Custom domains successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.custom_domains.list(
+ take=1,
+ from_="from",
+ q="q",
+ fields="fields",
+ include_fields=True,
+ sort="sort",
+ )
+ """
+ _response = self._raw_client.list(
+ take=take,
+ from_=from_,
+ q=q,
+ fields=fields,
+ include_fields=include_fields,
+ sort=sort,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def create(
+ self,
+ *,
+ domain: str,
+ type: CustomDomainProvisioningTypeEnum,
+ verification_method: typing.Optional[CustomDomainVerificationMethodEnum] = OMIT,
+ tls_policy: typing.Optional[CustomDomainTlsPolicyEnum] = OMIT,
+ custom_client_ip_header: typing.Optional[CustomDomainCustomClientIpHeader] = OMIT,
+ domain_metadata: typing.Optional[DomainMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateCustomDomainResponseContent:
+ """
+ Create a new custom domain.
+
+ Note: The custom domain will need to be verified before it will accept
+ requests.
+
+ Optional attributes that can be updated:
+
+ - custom_client_ip_header
+ - tls_policy
+
+
+ TLS Policies:
+
+ - recommended - for modern usage this includes TLS 1.2 only
+
+ Parameters
+ ----------
+ domain : str
+ Domain name.
+
+ type : CustomDomainProvisioningTypeEnum
+
+ verification_method : typing.Optional[CustomDomainVerificationMethodEnum]
+
+ tls_policy : typing.Optional[CustomDomainTlsPolicyEnum]
+
+ custom_client_ip_header : typing.Optional[CustomDomainCustomClientIpHeader]
+
+ domain_metadata : typing.Optional[DomainMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateCustomDomainResponseContent
+ Custom domain successfully created (verification is pending).
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.custom_domains.create(
+ domain="domain",
+ type="auth0_managed_certs",
+ )
+ """
+ _response = self._raw_client.create(
+ domain=domain,
+ type=type,
+ verification_method=verification_method,
+ tls_policy=tls_policy,
+ custom_client_ip_header=custom_client_ip_header,
+ domain_metadata=domain_metadata,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetCustomDomainResponseContent:
+ """
+ Retrieve a custom domain configuration and status.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCustomDomainResponseContent
+ Custom domain successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.custom_domains.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a custom domain and stop serving requests for it.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.custom_domains.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ tls_policy: typing.Optional[CustomDomainTlsPolicyEnum] = OMIT,
+ custom_client_ip_header: typing.Optional[CustomDomainCustomClientIpHeader] = OMIT,
+ domain_metadata: typing.Optional[DomainMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateCustomDomainResponseContent:
+ """
+ Update a custom domain.
+
+ These are the attributes that can be updated:
+
+ - custom_client_ip_header
+ - tls_policy
+
+ custom_client_ip_header for a domain, the body to
+ send should be:
+ { "custom_client_ip_header": "cf-connecting-ip" }
+
+ tls_policy for a domain, the body to send should be:
+ { "tls_policy": "recommended" }
+
+
+ TLS Policies:
+
+ - recommended - for modern usage this includes TLS 1.2 only
+
+
+ Some considerations:
+
+ - The TLS ciphers and protocols available in each TLS policy follow industry recommendations, and may be updated occasionally.
+ - The compatible TLS policy is no longer supported.
+
+ Parameters
+ ----------
+ id : str
+ The id of the custom domain to update
+
+ tls_policy : typing.Optional[CustomDomainTlsPolicyEnum]
+
+ custom_client_ip_header : typing.Optional[CustomDomainCustomClientIpHeader]
+
+ domain_metadata : typing.Optional[DomainMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateCustomDomainResponseContent
+ Custom domain updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.custom_domains.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ tls_policy=tls_policy,
+ custom_client_ip_header=custom_client_ip_header,
+ domain_metadata=domain_metadata,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def test(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> TestCustomDomainResponseContent:
+ """
+ Run the test process on a custom domain.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to test.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ TestCustomDomainResponseContent
+ Custom domain test successfully completed.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.custom_domains.test(
+ id="id",
+ )
+ """
+ _response = self._raw_client.test(id, request_options=request_options)
+ return _response.data
+
+ def verify(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> VerifyCustomDomainResponseContent:
+ """
+ Run the verification process on a custom domain.
+
+ Note: Check the status field to see its verification status. Once verification is complete, it may take up to 10 minutes before the custom domain can start accepting requests.
+
+ For self_managed_certs, when the custom domain is verified for the first time, the response will also include the cname_api_key which you will need to configure your proxy. This key must be kept secret, and is used to validate the proxy requests.
+
+ Learn more about verifying custom domains that use Auth0 Managed certificates.
+ Learn more about verifying custom domains that use Self Managed certificates.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to verify.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ VerifyCustomDomainResponseContent
+ Custom domain successfully verified.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.custom_domains.verify(
+ id="id",
+ )
+ """
+ _response = self._raw_client.verify(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncCustomDomainsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawCustomDomainsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawCustomDomainsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawCustomDomainsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ take: typing.Optional[int] = 50,
+ from_: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ListCustomDomainsResponseContent:
+ """
+ Retrieve details on custom domains.
+
+ Parameters
+ ----------
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ q : typing.Optional[str]
+ Query in Lucene query string syntax.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ sort : typing.Optional[str]
+ Field to sort by. Only domain:1 (ascending order by domain) is supported at this time.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListCustomDomainsResponseContent
+ Custom domains successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.custom_domains.list(
+ take=1,
+ from_="from",
+ q="q",
+ fields="fields",
+ include_fields=True,
+ sort="sort",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(
+ take=take,
+ from_=from_,
+ q=q,
+ fields=fields,
+ include_fields=include_fields,
+ sort=sort,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def create(
+ self,
+ *,
+ domain: str,
+ type: CustomDomainProvisioningTypeEnum,
+ verification_method: typing.Optional[CustomDomainVerificationMethodEnum] = OMIT,
+ tls_policy: typing.Optional[CustomDomainTlsPolicyEnum] = OMIT,
+ custom_client_ip_header: typing.Optional[CustomDomainCustomClientIpHeader] = OMIT,
+ domain_metadata: typing.Optional[DomainMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateCustomDomainResponseContent:
+ """
+ Create a new custom domain.
+
+ Note: The custom domain will need to be verified before it will accept
+ requests.
+
+ Optional attributes that can be updated:
+
+ - custom_client_ip_header
+ - tls_policy
+
+
+ TLS Policies:
+
+ - recommended - for modern usage this includes TLS 1.2 only
+
+ Parameters
+ ----------
+ domain : str
+ Domain name.
+
+ type : CustomDomainProvisioningTypeEnum
+
+ verification_method : typing.Optional[CustomDomainVerificationMethodEnum]
+
+ tls_policy : typing.Optional[CustomDomainTlsPolicyEnum]
+
+ custom_client_ip_header : typing.Optional[CustomDomainCustomClientIpHeader]
+
+ domain_metadata : typing.Optional[DomainMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateCustomDomainResponseContent
+ Custom domain successfully created (verification is pending).
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.custom_domains.create(
+ domain="domain",
+ type="auth0_managed_certs",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ domain=domain,
+ type=type,
+ verification_method=verification_method,
+ tls_policy=tls_policy,
+ custom_client_ip_header=custom_client_ip_header,
+ domain_metadata=domain_metadata,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetCustomDomainResponseContent:
+ """
+ Retrieve a custom domain configuration and status.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCustomDomainResponseContent
+ Custom domain successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.custom_domains.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a custom domain and stop serving requests for it.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.custom_domains.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ tls_policy: typing.Optional[CustomDomainTlsPolicyEnum] = OMIT,
+ custom_client_ip_header: typing.Optional[CustomDomainCustomClientIpHeader] = OMIT,
+ domain_metadata: typing.Optional[DomainMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateCustomDomainResponseContent:
+ """
+ Update a custom domain.
+
+ These are the attributes that can be updated:
+
+ - custom_client_ip_header
+ - tls_policy
+
+ custom_client_ip_header for a domain, the body to
+ send should be:
+ { "custom_client_ip_header": "cf-connecting-ip" }
+
+ tls_policy for a domain, the body to send should be:
+ { "tls_policy": "recommended" }
+
+
+ TLS Policies:
+
+ - recommended - for modern usage this includes TLS 1.2 only
+
+
+ Some considerations:
+
+ - The TLS ciphers and protocols available in each TLS policy follow industry recommendations, and may be updated occasionally.
+ - The compatible TLS policy is no longer supported.
+
+ Parameters
+ ----------
+ id : str
+ The id of the custom domain to update
+
+ tls_policy : typing.Optional[CustomDomainTlsPolicyEnum]
+
+ custom_client_ip_header : typing.Optional[CustomDomainCustomClientIpHeader]
+
+ domain_metadata : typing.Optional[DomainMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateCustomDomainResponseContent
+ Custom domain updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.custom_domains.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ tls_policy=tls_policy,
+ custom_client_ip_header=custom_client_ip_header,
+ domain_metadata=domain_metadata,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def test(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> TestCustomDomainResponseContent:
+ """
+ Run the test process on a custom domain.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to test.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ TestCustomDomainResponseContent
+ Custom domain test successfully completed.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.custom_domains.test(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.test(id, request_options=request_options)
+ return _response.data
+
+ async def verify(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> VerifyCustomDomainResponseContent:
+ """
+ Run the verification process on a custom domain.
+
+ Note: Check the status field to see its verification status. Once verification is complete, it may take up to 10 minutes before the custom domain can start accepting requests.
+
+ For self_managed_certs, when the custom domain is verified for the first time, the response will also include the cname_api_key which you will need to configure your proxy. This key must be kept secret, and is used to validate the proxy requests.
+
+ Learn more about verifying custom domains that use Auth0 Managed certificates.
+ Learn more about verifying custom domains that use Self Managed certificates.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to verify.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ VerifyCustomDomainResponseContent
+ Custom domain successfully verified.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.custom_domains.verify(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.verify(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/custom_domains/raw_client.py b/src/auth0/management/custom_domains/raw_client.py
new file mode 100644
index 00000000..34a69304
--- /dev/null
+++ b/src/auth0/management/custom_domains/raw_client.py
@@ -0,0 +1,1501 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.create_custom_domain_response_content import CreateCustomDomainResponseContent
+from ..types.custom_domain_custom_client_ip_header import CustomDomainCustomClientIpHeader
+from ..types.custom_domain_provisioning_type_enum import CustomDomainProvisioningTypeEnum
+from ..types.custom_domain_tls_policy_enum import CustomDomainTlsPolicyEnum
+from ..types.custom_domain_verification_method_enum import CustomDomainVerificationMethodEnum
+from ..types.domain_metadata import DomainMetadata
+from ..types.get_custom_domain_response_content import GetCustomDomainResponseContent
+from ..types.list_custom_domains_response_content import ListCustomDomainsResponseContent
+from ..types.test_custom_domain_response_content import TestCustomDomainResponseContent
+from ..types.update_custom_domain_response_content import UpdateCustomDomainResponseContent
+from ..types.verify_custom_domain_response_content import VerifyCustomDomainResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawCustomDomainsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ take: typing.Optional[int] = 50,
+ from_: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[ListCustomDomainsResponseContent]:
+ """
+ Retrieve details on custom domains.
+
+ Parameters
+ ----------
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ q : typing.Optional[str]
+ Query in Lucene query string syntax.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ sort : typing.Optional[str]
+ Field to sort by. Only domain:1 (ascending order by domain) is supported at this time.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListCustomDomainsResponseContent]
+ Custom domains successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "custom-domains",
+ method="GET",
+ params={
+ "take": take,
+ "from": from_,
+ "q": q,
+ "fields": fields,
+ "include_fields": include_fields,
+ "sort": sort,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListCustomDomainsResponseContent,
+ parse_obj_as(
+ type_=ListCustomDomainsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ domain: str,
+ type: CustomDomainProvisioningTypeEnum,
+ verification_method: typing.Optional[CustomDomainVerificationMethodEnum] = OMIT,
+ tls_policy: typing.Optional[CustomDomainTlsPolicyEnum] = OMIT,
+ custom_client_ip_header: typing.Optional[CustomDomainCustomClientIpHeader] = OMIT,
+ domain_metadata: typing.Optional[DomainMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateCustomDomainResponseContent]:
+ """
+ Create a new custom domain.
+
+ Note: The custom domain will need to be verified before it will accept
+ requests.
+
+ Optional attributes that can be updated:
+
+ - custom_client_ip_header
+ - tls_policy
+
+
+ TLS Policies:
+
+ - recommended - for modern usage this includes TLS 1.2 only
+
+ Parameters
+ ----------
+ domain : str
+ Domain name.
+
+ type : CustomDomainProvisioningTypeEnum
+
+ verification_method : typing.Optional[CustomDomainVerificationMethodEnum]
+
+ tls_policy : typing.Optional[CustomDomainTlsPolicyEnum]
+
+ custom_client_ip_header : typing.Optional[CustomDomainCustomClientIpHeader]
+
+ domain_metadata : typing.Optional[DomainMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateCustomDomainResponseContent]
+ Custom domain successfully created (verification is pending).
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "custom-domains",
+ method="POST",
+ json={
+ "domain": domain,
+ "type": type,
+ "verification_method": verification_method,
+ "tls_policy": tls_policy,
+ "custom_client_ip_header": custom_client_ip_header,
+ "domain_metadata": domain_metadata,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateCustomDomainResponseContent,
+ parse_obj_as(
+ type_=CreateCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetCustomDomainResponseContent]:
+ """
+ Retrieve a custom domain configuration and status.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetCustomDomainResponseContent]
+ Custom domain successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCustomDomainResponseContent,
+ parse_obj_as(
+ type_=GetCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a custom domain and stop serving requests for it.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ tls_policy: typing.Optional[CustomDomainTlsPolicyEnum] = OMIT,
+ custom_client_ip_header: typing.Optional[CustomDomainCustomClientIpHeader] = OMIT,
+ domain_metadata: typing.Optional[DomainMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateCustomDomainResponseContent]:
+ """
+ Update a custom domain.
+
+ These are the attributes that can be updated:
+
+ - custom_client_ip_header
+ - tls_policy
+
+ custom_client_ip_header for a domain, the body to
+ send should be:
+ { "custom_client_ip_header": "cf-connecting-ip" }
+
+ tls_policy for a domain, the body to send should be:
+ { "tls_policy": "recommended" }
+
+
+ TLS Policies:
+
+ - recommended - for modern usage this includes TLS 1.2 only
+
+
+ Some considerations:
+
+ - The TLS ciphers and protocols available in each TLS policy follow industry recommendations, and may be updated occasionally.
+ - The compatible TLS policy is no longer supported.
+
+ Parameters
+ ----------
+ id : str
+ The id of the custom domain to update
+
+ tls_policy : typing.Optional[CustomDomainTlsPolicyEnum]
+
+ custom_client_ip_header : typing.Optional[CustomDomainCustomClientIpHeader]
+
+ domain_metadata : typing.Optional[DomainMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateCustomDomainResponseContent]
+ Custom domain updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "tls_policy": tls_policy,
+ "custom_client_ip_header": custom_client_ip_header,
+ "domain_metadata": domain_metadata,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateCustomDomainResponseContent,
+ parse_obj_as(
+ type_=UpdateCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def test(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[TestCustomDomainResponseContent]:
+ """
+ Run the test process on a custom domain.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to test.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[TestCustomDomainResponseContent]
+ Custom domain test successfully completed.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}/test",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ TestCustomDomainResponseContent,
+ parse_obj_as(
+ type_=TestCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def verify(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[VerifyCustomDomainResponseContent]:
+ """
+ Run the verification process on a custom domain.
+
+ Note: Check the status field to see its verification status. Once verification is complete, it may take up to 10 minutes before the custom domain can start accepting requests.
+
+ For self_managed_certs, when the custom domain is verified for the first time, the response will also include the cname_api_key which you will need to configure your proxy. This key must be kept secret, and is used to validate the proxy requests.
+
+ Learn more about verifying custom domains that use Auth0 Managed certificates.
+ Learn more about verifying custom domains that use Self Managed certificates.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to verify.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[VerifyCustomDomainResponseContent]
+ Custom domain successfully verified.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}/verify",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ VerifyCustomDomainResponseContent,
+ parse_obj_as(
+ type_=VerifyCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawCustomDomainsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ take: typing.Optional[int] = 50,
+ from_: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[ListCustomDomainsResponseContent]:
+ """
+ Retrieve details on custom domains.
+
+ Parameters
+ ----------
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ q : typing.Optional[str]
+ Query in Lucene query string syntax.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ sort : typing.Optional[str]
+ Field to sort by. Only domain:1 (ascending order by domain) is supported at this time.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListCustomDomainsResponseContent]
+ Custom domains successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "custom-domains",
+ method="GET",
+ params={
+ "take": take,
+ "from": from_,
+ "q": q,
+ "fields": fields,
+ "include_fields": include_fields,
+ "sort": sort,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListCustomDomainsResponseContent,
+ parse_obj_as(
+ type_=ListCustomDomainsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ domain: str,
+ type: CustomDomainProvisioningTypeEnum,
+ verification_method: typing.Optional[CustomDomainVerificationMethodEnum] = OMIT,
+ tls_policy: typing.Optional[CustomDomainTlsPolicyEnum] = OMIT,
+ custom_client_ip_header: typing.Optional[CustomDomainCustomClientIpHeader] = OMIT,
+ domain_metadata: typing.Optional[DomainMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateCustomDomainResponseContent]:
+ """
+ Create a new custom domain.
+
+ Note: The custom domain will need to be verified before it will accept
+ requests.
+
+ Optional attributes that can be updated:
+
+ - custom_client_ip_header
+ - tls_policy
+
+
+ TLS Policies:
+
+ - recommended - for modern usage this includes TLS 1.2 only
+
+ Parameters
+ ----------
+ domain : str
+ Domain name.
+
+ type : CustomDomainProvisioningTypeEnum
+
+ verification_method : typing.Optional[CustomDomainVerificationMethodEnum]
+
+ tls_policy : typing.Optional[CustomDomainTlsPolicyEnum]
+
+ custom_client_ip_header : typing.Optional[CustomDomainCustomClientIpHeader]
+
+ domain_metadata : typing.Optional[DomainMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateCustomDomainResponseContent]
+ Custom domain successfully created (verification is pending).
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "custom-domains",
+ method="POST",
+ json={
+ "domain": domain,
+ "type": type,
+ "verification_method": verification_method,
+ "tls_policy": tls_policy,
+ "custom_client_ip_header": custom_client_ip_header,
+ "domain_metadata": domain_metadata,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateCustomDomainResponseContent,
+ parse_obj_as(
+ type_=CreateCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetCustomDomainResponseContent]:
+ """
+ Retrieve a custom domain configuration and status.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetCustomDomainResponseContent]
+ Custom domain successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCustomDomainResponseContent,
+ parse_obj_as(
+ type_=GetCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a custom domain and stop serving requests for it.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ tls_policy: typing.Optional[CustomDomainTlsPolicyEnum] = OMIT,
+ custom_client_ip_header: typing.Optional[CustomDomainCustomClientIpHeader] = OMIT,
+ domain_metadata: typing.Optional[DomainMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateCustomDomainResponseContent]:
+ """
+ Update a custom domain.
+
+ These are the attributes that can be updated:
+
+ - custom_client_ip_header
+ - tls_policy
+
+ custom_client_ip_header for a domain, the body to
+ send should be:
+ { "custom_client_ip_header": "cf-connecting-ip" }
+
+ tls_policy for a domain, the body to send should be:
+ { "tls_policy": "recommended" }
+
+
+ TLS Policies:
+
+ - recommended - for modern usage this includes TLS 1.2 only
+
+
+ Some considerations:
+
+ - The TLS ciphers and protocols available in each TLS policy follow industry recommendations, and may be updated occasionally.
+ - The compatible TLS policy is no longer supported.
+
+ Parameters
+ ----------
+ id : str
+ The id of the custom domain to update
+
+ tls_policy : typing.Optional[CustomDomainTlsPolicyEnum]
+
+ custom_client_ip_header : typing.Optional[CustomDomainCustomClientIpHeader]
+
+ domain_metadata : typing.Optional[DomainMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateCustomDomainResponseContent]
+ Custom domain updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "tls_policy": tls_policy,
+ "custom_client_ip_header": custom_client_ip_header,
+ "domain_metadata": domain_metadata,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateCustomDomainResponseContent,
+ parse_obj_as(
+ type_=UpdateCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def test(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[TestCustomDomainResponseContent]:
+ """
+ Run the test process on a custom domain.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to test.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[TestCustomDomainResponseContent]
+ Custom domain test successfully completed.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}/test",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ TestCustomDomainResponseContent,
+ parse_obj_as(
+ type_=TestCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def verify(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[VerifyCustomDomainResponseContent]:
+ """
+ Run the verification process on a custom domain.
+
+ Note: Check the status field to see its verification status. Once verification is complete, it may take up to 10 minutes before the custom domain can start accepting requests.
+
+ For self_managed_certs, when the custom domain is verified for the first time, the response will also include the cname_api_key which you will need to configure your proxy. This key must be kept secret, and is used to validate the proxy requests.
+
+ Learn more about verifying custom domains that use Auth0 Managed certificates.
+ Learn more about verifying custom domains that use Self Managed certificates.
+
+ Parameters
+ ----------
+ id : str
+ ID of the custom domain to verify.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[VerifyCustomDomainResponseContent]
+ Custom domain successfully verified.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"custom-domains/{jsonable_encoder(id)}/verify",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ VerifyCustomDomainResponseContent,
+ parse_obj_as(
+ type_=VerifyCustomDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/device_credentials/__init__.py b/src/auth0/management/device_credentials/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/device_credentials/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/device_credentials/client.py b/src/auth0/management/device_credentials/client.py
new file mode 100644
index 00000000..970e9f24
--- /dev/null
+++ b/src/auth0/management/device_credentials/client.py
@@ -0,0 +1,420 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.create_public_key_device_credential_response_content import CreatePublicKeyDeviceCredentialResponseContent
+from ..types.device_credential import DeviceCredential
+from ..types.device_credential_type_enum import DeviceCredentialTypeEnum
+from ..types.list_device_credentials_offset_paginated_response_content import (
+ ListDeviceCredentialsOffsetPaginatedResponseContent,
+)
+from .raw_client import AsyncRawDeviceCredentialsClient, RawDeviceCredentialsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class DeviceCredentialsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawDeviceCredentialsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawDeviceCredentialsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawDeviceCredentialsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ user_id: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ type: typing.Optional[DeviceCredentialTypeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[DeviceCredential, ListDeviceCredentialsOffsetPaginatedResponseContent]:
+ """
+ Retrieve device credential information (public_key, refresh_token, or rotating_refresh_token) associated with a specific user.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. There is a maximum of 1000 results allowed from this endpoint.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ user_id : typing.Optional[str]
+ user_id of the devices to retrieve.
+
+ client_id : typing.Optional[str]
+ client_id of the devices to retrieve.
+
+ type : typing.Optional[DeviceCredentialTypeEnum]
+ Type of credentials to retrieve. Must be `public_key`, `refresh_token` or `rotating_refresh_token`. The property will default to `refresh_token` when paging is requested
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[DeviceCredential, ListDeviceCredentialsOffsetPaginatedResponseContent]
+ Device credentials successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.device_credentials.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ fields="fields",
+ include_fields=True,
+ user_id="user_id",
+ client_id="client_id",
+ type="public_key",
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ fields=fields,
+ include_fields=include_fields,
+ user_id=user_id,
+ client_id=client_id,
+ type=type,
+ request_options=request_options,
+ )
+
+ def create_public_key(
+ self,
+ *,
+ device_name: str,
+ value: str,
+ device_id: str,
+ client_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreatePublicKeyDeviceCredentialResponseContent:
+ """
+ Create a device credential public key to manage refresh token rotation for a given user_id. Device Credentials APIs are designed for ad-hoc administrative use only and paging is by default enabled for GET requests.
+
+ When refresh token rotation is enabled, the endpoint becomes consistent. For more information, read Signing Keys.
+
+ Parameters
+ ----------
+ device_name : str
+ Name for this device easily recognized by owner.
+
+ value : str
+ Base64 encoded string containing the credential.
+
+ device_id : str
+ Unique identifier for the device. Recommend using Android_ID on Android and identifierForVendor.
+
+ client_id : typing.Optional[str]
+ client_id of the client (application) this credential is for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreatePublicKeyDeviceCredentialResponseContent
+ Device credentials successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.device_credentials.create_public_key(
+ device_name="device_name",
+ value="value",
+ device_id="device_id",
+ )
+ """
+ _response = self._raw_client.create_public_key(
+ device_name=device_name,
+ value=value,
+ device_id=device_id,
+ client_id=client_id,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Permanently delete a device credential (such as a refresh token or public key) with the given ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the credential to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.device_credentials.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncDeviceCredentialsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawDeviceCredentialsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawDeviceCredentialsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawDeviceCredentialsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ user_id: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ type: typing.Optional[DeviceCredentialTypeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[DeviceCredential, ListDeviceCredentialsOffsetPaginatedResponseContent]:
+ """
+ Retrieve device credential information (public_key, refresh_token, or rotating_refresh_token) associated with a specific user.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. There is a maximum of 1000 results allowed from this endpoint.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ user_id : typing.Optional[str]
+ user_id of the devices to retrieve.
+
+ client_id : typing.Optional[str]
+ client_id of the devices to retrieve.
+
+ type : typing.Optional[DeviceCredentialTypeEnum]
+ Type of credentials to retrieve. Must be `public_key`, `refresh_token` or `rotating_refresh_token`. The property will default to `refresh_token` when paging is requested
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[DeviceCredential, ListDeviceCredentialsOffsetPaginatedResponseContent]
+ Device credentials successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.device_credentials.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ fields="fields",
+ include_fields=True,
+ user_id="user_id",
+ client_id="client_id",
+ type="public_key",
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ fields=fields,
+ include_fields=include_fields,
+ user_id=user_id,
+ client_id=client_id,
+ type=type,
+ request_options=request_options,
+ )
+
+ async def create_public_key(
+ self,
+ *,
+ device_name: str,
+ value: str,
+ device_id: str,
+ client_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreatePublicKeyDeviceCredentialResponseContent:
+ """
+ Create a device credential public key to manage refresh token rotation for a given user_id. Device Credentials APIs are designed for ad-hoc administrative use only and paging is by default enabled for GET requests.
+
+ When refresh token rotation is enabled, the endpoint becomes consistent. For more information, read Signing Keys.
+
+ Parameters
+ ----------
+ device_name : str
+ Name for this device easily recognized by owner.
+
+ value : str
+ Base64 encoded string containing the credential.
+
+ device_id : str
+ Unique identifier for the device. Recommend using Android_ID on Android and identifierForVendor.
+
+ client_id : typing.Optional[str]
+ client_id of the client (application) this credential is for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreatePublicKeyDeviceCredentialResponseContent
+ Device credentials successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.device_credentials.create_public_key(
+ device_name="device_name",
+ value="value",
+ device_id="device_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create_public_key(
+ device_name=device_name,
+ value=value,
+ device_id=device_id,
+ client_id=client_id,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Permanently delete a device credential (such as a refresh token or public key) with the given ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the credential to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.device_credentials.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/device_credentials/raw_client.py b/src/auth0/management/device_credentials/raw_client.py
new file mode 100644
index 00000000..d1975d66
--- /dev/null
+++ b/src/auth0/management/device_credentials/raw_client.py
@@ -0,0 +1,709 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.create_public_key_device_credential_response_content import CreatePublicKeyDeviceCredentialResponseContent
+from ..types.device_credential import DeviceCredential
+from ..types.device_credential_type_enum import DeviceCredentialTypeEnum
+from ..types.list_device_credentials_offset_paginated_response_content import (
+ ListDeviceCredentialsOffsetPaginatedResponseContent,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawDeviceCredentialsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ user_id: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ type: typing.Optional[DeviceCredentialTypeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[DeviceCredential, ListDeviceCredentialsOffsetPaginatedResponseContent]:
+ """
+ Retrieve device credential information (public_key, refresh_token, or rotating_refresh_token) associated with a specific user.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. There is a maximum of 1000 results allowed from this endpoint.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ user_id : typing.Optional[str]
+ user_id of the devices to retrieve.
+
+ client_id : typing.Optional[str]
+ client_id of the devices to retrieve.
+
+ type : typing.Optional[DeviceCredentialTypeEnum]
+ Type of credentials to retrieve. Must be `public_key`, `refresh_token` or `rotating_refresh_token`. The property will default to `refresh_token` when paging is requested
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[DeviceCredential, ListDeviceCredentialsOffsetPaginatedResponseContent]
+ Device credentials successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "device-credentials",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "fields": fields,
+ "include_fields": include_fields,
+ "user_id": user_id,
+ "client_id": client_id,
+ "type": type,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListDeviceCredentialsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListDeviceCredentialsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.device_credentials
+ _has_next = True
+ _get_next = lambda: self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ fields=fields,
+ include_fields=include_fields,
+ user_id=user_id,
+ client_id=client_id,
+ type=type,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create_public_key(
+ self,
+ *,
+ device_name: str,
+ value: str,
+ device_id: str,
+ client_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreatePublicKeyDeviceCredentialResponseContent]:
+ """
+ Create a device credential public key to manage refresh token rotation for a given user_id. Device Credentials APIs are designed for ad-hoc administrative use only and paging is by default enabled for GET requests.
+
+ When refresh token rotation is enabled, the endpoint becomes consistent. For more information, read Signing Keys.
+
+ Parameters
+ ----------
+ device_name : str
+ Name for this device easily recognized by owner.
+
+ value : str
+ Base64 encoded string containing the credential.
+
+ device_id : str
+ Unique identifier for the device. Recommend using Android_ID on Android and identifierForVendor.
+
+ client_id : typing.Optional[str]
+ client_id of the client (application) this credential is for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreatePublicKeyDeviceCredentialResponseContent]
+ Device credentials successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "device-credentials",
+ method="POST",
+ json={
+ "device_name": device_name,
+ "value": value,
+ "device_id": device_id,
+ "client_id": client_id,
+ "type": "public_key",
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreatePublicKeyDeviceCredentialResponseContent,
+ parse_obj_as(
+ type_=CreatePublicKeyDeviceCredentialResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Permanently delete a device credential (such as a refresh token or public key) with the given ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the credential to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"device-credentials/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawDeviceCredentialsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ user_id: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ type: typing.Optional[DeviceCredentialTypeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[DeviceCredential, ListDeviceCredentialsOffsetPaginatedResponseContent]:
+ """
+ Retrieve device credential information (public_key, refresh_token, or rotating_refresh_token) associated with a specific user.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. There is a maximum of 1000 results allowed from this endpoint.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ user_id : typing.Optional[str]
+ user_id of the devices to retrieve.
+
+ client_id : typing.Optional[str]
+ client_id of the devices to retrieve.
+
+ type : typing.Optional[DeviceCredentialTypeEnum]
+ Type of credentials to retrieve. Must be `public_key`, `refresh_token` or `rotating_refresh_token`. The property will default to `refresh_token` when paging is requested
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[DeviceCredential, ListDeviceCredentialsOffsetPaginatedResponseContent]
+ Device credentials successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "device-credentials",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "fields": fields,
+ "include_fields": include_fields,
+ "user_id": user_id,
+ "client_id": client_id,
+ "type": type,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListDeviceCredentialsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListDeviceCredentialsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.device_credentials
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ fields=fields,
+ include_fields=include_fields,
+ user_id=user_id,
+ client_id=client_id,
+ type=type,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create_public_key(
+ self,
+ *,
+ device_name: str,
+ value: str,
+ device_id: str,
+ client_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreatePublicKeyDeviceCredentialResponseContent]:
+ """
+ Create a device credential public key to manage refresh token rotation for a given user_id. Device Credentials APIs are designed for ad-hoc administrative use only and paging is by default enabled for GET requests.
+
+ When refresh token rotation is enabled, the endpoint becomes consistent. For more information, read Signing Keys.
+
+ Parameters
+ ----------
+ device_name : str
+ Name for this device easily recognized by owner.
+
+ value : str
+ Base64 encoded string containing the credential.
+
+ device_id : str
+ Unique identifier for the device. Recommend using Android_ID on Android and identifierForVendor.
+
+ client_id : typing.Optional[str]
+ client_id of the client (application) this credential is for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreatePublicKeyDeviceCredentialResponseContent]
+ Device credentials successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "device-credentials",
+ method="POST",
+ json={
+ "device_name": device_name,
+ "value": value,
+ "device_id": device_id,
+ "client_id": client_id,
+ "type": "public_key",
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreatePublicKeyDeviceCredentialResponseContent,
+ parse_obj_as(
+ type_=CreatePublicKeyDeviceCredentialResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Permanently delete a device credential (such as a refresh token or public key) with the given ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the credential to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"device-credentials/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/email_templates/__init__.py b/src/auth0/management/email_templates/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/email_templates/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/email_templates/client.py b/src/auth0/management/email_templates/client.py
new file mode 100644
index 00000000..2384dbf3
--- /dev/null
+++ b/src/auth0/management/email_templates/client.py
@@ -0,0 +1,635 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.create_email_template_response_content import CreateEmailTemplateResponseContent
+from ..types.email_template_name_enum import EmailTemplateNameEnum
+from ..types.get_email_template_response_content import GetEmailTemplateResponseContent
+from ..types.set_email_template_response_content import SetEmailTemplateResponseContent
+from ..types.update_email_template_response_content import UpdateEmailTemplateResponseContent
+from .raw_client import AsyncRawEmailTemplatesClient, RawEmailTemplatesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class EmailTemplatesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawEmailTemplatesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawEmailTemplatesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawEmailTemplatesClient
+ """
+ return self._raw_client
+
+ def create(
+ self,
+ *,
+ template: EmailTemplateNameEnum,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateEmailTemplateResponseContent:
+ """
+ Create an email template.
+
+ Parameters
+ ----------
+ template : EmailTemplateNameEnum
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateEmailTemplateResponseContent
+ Template successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.email_templates.create(
+ template="verify_email",
+ )
+ """
+ _response = self._raw_client.create(
+ template=template,
+ body=body,
+ from_=from_,
+ result_url=result_url,
+ subject=subject,
+ syntax=syntax,
+ url_lifetime_in_seconds=url_lifetime_in_seconds,
+ include_email_in_redirect=include_email_in_redirect,
+ enabled=enabled,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self, template_name: EmailTemplateNameEnum, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetEmailTemplateResponseContent:
+ """
+ Retrieve an email template by pre-defined name. These names are `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, and `async_approval`. The names `change_password`, and `password_reset` are also supported for legacy scenarios.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetEmailTemplateResponseContent
+ Template successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.email_templates.get(
+ template_name="verify_email",
+ )
+ """
+ _response = self._raw_client.get(template_name, request_options=request_options)
+ return _response.data
+
+ def set(
+ self,
+ template_name: EmailTemplateNameEnum,
+ *,
+ template: EmailTemplateNameEnum,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SetEmailTemplateResponseContent:
+ """
+ Update an email template.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ template : EmailTemplateNameEnum
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetEmailTemplateResponseContent
+ Template successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.email_templates.set(
+ template_name="verify_email",
+ template="verify_email",
+ )
+ """
+ _response = self._raw_client.set(
+ template_name,
+ template=template,
+ body=body,
+ from_=from_,
+ result_url=result_url,
+ subject=subject,
+ syntax=syntax,
+ url_lifetime_in_seconds=url_lifetime_in_seconds,
+ include_email_in_redirect=include_email_in_redirect,
+ enabled=enabled,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def update(
+ self,
+ template_name: EmailTemplateNameEnum,
+ *,
+ template: typing.Optional[EmailTemplateNameEnum] = OMIT,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateEmailTemplateResponseContent:
+ """
+ Modify an email template.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ template : typing.Optional[EmailTemplateNameEnum]
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateEmailTemplateResponseContent
+ Template successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.email_templates.update(
+ template_name="verify_email",
+ )
+ """
+ _response = self._raw_client.update(
+ template_name,
+ template=template,
+ body=body,
+ from_=from_,
+ result_url=result_url,
+ subject=subject,
+ syntax=syntax,
+ url_lifetime_in_seconds=url_lifetime_in_seconds,
+ include_email_in_redirect=include_email_in_redirect,
+ enabled=enabled,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncEmailTemplatesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawEmailTemplatesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawEmailTemplatesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawEmailTemplatesClient
+ """
+ return self._raw_client
+
+ async def create(
+ self,
+ *,
+ template: EmailTemplateNameEnum,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateEmailTemplateResponseContent:
+ """
+ Create an email template.
+
+ Parameters
+ ----------
+ template : EmailTemplateNameEnum
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateEmailTemplateResponseContent
+ Template successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.email_templates.create(
+ template="verify_email",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ template=template,
+ body=body,
+ from_=from_,
+ result_url=result_url,
+ subject=subject,
+ syntax=syntax,
+ url_lifetime_in_seconds=url_lifetime_in_seconds,
+ include_email_in_redirect=include_email_in_redirect,
+ enabled=enabled,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self, template_name: EmailTemplateNameEnum, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetEmailTemplateResponseContent:
+ """
+ Retrieve an email template by pre-defined name. These names are `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, and `async_approval`. The names `change_password`, and `password_reset` are also supported for legacy scenarios.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetEmailTemplateResponseContent
+ Template successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.email_templates.get(
+ template_name="verify_email",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(template_name, request_options=request_options)
+ return _response.data
+
+ async def set(
+ self,
+ template_name: EmailTemplateNameEnum,
+ *,
+ template: EmailTemplateNameEnum,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SetEmailTemplateResponseContent:
+ """
+ Update an email template.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ template : EmailTemplateNameEnum
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetEmailTemplateResponseContent
+ Template successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.email_templates.set(
+ template_name="verify_email",
+ template="verify_email",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.set(
+ template_name,
+ template=template,
+ body=body,
+ from_=from_,
+ result_url=result_url,
+ subject=subject,
+ syntax=syntax,
+ url_lifetime_in_seconds=url_lifetime_in_seconds,
+ include_email_in_redirect=include_email_in_redirect,
+ enabled=enabled,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def update(
+ self,
+ template_name: EmailTemplateNameEnum,
+ *,
+ template: typing.Optional[EmailTemplateNameEnum] = OMIT,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateEmailTemplateResponseContent:
+ """
+ Modify an email template.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ template : typing.Optional[EmailTemplateNameEnum]
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateEmailTemplateResponseContent
+ Template successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.email_templates.update(
+ template_name="verify_email",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ template_name,
+ template=template,
+ body=body,
+ from_=from_,
+ result_url=result_url,
+ subject=subject,
+ syntax=syntax,
+ url_lifetime_in_seconds=url_lifetime_in_seconds,
+ include_email_in_redirect=include_email_in_redirect,
+ enabled=enabled,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/email_templates/raw_client.py b/src/auth0/management/email_templates/raw_client.py
new file mode 100644
index 00000000..03eb2307
--- /dev/null
+++ b/src/auth0/management/email_templates/raw_client.py
@@ -0,0 +1,1075 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.create_email_template_response_content import CreateEmailTemplateResponseContent
+from ..types.email_template_name_enum import EmailTemplateNameEnum
+from ..types.get_email_template_response_content import GetEmailTemplateResponseContent
+from ..types.set_email_template_response_content import SetEmailTemplateResponseContent
+from ..types.update_email_template_response_content import UpdateEmailTemplateResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawEmailTemplatesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def create(
+ self,
+ *,
+ template: EmailTemplateNameEnum,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateEmailTemplateResponseContent]:
+ """
+ Create an email template.
+
+ Parameters
+ ----------
+ template : EmailTemplateNameEnum
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateEmailTemplateResponseContent]
+ Template successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "email-templates",
+ method="POST",
+ json={
+ "template": template,
+ "body": body,
+ "from": from_,
+ "resultUrl": result_url,
+ "subject": subject,
+ "syntax": syntax,
+ "urlLifetimeInSeconds": url_lifetime_in_seconds,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateEmailTemplateResponseContent,
+ parse_obj_as(
+ type_=CreateEmailTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, template_name: EmailTemplateNameEnum, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetEmailTemplateResponseContent]:
+ """
+ Retrieve an email template by pre-defined name. These names are `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, and `async_approval`. The names `change_password`, and `password_reset` are also supported for legacy scenarios.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetEmailTemplateResponseContent]
+ Template successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"email-templates/{jsonable_encoder(template_name)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetEmailTemplateResponseContent,
+ parse_obj_as(
+ type_=GetEmailTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def set(
+ self,
+ template_name: EmailTemplateNameEnum,
+ *,
+ template: EmailTemplateNameEnum,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[SetEmailTemplateResponseContent]:
+ """
+ Update an email template.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ template : EmailTemplateNameEnum
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[SetEmailTemplateResponseContent]
+ Template successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"email-templates/{jsonable_encoder(template_name)}",
+ method="PUT",
+ json={
+ "template": template,
+ "body": body,
+ "from": from_,
+ "resultUrl": result_url,
+ "subject": subject,
+ "syntax": syntax,
+ "urlLifetimeInSeconds": url_lifetime_in_seconds,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetEmailTemplateResponseContent,
+ parse_obj_as(
+ type_=SetEmailTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ template_name: EmailTemplateNameEnum,
+ *,
+ template: typing.Optional[EmailTemplateNameEnum] = OMIT,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateEmailTemplateResponseContent]:
+ """
+ Modify an email template.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ template : typing.Optional[EmailTemplateNameEnum]
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateEmailTemplateResponseContent]
+ Template successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"email-templates/{jsonable_encoder(template_name)}",
+ method="PATCH",
+ json={
+ "template": template,
+ "body": body,
+ "from": from_,
+ "resultUrl": result_url,
+ "subject": subject,
+ "syntax": syntax,
+ "urlLifetimeInSeconds": url_lifetime_in_seconds,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateEmailTemplateResponseContent,
+ parse_obj_as(
+ type_=UpdateEmailTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawEmailTemplatesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def create(
+ self,
+ *,
+ template: EmailTemplateNameEnum,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateEmailTemplateResponseContent]:
+ """
+ Create an email template.
+
+ Parameters
+ ----------
+ template : EmailTemplateNameEnum
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateEmailTemplateResponseContent]
+ Template successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "email-templates",
+ method="POST",
+ json={
+ "template": template,
+ "body": body,
+ "from": from_,
+ "resultUrl": result_url,
+ "subject": subject,
+ "syntax": syntax,
+ "urlLifetimeInSeconds": url_lifetime_in_seconds,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateEmailTemplateResponseContent,
+ parse_obj_as(
+ type_=CreateEmailTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, template_name: EmailTemplateNameEnum, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetEmailTemplateResponseContent]:
+ """
+ Retrieve an email template by pre-defined name. These names are `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, and `async_approval`. The names `change_password`, and `password_reset` are also supported for legacy scenarios.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetEmailTemplateResponseContent]
+ Template successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"email-templates/{jsonable_encoder(template_name)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetEmailTemplateResponseContent,
+ parse_obj_as(
+ type_=GetEmailTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def set(
+ self,
+ template_name: EmailTemplateNameEnum,
+ *,
+ template: EmailTemplateNameEnum,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[SetEmailTemplateResponseContent]:
+ """
+ Update an email template.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ template : EmailTemplateNameEnum
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[SetEmailTemplateResponseContent]
+ Template successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"email-templates/{jsonable_encoder(template_name)}",
+ method="PUT",
+ json={
+ "template": template,
+ "body": body,
+ "from": from_,
+ "resultUrl": result_url,
+ "subject": subject,
+ "syntax": syntax,
+ "urlLifetimeInSeconds": url_lifetime_in_seconds,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetEmailTemplateResponseContent,
+ parse_obj_as(
+ type_=SetEmailTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ template_name: EmailTemplateNameEnum,
+ *,
+ template: typing.Optional[EmailTemplateNameEnum] = OMIT,
+ body: typing.Optional[str] = OMIT,
+ from_: typing.Optional[str] = "sender@auth0.com",
+ result_url: typing.Optional[str] = OMIT,
+ subject: typing.Optional[str] = OMIT,
+ syntax: typing.Optional[str] = "liquid",
+ url_lifetime_in_seconds: typing.Optional[float] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ enabled: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateEmailTemplateResponseContent]:
+ """
+ Modify an email template.
+
+ Parameters
+ ----------
+ template_name : EmailTemplateNameEnum
+ Template name. Can be `verify_email`, `verify_email_by_code`, `reset_email`, `reset_email_by_code`, `welcome_email`, `blocked_account`, `stolen_credentials`, `enrollment_email`, `mfa_oob_code`, `user_invitation`, `async_approval`, `change_password` (legacy), or `password_reset` (legacy).
+
+ template : typing.Optional[EmailTemplateNameEnum]
+
+ body : typing.Optional[str]
+ Body of the email template.
+
+ from_ : typing.Optional[str]
+ Senders `from` email address.
+
+ result_url : typing.Optional[str]
+ URL to redirect the user to after a successful action.
+
+ subject : typing.Optional[str]
+ Subject line of the email.
+
+ syntax : typing.Optional[str]
+ Syntax of the template body.
+
+ url_lifetime_in_seconds : typing.Optional[float]
+ Lifetime in seconds that the link within the email will be valid for.
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+
+ enabled : typing.Optional[bool]
+ Whether the template is enabled (true) or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateEmailTemplateResponseContent]
+ Template successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"email-templates/{jsonable_encoder(template_name)}",
+ method="PATCH",
+ json={
+ "template": template,
+ "body": body,
+ "from": from_,
+ "resultUrl": result_url,
+ "subject": subject,
+ "syntax": syntax,
+ "urlLifetimeInSeconds": url_lifetime_in_seconds,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateEmailTemplateResponseContent,
+ parse_obj_as(
+ type_=UpdateEmailTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/emails/__init__.py b/src/auth0/management/emails/__init__.py
new file mode 100644
index 00000000..97e7e3bd
--- /dev/null
+++ b/src/auth0/management/emails/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import provider
+_dynamic_imports: typing.Dict[str, str] = {"provider": ".provider"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["provider"]
diff --git a/src/auth0/management/emails/client.py b/src/auth0/management/emails/client.py
new file mode 100644
index 00000000..25ec6425
--- /dev/null
+++ b/src/auth0/management/emails/client.py
@@ -0,0 +1,63 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .raw_client import AsyncRawEmailsClient, RawEmailsClient
+
+if typing.TYPE_CHECKING:
+ from .provider.client import AsyncProviderClient, ProviderClient
+
+
+class EmailsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawEmailsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._provider: typing.Optional[ProviderClient] = None
+
+ @property
+ def with_raw_response(self) -> RawEmailsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawEmailsClient
+ """
+ return self._raw_client
+
+ @property
+ def provider(self):
+ if self._provider is None:
+ from .provider.client import ProviderClient # noqa: E402
+
+ self._provider = ProviderClient(client_wrapper=self._client_wrapper)
+ return self._provider
+
+
+class AsyncEmailsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawEmailsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._provider: typing.Optional[AsyncProviderClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawEmailsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawEmailsClient
+ """
+ return self._raw_client
+
+ @property
+ def provider(self):
+ if self._provider is None:
+ from .provider.client import AsyncProviderClient # noqa: E402
+
+ self._provider = AsyncProviderClient(client_wrapper=self._client_wrapper)
+ return self._provider
diff --git a/src/auth0/management/emails/provider/__init__.py b/src/auth0/management/emails/provider/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/emails/provider/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/emails/provider/client.py b/src/auth0/management/emails/provider/client.py
new file mode 100644
index 00000000..01b1c782
--- /dev/null
+++ b/src/auth0/management/emails/provider/client.py
@@ -0,0 +1,602 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.create_email_provider_response_content import CreateEmailProviderResponseContent
+from ...types.email_provider_credentials_schema import EmailProviderCredentialsSchema
+from ...types.email_provider_name_enum import EmailProviderNameEnum
+from ...types.email_specific_provider_settings_with_additional_properties import (
+ EmailSpecificProviderSettingsWithAdditionalProperties,
+)
+from ...types.get_email_provider_response_content import GetEmailProviderResponseContent
+from ...types.update_email_provider_response_content import UpdateEmailProviderResponseContent
+from .raw_client import AsyncRawProviderClient, RawProviderClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ProviderClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawProviderClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawProviderClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawProviderClient
+ """
+ return self._raw_client
+
+ def get(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetEmailProviderResponseContent:
+ """
+ Retrieve details of the email provider configuration in your tenant. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (dependent upon include_fields) from the result. Leave empty to retrieve `name` and `enabled`. Additional fields available include `credentials`, `default_from_address`, and `settings`.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetEmailProviderResponseContent
+ Email provider successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.emails.provider.get(
+ fields="fields",
+ include_fields=True,
+ )
+ """
+ _response = self._raw_client.get(fields=fields, include_fields=include_fields, request_options=request_options)
+ return _response.data
+
+ def create(
+ self,
+ *,
+ name: EmailProviderNameEnum,
+ credentials: EmailProviderCredentialsSchema,
+ enabled: typing.Optional[bool] = True,
+ default_from_address: typing.Optional[str] = OMIT,
+ settings: typing.Optional[EmailSpecificProviderSettingsWithAdditionalProperties] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateEmailProviderResponseContent:
+ """
+ Create an email provider. The credentials object
+ requires different properties depending on the email provider (which is specified using the name property):
+ mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+ options, which will be used when sending an email:
+ smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ credentials object
+ requires different properties depending on the email provider (which is specified using the name property):
+ mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+ options, which will be used when sending an email:
+ smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ credentials object
+ requires different properties depending on the email provider (which is specified using the name property):
+ mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+ options, which will be used when sending an email:
+ smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ credentials object
+ requires different properties depending on the email provider (which is specified using the name property):
+ mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+ options, which will be used when sending an email:
+ smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ credentials object
+ requires different properties depending on the email provider (which is specified using the name property):
+ mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+ options, which will be used when sending an email:
+ smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ credentials object
+ requires different properties depending on the email provider (which is specified using the name property):
+ mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+ options, which will be used when sending an email:
+ smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ credentials object
+ requires different properties depending on the email provider (which is specified using the name property):
+ mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+ options, which will be used when sending an email:
+ smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ credentials object
+ requires different properties depending on the email provider (which is specified using the name property):
+ mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+ options, which will be used when sending an email:
+ smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListGuardianPoliciesResponseContent
+ Success
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.guardian.policies.list()
+ """
+ _response = self._raw_client.list(request_options=request_options)
+ return _response.data
+
+ def set(
+ self, *, request: SetGuardianPoliciesRequestContent, request_options: typing.Optional[RequestOptions] = None
+ ) -> SetGuardianPoliciesResponseContent:
+ """
+ Set multi-factor authentication (MFA) policies for your tenant.
+
+ The following policies are supported:
+ all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+
+ Parameters
+ ----------
+ request : SetGuardianPoliciesRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetGuardianPoliciesResponseContent
+ Policies updated
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.guardian.policies.set(
+ request=["all-applications"],
+ )
+ """
+ _response = self._raw_client.set(request=request, request_options=request_options)
+ return _response.data
+
+
+class AsyncPoliciesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawPoliciesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawPoliciesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawPoliciesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListGuardianPoliciesResponseContent:
+ """
+ Retrieve the multi-factor authentication (MFA) policies configured for your tenant.
+
+ The following policies are supported:
+ all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListGuardianPoliciesResponseContent
+ Success
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.guardian.policies.list()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(request_options=request_options)
+ return _response.data
+
+ async def set(
+ self, *, request: SetGuardianPoliciesRequestContent, request_options: typing.Optional[RequestOptions] = None
+ ) -> SetGuardianPoliciesResponseContent:
+ """
+ Set multi-factor authentication (MFA) policies for your tenant.
+
+ The following policies are supported:
+ all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+
+ Parameters
+ ----------
+ request : SetGuardianPoliciesRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetGuardianPoliciesResponseContent
+ Policies updated
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.guardian.policies.set(
+ request=["all-applications"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.set(request=request, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/guardian/policies/raw_client.py b/src/auth0/management/guardian/policies/raw_client.py
new file mode 100644
index 00000000..99c49cb9
--- /dev/null
+++ b/src/auth0/management/guardian/policies/raw_client.py
@@ -0,0 +1,351 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.list_guardian_policies_response_content import ListGuardianPoliciesResponseContent
+from ...types.set_guardian_policies_request_content import SetGuardianPoliciesRequestContent
+from ...types.set_guardian_policies_response_content import SetGuardianPoliciesResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawPoliciesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[ListGuardianPoliciesResponseContent]:
+ """
+ Retrieve the multi-factor authentication (MFA) policies configured for your tenant.
+
+ The following policies are supported:
+ all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListGuardianPoliciesResponseContent]
+ Success
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "guardian/policies",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListGuardianPoliciesResponseContent,
+ parse_obj_as(
+ type_=ListGuardianPoliciesResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def set(
+ self, *, request: SetGuardianPoliciesRequestContent, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[SetGuardianPoliciesResponseContent]:
+ """
+ Set multi-factor authentication (MFA) policies for your tenant.
+
+ The following policies are supported:
+ all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+
+ Parameters
+ ----------
+ request : SetGuardianPoliciesRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[SetGuardianPoliciesResponseContent]
+ Policies updated
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "guardian/policies",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetGuardianPoliciesResponseContent,
+ parse_obj_as(
+ type_=SetGuardianPoliciesResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawPoliciesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[ListGuardianPoliciesResponseContent]:
+ """
+ Retrieve the multi-factor authentication (MFA) policies configured for your tenant.
+
+ The following policies are supported:
+ all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListGuardianPoliciesResponseContent]
+ Success
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "guardian/policies",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListGuardianPoliciesResponseContent,
+ parse_obj_as(
+ type_=ListGuardianPoliciesResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def set(
+ self, *, request: SetGuardianPoliciesRequestContent, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[SetGuardianPoliciesResponseContent]:
+ """
+ Set multi-factor authentication (MFA) policies for your tenant.
+
+ The following policies are supported:
+ all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+
+ Parameters
+ ----------
+ request : SetGuardianPoliciesRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[SetGuardianPoliciesResponseContent]
+ Policies updated
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "guardian/policies",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetGuardianPoliciesResponseContent,
+ parse_obj_as(
+ type_=SetGuardianPoliciesResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/guardian/raw_client.py b/src/auth0/management/guardian/raw_client.py
new file mode 100644
index 00000000..944c20d1
--- /dev/null
+++ b/src/auth0/management/guardian/raw_client.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+
+
+class RawGuardianClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+
+class AsyncRawGuardianClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
diff --git a/src/auth0/management/hooks/__init__.py b/src/auth0/management/hooks/__init__.py
new file mode 100644
index 00000000..a205c50b
--- /dev/null
+++ b/src/auth0/management/hooks/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import secrets
+_dynamic_imports: typing.Dict[str, str] = {"secrets": ".secrets"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["secrets"]
diff --git a/src/auth0/management/hooks/client.py b/src/auth0/management/hooks/client.py
new file mode 100644
index 00000000..f345ba5e
--- /dev/null
+++ b/src/auth0/management/hooks/client.py
@@ -0,0 +1,623 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.create_hook_response_content import CreateHookResponseContent
+from ..types.get_hook_response_content import GetHookResponseContent
+from ..types.hook import Hook
+from ..types.hook_dependencies import HookDependencies
+from ..types.hook_trigger_id_enum import HookTriggerIdEnum
+from ..types.list_hooks_offset_paginated_response_content import ListHooksOffsetPaginatedResponseContent
+from ..types.update_hook_response_content import UpdateHookResponseContent
+from .raw_client import AsyncRawHooksClient, RawHooksClient
+
+if typing.TYPE_CHECKING:
+ from .secrets.client import AsyncSecretsClient, SecretsClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class HooksClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawHooksClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._secrets: typing.Optional[SecretsClient] = None
+
+ @property
+ def with_raw_response(self) -> RawHooksClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawHooksClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ enabled: typing.Optional[bool] = None,
+ fields: typing.Optional[str] = None,
+ trigger_id: typing.Optional[HookTriggerIdEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Hook, ListHooksOffsetPaginatedResponseContent]:
+ """
+ Retrieve all hooks. Accepts a list of fields to include or exclude in the result.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ enabled : typing.Optional[bool]
+ Optional filter on whether a hook is enabled (true) or disabled (false).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include in the result. Leave empty to retrieve all fields.
+
+ trigger_id : typing.Optional[HookTriggerIdEnum]
+ Retrieves hooks that match the trigger
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Hook, ListHooksOffsetPaginatedResponseContent]
+ Hooks successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.hooks.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ enabled=True,
+ fields="fields",
+ trigger_id="credentials-exchange",
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ enabled=enabled,
+ fields=fields,
+ trigger_id=trigger_id,
+ request_options=request_options,
+ )
+
+ def create(
+ self,
+ *,
+ name: str = "my-hook",
+ script: str = "module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };",
+ trigger_id: HookTriggerIdEnum,
+ enabled: typing.Optional[bool] = False,
+ dependencies: typing.Optional[HookDependencies] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateHookResponseContent:
+ """
+ Create a new hook.
+
+ Parameters
+ ----------
+ name : str
+ Name of this hook.
+
+ script : str
+ Code to be executed when this hook runs.
+
+ trigger_id : HookTriggerIdEnum
+
+ enabled : typing.Optional[bool]
+ Whether this hook will be executed (true) or ignored (false).
+
+ dependencies : typing.Optional[HookDependencies]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateHookResponseContent
+ Hook successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.hooks.create(
+ name="name",
+ script="script",
+ trigger_id="credentials-exchange",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name,
+ script=script,
+ trigger_id=trigger_id,
+ enabled=enabled,
+ dependencies=dependencies,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self, id: str, *, fields: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetHookResponseContent:
+ """
+ Retrieve a hook by its ID. Accepts a list of fields to include in the result.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include in the result. Leave empty to retrieve all fields.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetHookResponseContent
+ Hook successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.hooks.get(
+ id="id",
+ fields="fields",
+ )
+ """
+ _response = self._raw_client.get(id, fields=fields, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.hooks.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = "my-hook",
+ script: typing.Optional[
+ str
+ ] = "module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };",
+ enabled: typing.Optional[bool] = False,
+ dependencies: typing.Optional[HookDependencies] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateHookResponseContent:
+ """
+ Update an existing hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to update.
+
+ name : typing.Optional[str]
+ Name of this hook.
+
+ script : typing.Optional[str]
+ Code to be executed when this hook runs.
+
+ enabled : typing.Optional[bool]
+ Whether this hook will be executed (true) or ignored (false).
+
+ dependencies : typing.Optional[HookDependencies]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateHookResponseContent
+ Hook successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.hooks.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id, name=name, script=script, enabled=enabled, dependencies=dependencies, request_options=request_options
+ )
+ return _response.data
+
+ @property
+ def secrets(self):
+ if self._secrets is None:
+ from .secrets.client import SecretsClient # noqa: E402
+
+ self._secrets = SecretsClient(client_wrapper=self._client_wrapper)
+ return self._secrets
+
+
+class AsyncHooksClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawHooksClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._secrets: typing.Optional[AsyncSecretsClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawHooksClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawHooksClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ enabled: typing.Optional[bool] = None,
+ fields: typing.Optional[str] = None,
+ trigger_id: typing.Optional[HookTriggerIdEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Hook, ListHooksOffsetPaginatedResponseContent]:
+ """
+ Retrieve all hooks. Accepts a list of fields to include or exclude in the result.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ enabled : typing.Optional[bool]
+ Optional filter on whether a hook is enabled (true) or disabled (false).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include in the result. Leave empty to retrieve all fields.
+
+ trigger_id : typing.Optional[HookTriggerIdEnum]
+ Retrieves hooks that match the trigger
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Hook, ListHooksOffsetPaginatedResponseContent]
+ Hooks successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.hooks.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ enabled=True,
+ fields="fields",
+ trigger_id="credentials-exchange",
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ enabled=enabled,
+ fields=fields,
+ trigger_id=trigger_id,
+ request_options=request_options,
+ )
+
+ async def create(
+ self,
+ *,
+ name: str = "my-hook",
+ script: str = "module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };",
+ trigger_id: HookTriggerIdEnum,
+ enabled: typing.Optional[bool] = False,
+ dependencies: typing.Optional[HookDependencies] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateHookResponseContent:
+ """
+ Create a new hook.
+
+ Parameters
+ ----------
+ name : str
+ Name of this hook.
+
+ script : str
+ Code to be executed when this hook runs.
+
+ trigger_id : HookTriggerIdEnum
+
+ enabled : typing.Optional[bool]
+ Whether this hook will be executed (true) or ignored (false).
+
+ dependencies : typing.Optional[HookDependencies]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateHookResponseContent
+ Hook successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.hooks.create(
+ name="name",
+ script="script",
+ trigger_id="credentials-exchange",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name,
+ script=script,
+ trigger_id=trigger_id,
+ enabled=enabled,
+ dependencies=dependencies,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self, id: str, *, fields: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetHookResponseContent:
+ """
+ Retrieve a hook by its ID. Accepts a list of fields to include in the result.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include in the result. Leave empty to retrieve all fields.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetHookResponseContent
+ Hook successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.hooks.get(
+ id="id",
+ fields="fields",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, fields=fields, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.hooks.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = "my-hook",
+ script: typing.Optional[
+ str
+ ] = "module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };",
+ enabled: typing.Optional[bool] = False,
+ dependencies: typing.Optional[HookDependencies] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateHookResponseContent:
+ """
+ Update an existing hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to update.
+
+ name : typing.Optional[str]
+ Name of this hook.
+
+ script : typing.Optional[str]
+ Code to be executed when this hook runs.
+
+ enabled : typing.Optional[bool]
+ Whether this hook will be executed (true) or ignored (false).
+
+ dependencies : typing.Optional[HookDependencies]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateHookResponseContent
+ Hook successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.hooks.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id, name=name, script=script, enabled=enabled, dependencies=dependencies, request_options=request_options
+ )
+ return _response.data
+
+ @property
+ def secrets(self):
+ if self._secrets is None:
+ from .secrets.client import AsyncSecretsClient # noqa: E402
+
+ self._secrets = AsyncSecretsClient(client_wrapper=self._client_wrapper)
+ return self._secrets
diff --git a/src/auth0/management/hooks/raw_client.py b/src/auth0/management/hooks/raw_client.py
new file mode 100644
index 00000000..6937c2e9
--- /dev/null
+++ b/src/auth0/management/hooks/raw_client.py
@@ -0,0 +1,1179 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.create_hook_response_content import CreateHookResponseContent
+from ..types.get_hook_response_content import GetHookResponseContent
+from ..types.hook import Hook
+from ..types.hook_dependencies import HookDependencies
+from ..types.hook_trigger_id_enum import HookTriggerIdEnum
+from ..types.list_hooks_offset_paginated_response_content import ListHooksOffsetPaginatedResponseContent
+from ..types.update_hook_response_content import UpdateHookResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawHooksClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ enabled: typing.Optional[bool] = None,
+ fields: typing.Optional[str] = None,
+ trigger_id: typing.Optional[HookTriggerIdEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Hook, ListHooksOffsetPaginatedResponseContent]:
+ """
+ Retrieve all hooks. Accepts a list of fields to include or exclude in the result.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ enabled : typing.Optional[bool]
+ Optional filter on whether a hook is enabled (true) or disabled (false).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include in the result. Leave empty to retrieve all fields.
+
+ trigger_id : typing.Optional[HookTriggerIdEnum]
+ Retrieves hooks that match the trigger
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Hook, ListHooksOffsetPaginatedResponseContent]
+ Hooks successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "hooks",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "enabled": enabled,
+ "fields": fields,
+ "triggerId": trigger_id,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListHooksOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListHooksOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.hooks
+ _has_next = True
+ _get_next = lambda: self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ enabled=enabled,
+ fields=fields,
+ trigger_id=trigger_id,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: str = "my-hook",
+ script: str = "module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };",
+ trigger_id: HookTriggerIdEnum,
+ enabled: typing.Optional[bool] = False,
+ dependencies: typing.Optional[HookDependencies] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateHookResponseContent]:
+ """
+ Create a new hook.
+
+ Parameters
+ ----------
+ name : str
+ Name of this hook.
+
+ script : str
+ Code to be executed when this hook runs.
+
+ trigger_id : HookTriggerIdEnum
+
+ enabled : typing.Optional[bool]
+ Whether this hook will be executed (true) or ignored (false).
+
+ dependencies : typing.Optional[HookDependencies]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateHookResponseContent]
+ Hook successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "hooks",
+ method="POST",
+ json={
+ "name": name,
+ "script": script,
+ "enabled": enabled,
+ "dependencies": dependencies,
+ "triggerId": trigger_id,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateHookResponseContent,
+ parse_obj_as(
+ type_=CreateHookResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, fields: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetHookResponseContent]:
+ """
+ Retrieve a hook by its ID. Accepts a list of fields to include in the result.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include in the result. Leave empty to retrieve all fields.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetHookResponseContent]
+ Hook successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetHookResponseContent,
+ parse_obj_as(
+ type_=GetHookResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = "my-hook",
+ script: typing.Optional[
+ str
+ ] = "module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };",
+ enabled: typing.Optional[bool] = False,
+ dependencies: typing.Optional[HookDependencies] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateHookResponseContent]:
+ """
+ Update an existing hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to update.
+
+ name : typing.Optional[str]
+ Name of this hook.
+
+ script : typing.Optional[str]
+ Code to be executed when this hook runs.
+
+ enabled : typing.Optional[bool]
+ Whether this hook will be executed (true) or ignored (false).
+
+ dependencies : typing.Optional[HookDependencies]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateHookResponseContent]
+ Hook successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "script": script,
+ "enabled": enabled,
+ "dependencies": dependencies,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateHookResponseContent,
+ parse_obj_as(
+ type_=UpdateHookResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawHooksClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ enabled: typing.Optional[bool] = None,
+ fields: typing.Optional[str] = None,
+ trigger_id: typing.Optional[HookTriggerIdEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Hook, ListHooksOffsetPaginatedResponseContent]:
+ """
+ Retrieve all hooks. Accepts a list of fields to include or exclude in the result.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ enabled : typing.Optional[bool]
+ Optional filter on whether a hook is enabled (true) or disabled (false).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include in the result. Leave empty to retrieve all fields.
+
+ trigger_id : typing.Optional[HookTriggerIdEnum]
+ Retrieves hooks that match the trigger
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Hook, ListHooksOffsetPaginatedResponseContent]
+ Hooks successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "hooks",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "enabled": enabled,
+ "fields": fields,
+ "triggerId": trigger_id,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListHooksOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListHooksOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.hooks
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ enabled=enabled,
+ fields=fields,
+ trigger_id=trigger_id,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: str = "my-hook",
+ script: str = "module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };",
+ trigger_id: HookTriggerIdEnum,
+ enabled: typing.Optional[bool] = False,
+ dependencies: typing.Optional[HookDependencies] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateHookResponseContent]:
+ """
+ Create a new hook.
+
+ Parameters
+ ----------
+ name : str
+ Name of this hook.
+
+ script : str
+ Code to be executed when this hook runs.
+
+ trigger_id : HookTriggerIdEnum
+
+ enabled : typing.Optional[bool]
+ Whether this hook will be executed (true) or ignored (false).
+
+ dependencies : typing.Optional[HookDependencies]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateHookResponseContent]
+ Hook successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "hooks",
+ method="POST",
+ json={
+ "name": name,
+ "script": script,
+ "enabled": enabled,
+ "dependencies": dependencies,
+ "triggerId": trigger_id,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateHookResponseContent,
+ parse_obj_as(
+ type_=CreateHookResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, fields: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetHookResponseContent]:
+ """
+ Retrieve a hook by its ID. Accepts a list of fields to include in the result.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include in the result. Leave empty to retrieve all fields.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetHookResponseContent]
+ Hook successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetHookResponseContent,
+ parse_obj_as(
+ type_=GetHookResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = "my-hook",
+ script: typing.Optional[
+ str
+ ] = "module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };",
+ enabled: typing.Optional[bool] = False,
+ dependencies: typing.Optional[HookDependencies] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateHookResponseContent]:
+ """
+ Update an existing hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to update.
+
+ name : typing.Optional[str]
+ Name of this hook.
+
+ script : typing.Optional[str]
+ Code to be executed when this hook runs.
+
+ enabled : typing.Optional[bool]
+ Whether this hook will be executed (true) or ignored (false).
+
+ dependencies : typing.Optional[HookDependencies]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateHookResponseContent]
+ Hook successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "script": script,
+ "enabled": enabled,
+ "dependencies": dependencies,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateHookResponseContent,
+ parse_obj_as(
+ type_=UpdateHookResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/hooks/secrets/__init__.py b/src/auth0/management/hooks/secrets/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/hooks/secrets/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/hooks/secrets/client.py b/src/auth0/management/hooks/secrets/client.py
new file mode 100644
index 00000000..810c69d7
--- /dev/null
+++ b/src/auth0/management/hooks/secrets/client.py
@@ -0,0 +1,376 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.create_hook_secret_request_content import CreateHookSecretRequestContent
+from ...types.delete_hook_secret_request_content import DeleteHookSecretRequestContent
+from ...types.get_hook_secret_response_content import GetHookSecretResponseContent
+from ...types.update_hook_secret_request_content import UpdateHookSecretRequestContent
+from .raw_client import AsyncRawSecretsClient, RawSecretsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class SecretsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSecretsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawSecretsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSecretsClient
+ """
+ return self._raw_client
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetHookSecretResponseContent:
+ """
+ Retrieve a hook's secrets by the ID of the hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to retrieve secrets from.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetHookSecretResponseContent
+ Hook secrets successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.hooks.secrets.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def create(
+ self,
+ id: str,
+ *,
+ request: CreateHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Add one or more secrets to an existing hook. Accepts an object of key-value pairs, where the key is the name of the secret. A hook can have a maximum of 20 secrets.
+
+ Parameters
+ ----------
+ id : str
+ The id of the hook to retrieve
+
+ request : CreateHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.hooks.secrets.create(
+ id="id",
+ request={"key": "value"},
+ )
+ """
+ _response = self._raw_client.create(id, request=request, request_options=request_options)
+ return _response.data
+
+ def delete(
+ self,
+ id: str,
+ *,
+ request: DeleteHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Delete one or more existing secrets for a given hook. Accepts an array of secret names to delete.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook whose secrets to delete.
+
+ request : DeleteHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.hooks.secrets.delete(
+ id="id",
+ request=["string"],
+ )
+ """
+ _response = self._raw_client.delete(id, request=request, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ request: UpdateHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Update one or more existing secrets for an existing hook. Accepts an object of key-value pairs, where the key is the name of the existing secret.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook whose secrets to update.
+
+ request : UpdateHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.hooks.secrets.update(
+ id="id",
+ request={"key": "value"},
+ )
+ """
+ _response = self._raw_client.update(id, request=request, request_options=request_options)
+ return _response.data
+
+
+class AsyncSecretsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSecretsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawSecretsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSecretsClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetHookSecretResponseContent:
+ """
+ Retrieve a hook's secrets by the ID of the hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to retrieve secrets from.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetHookSecretResponseContent
+ Hook secrets successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.hooks.secrets.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def create(
+ self,
+ id: str,
+ *,
+ request: CreateHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Add one or more secrets to an existing hook. Accepts an object of key-value pairs, where the key is the name of the secret. A hook can have a maximum of 20 secrets.
+
+ Parameters
+ ----------
+ id : str
+ The id of the hook to retrieve
+
+ request : CreateHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.hooks.secrets.create(
+ id="id",
+ request={"key": "value"},
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(id, request=request, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self,
+ id: str,
+ *,
+ request: DeleteHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Delete one or more existing secrets for a given hook. Accepts an array of secret names to delete.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook whose secrets to delete.
+
+ request : DeleteHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.hooks.secrets.delete(
+ id="id",
+ request=["string"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request=request, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ request: UpdateHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Update one or more existing secrets for an existing hook. Accepts an object of key-value pairs, where the key is the name of the existing secret.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook whose secrets to update.
+
+ request : UpdateHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.hooks.secrets.update(
+ id="id",
+ request={"key": "value"},
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(id, request=request, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/hooks/secrets/raw_client.py b/src/auth0/management/hooks/secrets/raw_client.py
new file mode 100644
index 00000000..329add68
--- /dev/null
+++ b/src/auth0/management/hooks/secrets/raw_client.py
@@ -0,0 +1,804 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.conflict_error import ConflictError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.create_hook_secret_request_content import CreateHookSecretRequestContent
+from ...types.delete_hook_secret_request_content import DeleteHookSecretRequestContent
+from ...types.get_hook_secret_response_content import GetHookSecretResponseContent
+from ...types.update_hook_secret_request_content import UpdateHookSecretRequestContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawSecretsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetHookSecretResponseContent]:
+ """
+ Retrieve a hook's secrets by the ID of the hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to retrieve secrets from.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetHookSecretResponseContent]
+ Hook secrets successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}/secrets",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetHookSecretResponseContent,
+ parse_obj_as(
+ type_=GetHookSecretResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ id: str,
+ *,
+ request: CreateHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Add one or more secrets to an existing hook. Accepts an object of key-value pairs, where the key is the name of the secret. A hook can have a maximum of 20 secrets.
+
+ Parameters
+ ----------
+ id : str
+ The id of the hook to retrieve
+
+ request : CreateHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}/secrets",
+ method="POST",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self,
+ id: str,
+ *,
+ request: DeleteHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Delete one or more existing secrets for a given hook. Accepts an array of secret names to delete.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook whose secrets to delete.
+
+ request : DeleteHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}/secrets",
+ method="DELETE",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ request: UpdateHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Update one or more existing secrets for an existing hook. Accepts an object of key-value pairs, where the key is the name of the existing secret.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook whose secrets to update.
+
+ request : UpdateHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}/secrets",
+ method="PATCH",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSecretsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetHookSecretResponseContent]:
+ """
+ Retrieve a hook's secrets by the ID of the hook.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook to retrieve secrets from.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetHookSecretResponseContent]
+ Hook secrets successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}/secrets",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetHookSecretResponseContent,
+ parse_obj_as(
+ type_=GetHookSecretResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ id: str,
+ *,
+ request: CreateHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Add one or more secrets to an existing hook. Accepts an object of key-value pairs, where the key is the name of the secret. A hook can have a maximum of 20 secrets.
+
+ Parameters
+ ----------
+ id : str
+ The id of the hook to retrieve
+
+ request : CreateHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}/secrets",
+ method="POST",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self,
+ id: str,
+ *,
+ request: DeleteHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete one or more existing secrets for a given hook. Accepts an array of secret names to delete.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook whose secrets to delete.
+
+ request : DeleteHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}/secrets",
+ method="DELETE",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ request: UpdateHookSecretRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Update one or more existing secrets for an existing hook. Accepts an object of key-value pairs, where the key is the name of the existing secret.
+
+ Parameters
+ ----------
+ id : str
+ ID of the hook whose secrets to update.
+
+ request : UpdateHookSecretRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"hooks/{jsonable_encoder(id)}/secrets",
+ method="PATCH",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/jobs/__init__.py b/src/auth0/management/jobs/__init__.py
new file mode 100644
index 00000000..0e33e75d
--- /dev/null
+++ b/src/auth0/management/jobs/__init__.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from .errors import ErrorsGetResponse
+ from . import errors, users_exports, users_imports, verification_email
+_dynamic_imports: typing.Dict[str, str] = {
+ "ErrorsGetResponse": ".errors",
+ "errors": ".errors",
+ "users_exports": ".users_exports",
+ "users_imports": ".users_imports",
+ "verification_email": ".verification_email",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["ErrorsGetResponse", "errors", "users_exports", "users_imports", "verification_email"]
diff --git a/src/auth0/management/jobs/client.py b/src/auth0/management/jobs/client.py
new file mode 100644
index 00000000..fd033c88
--- /dev/null
+++ b/src/auth0/management/jobs/client.py
@@ -0,0 +1,192 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.get_job_response_content import GetJobResponseContent
+from .raw_client import AsyncRawJobsClient, RawJobsClient
+
+if typing.TYPE_CHECKING:
+ from .errors.client import AsyncErrorsClient, ErrorsClient
+ from .users_exports.client import AsyncUsersExportsClient, UsersExportsClient
+ from .users_imports.client import AsyncUsersImportsClient, UsersImportsClient
+ from .verification_email.client import AsyncVerificationEmailClient, VerificationEmailClient
+
+
+class JobsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawJobsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._users_exports: typing.Optional[UsersExportsClient] = None
+ self._users_imports: typing.Optional[UsersImportsClient] = None
+ self._verification_email: typing.Optional[VerificationEmailClient] = None
+ self._errors: typing.Optional[ErrorsClient] = None
+
+ @property
+ def with_raw_response(self) -> RawJobsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawJobsClient
+ """
+ return self._raw_client
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetJobResponseContent:
+ """
+ Retrieves a job. Useful to check its status.
+
+ Parameters
+ ----------
+ id : str
+ ID of the job.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetJobResponseContent
+ Job retrieved successfully.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.jobs.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def users_exports(self):
+ if self._users_exports is None:
+ from .users_exports.client import UsersExportsClient # noqa: E402
+
+ self._users_exports = UsersExportsClient(client_wrapper=self._client_wrapper)
+ return self._users_exports
+
+ @property
+ def users_imports(self):
+ if self._users_imports is None:
+ from .users_imports.client import UsersImportsClient # noqa: E402
+
+ self._users_imports = UsersImportsClient(client_wrapper=self._client_wrapper)
+ return self._users_imports
+
+ @property
+ def verification_email(self):
+ if self._verification_email is None:
+ from .verification_email.client import VerificationEmailClient # noqa: E402
+
+ self._verification_email = VerificationEmailClient(client_wrapper=self._client_wrapper)
+ return self._verification_email
+
+ @property
+ def errors(self):
+ if self._errors is None:
+ from .errors.client import ErrorsClient # noqa: E402
+
+ self._errors = ErrorsClient(client_wrapper=self._client_wrapper)
+ return self._errors
+
+
+class AsyncJobsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawJobsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._users_exports: typing.Optional[AsyncUsersExportsClient] = None
+ self._users_imports: typing.Optional[AsyncUsersImportsClient] = None
+ self._verification_email: typing.Optional[AsyncVerificationEmailClient] = None
+ self._errors: typing.Optional[AsyncErrorsClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawJobsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawJobsClient
+ """
+ return self._raw_client
+
+ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetJobResponseContent:
+ """
+ Retrieves a job. Useful to check its status.
+
+ Parameters
+ ----------
+ id : str
+ ID of the job.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetJobResponseContent
+ Job retrieved successfully.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.jobs.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ @property
+ def users_exports(self):
+ if self._users_exports is None:
+ from .users_exports.client import AsyncUsersExportsClient # noqa: E402
+
+ self._users_exports = AsyncUsersExportsClient(client_wrapper=self._client_wrapper)
+ return self._users_exports
+
+ @property
+ def users_imports(self):
+ if self._users_imports is None:
+ from .users_imports.client import AsyncUsersImportsClient # noqa: E402
+
+ self._users_imports = AsyncUsersImportsClient(client_wrapper=self._client_wrapper)
+ return self._users_imports
+
+ @property
+ def verification_email(self):
+ if self._verification_email is None:
+ from .verification_email.client import AsyncVerificationEmailClient # noqa: E402
+
+ self._verification_email = AsyncVerificationEmailClient(client_wrapper=self._client_wrapper)
+ return self._verification_email
+
+ @property
+ def errors(self):
+ if self._errors is None:
+ from .errors.client import AsyncErrorsClient # noqa: E402
+
+ self._errors = AsyncErrorsClient(client_wrapper=self._client_wrapper)
+ return self._errors
diff --git a/src/auth0/management/jobs/errors/__init__.py b/src/auth0/management/jobs/errors/__init__.py
new file mode 100644
index 00000000..56245657
--- /dev/null
+++ b/src/auth0/management/jobs/errors/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from .types import ErrorsGetResponse
+_dynamic_imports: typing.Dict[str, str] = {"ErrorsGetResponse": ".types"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["ErrorsGetResponse"]
diff --git a/src/auth0/management/jobs/errors/client.py b/src/auth0/management/jobs/errors/client.py
new file mode 100644
index 00000000..7ca7ad67
--- /dev/null
+++ b/src/auth0/management/jobs/errors/client.py
@@ -0,0 +1,110 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from .raw_client import AsyncRawErrorsClient, RawErrorsClient
+from .types.errors_get_response import ErrorsGetResponse
+
+
+class ErrorsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawErrorsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawErrorsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawErrorsClient
+ """
+ return self._raw_client
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> ErrorsGetResponse:
+ """
+ Retrieve error details of a failed job.
+
+ Parameters
+ ----------
+ id : str
+ ID of the job.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ErrorsGetResponse
+ Job successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.jobs.errors.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncErrorsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawErrorsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawErrorsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawErrorsClient
+ """
+ return self._raw_client
+
+ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> ErrorsGetResponse:
+ """
+ Retrieve error details of a failed job.
+
+ Parameters
+ ----------
+ id : str
+ ID of the job.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ErrorsGetResponse
+ Job successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.jobs.errors.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/jobs/errors/raw_client.py b/src/auth0/management/jobs/errors/raw_client.py
new file mode 100644
index 00000000..0e6b4a1e
--- /dev/null
+++ b/src/auth0/management/jobs/errors/raw_client.py
@@ -0,0 +1,215 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from .types.errors_get_response import ErrorsGetResponse
+
+
+class RawErrorsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[ErrorsGetResponse]:
+ """
+ Retrieve error details of a failed job.
+
+ Parameters
+ ----------
+ id : str
+ ID of the job.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ErrorsGetResponse]
+ Job successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"jobs/{jsonable_encoder(id)}/errors",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ErrorsGetResponse,
+ parse_obj_as(
+ type_=ErrorsGetResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawErrorsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[ErrorsGetResponse]:
+ """
+ Retrieve error details of a failed job.
+
+ Parameters
+ ----------
+ id : str
+ ID of the job.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ErrorsGetResponse]
+ Job successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"jobs/{jsonable_encoder(id)}/errors",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ErrorsGetResponse,
+ parse_obj_as(
+ type_=ErrorsGetResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/jobs/errors/types/__init__.py b/src/auth0/management/jobs/errors/types/__init__.py
new file mode 100644
index 00000000..b9689eec
--- /dev/null
+++ b/src/auth0/management/jobs/errors/types/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from .errors_get_response import ErrorsGetResponse
+_dynamic_imports: typing.Dict[str, str] = {"ErrorsGetResponse": ".errors_get_response"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["ErrorsGetResponse"]
diff --git a/src/auth0/management/jobs/errors/types/errors_get_response.py b/src/auth0/management/jobs/errors/types/errors_get_response.py
new file mode 100644
index 00000000..37e603f7
--- /dev/null
+++ b/src/auth0/management/jobs/errors/types/errors_get_response.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ....types.get_job_error_response_content import GetJobErrorResponseContent
+from ....types.get_job_generic_error_response_content import GetJobGenericErrorResponseContent
+
+ErrorsGetResponse = typing.Union[typing.List[GetJobErrorResponseContent], GetJobGenericErrorResponseContent]
diff --git a/src/auth0/management/jobs/raw_client.py b/src/auth0/management/jobs/raw_client.py
new file mode 100644
index 00000000..31cd0e93
--- /dev/null
+++ b/src/auth0/management/jobs/raw_client.py
@@ -0,0 +1,215 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.get_job_response_content import GetJobResponseContent
+
+
+class RawJobsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetJobResponseContent]:
+ """
+ Retrieves a job. Useful to check its status.
+
+ Parameters
+ ----------
+ id : str
+ ID of the job.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetJobResponseContent]
+ Job retrieved successfully.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"jobs/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetJobResponseContent,
+ parse_obj_as(
+ type_=GetJobResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawJobsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetJobResponseContent]:
+ """
+ Retrieves a job. Useful to check its status.
+
+ Parameters
+ ----------
+ id : str
+ ID of the job.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetJobResponseContent]
+ Job retrieved successfully.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"jobs/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetJobResponseContent,
+ parse_obj_as(
+ type_=GetJobResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/jobs/users_exports/__init__.py b/src/auth0/management/jobs/users_exports/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/jobs/users_exports/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/jobs/users_exports/client.py b/src/auth0/management/jobs/users_exports/client.py
new file mode 100644
index 00000000..9422fba4
--- /dev/null
+++ b/src/auth0/management/jobs/users_exports/client.py
@@ -0,0 +1,147 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.create_export_users_fields import CreateExportUsersFields
+from ...types.create_export_users_response_content import CreateExportUsersResponseContent
+from ...types.job_file_format_enum import JobFileFormatEnum
+from .raw_client import AsyncRawUsersExportsClient, RawUsersExportsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class UsersExportsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawUsersExportsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawUsersExportsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawUsersExportsClient
+ """
+ return self._raw_client
+
+ def create(
+ self,
+ *,
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ format: typing.Optional[JobFileFormatEnum] = OMIT,
+ limit: typing.Optional[int] = 5,
+ fields: typing.Optional[typing.Sequence[CreateExportUsersFields]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateExportUsersResponseContent:
+ """
+ Export all users to a file via a long-running job.
+
+ Parameters
+ ----------
+ connection_id : typing.Optional[str]
+ connection_id of the connection from which users will be exported.
+
+ format : typing.Optional[JobFileFormatEnum]
+
+ limit : typing.Optional[int]
+ Limit the number of records.
+
+ fields : typing.Optional[typing.Sequence[CreateExportUsersFields]]
+ List of fields to be included in the CSV. Defaults to a predefined set of fields.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateExportUsersResponseContent
+ Job created successfully.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.jobs.users_exports.create()
+ """
+ _response = self._raw_client.create(
+ connection_id=connection_id, format=format, limit=limit, fields=fields, request_options=request_options
+ )
+ return _response.data
+
+
+class AsyncUsersExportsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawUsersExportsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawUsersExportsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawUsersExportsClient
+ """
+ return self._raw_client
+
+ async def create(
+ self,
+ *,
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ format: typing.Optional[JobFileFormatEnum] = OMIT,
+ limit: typing.Optional[int] = 5,
+ fields: typing.Optional[typing.Sequence[CreateExportUsersFields]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateExportUsersResponseContent:
+ """
+ Export all users to a file via a long-running job.
+
+ Parameters
+ ----------
+ connection_id : typing.Optional[str]
+ connection_id of the connection from which users will be exported.
+
+ format : typing.Optional[JobFileFormatEnum]
+
+ limit : typing.Optional[int]
+ Limit the number of records.
+
+ fields : typing.Optional[typing.Sequence[CreateExportUsersFields]]
+ List of fields to be included in the CSV. Defaults to a predefined set of fields.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateExportUsersResponseContent
+ Job created successfully.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.jobs.users_exports.create()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ connection_id=connection_id, format=format, limit=limit, fields=fields, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/jobs/users_exports/raw_client.py b/src/auth0/management/jobs/users_exports/raw_client.py
new file mode 100644
index 00000000..76a1d195
--- /dev/null
+++ b/src/auth0/management/jobs/users_exports/raw_client.py
@@ -0,0 +1,249 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.create_export_users_fields import CreateExportUsersFields
+from ...types.create_export_users_response_content import CreateExportUsersResponseContent
+from ...types.job_file_format_enum import JobFileFormatEnum
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawUsersExportsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def create(
+ self,
+ *,
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ format: typing.Optional[JobFileFormatEnum] = OMIT,
+ limit: typing.Optional[int] = 5,
+ fields: typing.Optional[typing.Sequence[CreateExportUsersFields]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateExportUsersResponseContent]:
+ """
+ Export all users to a file via a long-running job.
+
+ Parameters
+ ----------
+ connection_id : typing.Optional[str]
+ connection_id of the connection from which users will be exported.
+
+ format : typing.Optional[JobFileFormatEnum]
+
+ limit : typing.Optional[int]
+ Limit the number of records.
+
+ fields : typing.Optional[typing.Sequence[CreateExportUsersFields]]
+ List of fields to be included in the CSV. Defaults to a predefined set of fields.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateExportUsersResponseContent]
+ Job created successfully.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "jobs/users-exports",
+ method="POST",
+ json={
+ "connection_id": connection_id,
+ "format": format,
+ "limit": limit,
+ "fields": convert_and_respect_annotation_metadata(
+ object_=fields, annotation=typing.Sequence[CreateExportUsersFields], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateExportUsersResponseContent,
+ parse_obj_as(
+ type_=CreateExportUsersResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawUsersExportsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def create(
+ self,
+ *,
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ format: typing.Optional[JobFileFormatEnum] = OMIT,
+ limit: typing.Optional[int] = 5,
+ fields: typing.Optional[typing.Sequence[CreateExportUsersFields]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateExportUsersResponseContent]:
+ """
+ Export all users to a file via a long-running job.
+
+ Parameters
+ ----------
+ connection_id : typing.Optional[str]
+ connection_id of the connection from which users will be exported.
+
+ format : typing.Optional[JobFileFormatEnum]
+
+ limit : typing.Optional[int]
+ Limit the number of records.
+
+ fields : typing.Optional[typing.Sequence[CreateExportUsersFields]]
+ List of fields to be included in the CSV. Defaults to a predefined set of fields.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateExportUsersResponseContent]
+ Job created successfully.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "jobs/users-exports",
+ method="POST",
+ json={
+ "connection_id": connection_id,
+ "format": format,
+ "limit": limit,
+ "fields": convert_and_respect_annotation_metadata(
+ object_=fields, annotation=typing.Sequence[CreateExportUsersFields], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateExportUsersResponseContent,
+ parse_obj_as(
+ type_=CreateExportUsersResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/jobs/users_imports/__init__.py b/src/auth0/management/jobs/users_imports/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/jobs/users_imports/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/jobs/users_imports/client.py b/src/auth0/management/jobs/users_imports/client.py
new file mode 100644
index 00000000..7decdc49
--- /dev/null
+++ b/src/auth0/management/jobs/users_imports/client.py
@@ -0,0 +1,170 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ... import core
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.create_import_users_response_content import CreateImportUsersResponseContent
+from .raw_client import AsyncRawUsersImportsClient, RawUsersImportsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class UsersImportsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawUsersImportsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawUsersImportsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawUsersImportsClient
+ """
+ return self._raw_client
+
+ def create(
+ self,
+ *,
+ users: core.File,
+ connection_id: str,
+ upsert: typing.Optional[bool] = OMIT,
+ external_id: typing.Optional[str] = OMIT,
+ send_completion_email: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateImportUsersResponseContent:
+ """
+ Import users from a formatted file into a connection via a long-running job. When importing users, with or without upsert, the `email_verified` is set to `false` when the email address is added or updated. Users must verify their email address. To avoid this behavior, set `email_verified` to `true` in the imported data.
+
+ Parameters
+ ----------
+ users : core.File
+ See core.File for more documentation
+
+ connection_id : str
+ connection_id of the connection to which users will be imported.
+
+ upsert : typing.Optional[bool]
+ Whether to update users if they already exist (true) or to ignore them (false).
+
+ external_id : typing.Optional[str]
+ Customer-defined ID.
+
+ send_completion_email : typing.Optional[bool]
+ Whether to send a completion email to all tenant owners when the job is finished (true) or not (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateImportUsersResponseContent
+ Job successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.jobs.users_imports.create(
+ connection_id="connection_id",
+ )
+ """
+ _response = self._raw_client.create(
+ users=users,
+ connection_id=connection_id,
+ upsert=upsert,
+ external_id=external_id,
+ send_completion_email=send_completion_email,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncUsersImportsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawUsersImportsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawUsersImportsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawUsersImportsClient
+ """
+ return self._raw_client
+
+ async def create(
+ self,
+ *,
+ users: core.File,
+ connection_id: str,
+ upsert: typing.Optional[bool] = OMIT,
+ external_id: typing.Optional[str] = OMIT,
+ send_completion_email: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateImportUsersResponseContent:
+ """
+ Import users from a formatted file into a connection via a long-running job. When importing users, with or without upsert, the `email_verified` is set to `false` when the email address is added or updated. Users must verify their email address. To avoid this behavior, set `email_verified` to `true` in the imported data.
+
+ Parameters
+ ----------
+ users : core.File
+ See core.File for more documentation
+
+ connection_id : str
+ connection_id of the connection to which users will be imported.
+
+ upsert : typing.Optional[bool]
+ Whether to update users if they already exist (true) or to ignore them (false).
+
+ external_id : typing.Optional[str]
+ Customer-defined ID.
+
+ send_completion_email : typing.Optional[bool]
+ Whether to send a completion email to all tenant owners when the job is finished (true) or not (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateImportUsersResponseContent
+ Job successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.jobs.users_imports.create(
+ connection_id="connection_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ users=users,
+ connection_id=connection_id,
+ upsert=upsert,
+ external_id=external_id,
+ send_completion_email=send_completion_email,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/jobs/users_imports/raw_client.py b/src/auth0/management/jobs/users_imports/raw_client.py
new file mode 100644
index 00000000..ee1abd3c
--- /dev/null
+++ b/src/auth0/management/jobs/users_imports/raw_client.py
@@ -0,0 +1,301 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ... import core
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.content_too_large_error import ContentTooLargeError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.internal_server_error import InternalServerError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.create_import_users_response_content import CreateImportUsersResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawUsersImportsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def create(
+ self,
+ *,
+ users: core.File,
+ connection_id: str,
+ upsert: typing.Optional[bool] = OMIT,
+ external_id: typing.Optional[str] = OMIT,
+ send_completion_email: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateImportUsersResponseContent]:
+ """
+ Import users from a formatted file into a connection via a long-running job. When importing users, with or without upsert, the `email_verified` is set to `false` when the email address is added or updated. Users must verify their email address. To avoid this behavior, set `email_verified` to `true` in the imported data.
+
+ Parameters
+ ----------
+ users : core.File
+ See core.File for more documentation
+
+ connection_id : str
+ connection_id of the connection to which users will be imported.
+
+ upsert : typing.Optional[bool]
+ Whether to update users if they already exist (true) or to ignore them (false).
+
+ external_id : typing.Optional[str]
+ Customer-defined ID.
+
+ send_completion_email : typing.Optional[bool]
+ Whether to send a completion email to all tenant owners when the job is finished (true) or not (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateImportUsersResponseContent]
+ Job successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "jobs/users-imports",
+ method="POST",
+ data={
+ "connection_id": connection_id,
+ "upsert": upsert,
+ "external_id": external_id,
+ "send_completion_email": send_completion_email,
+ },
+ files={
+ "users": users,
+ },
+ request_options=request_options,
+ omit=OMIT,
+ force_multipart=True,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateImportUsersResponseContent,
+ parse_obj_as(
+ type_=CreateImportUsersResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 413:
+ raise ContentTooLargeError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawUsersImportsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def create(
+ self,
+ *,
+ users: core.File,
+ connection_id: str,
+ upsert: typing.Optional[bool] = OMIT,
+ external_id: typing.Optional[str] = OMIT,
+ send_completion_email: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateImportUsersResponseContent]:
+ """
+ Import users from a formatted file into a connection via a long-running job. When importing users, with or without upsert, the `email_verified` is set to `false` when the email address is added or updated. Users must verify their email address. To avoid this behavior, set `email_verified` to `true` in the imported data.
+
+ Parameters
+ ----------
+ users : core.File
+ See core.File for more documentation
+
+ connection_id : str
+ connection_id of the connection to which users will be imported.
+
+ upsert : typing.Optional[bool]
+ Whether to update users if they already exist (true) or to ignore them (false).
+
+ external_id : typing.Optional[str]
+ Customer-defined ID.
+
+ send_completion_email : typing.Optional[bool]
+ Whether to send a completion email to all tenant owners when the job is finished (true) or not (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateImportUsersResponseContent]
+ Job successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "jobs/users-imports",
+ method="POST",
+ data={
+ "connection_id": connection_id,
+ "upsert": upsert,
+ "external_id": external_id,
+ "send_completion_email": send_completion_email,
+ },
+ files={
+ "users": users,
+ },
+ request_options=request_options,
+ omit=OMIT,
+ force_multipart=True,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateImportUsersResponseContent,
+ parse_obj_as(
+ type_=CreateImportUsersResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 413:
+ raise ContentTooLargeError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/jobs/verification_email/__init__.py b/src/auth0/management/jobs/verification_email/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/jobs/verification_email/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/jobs/verification_email/client.py b/src/auth0/management/jobs/verification_email/client.py
new file mode 100644
index 00000000..2006db4c
--- /dev/null
+++ b/src/auth0/management/jobs/verification_email/client.py
@@ -0,0 +1,162 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.create_verification_email_response_content import CreateVerificationEmailResponseContent
+from ...types.identity import Identity
+from .raw_client import AsyncRawVerificationEmailClient, RawVerificationEmailClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class VerificationEmailClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawVerificationEmailClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawVerificationEmailClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawVerificationEmailClient
+ """
+ return self._raw_client
+
+ def create(
+ self,
+ *,
+ user_id: str = "google-oauth2|1234",
+ client_id: typing.Optional[str] = OMIT,
+ identity: typing.Optional[Identity] = OMIT,
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateVerificationEmailResponseContent:
+ """
+ Send an email to the specified user that asks them to click a link to verify their email address.
+
+ Note: You must have the `Status` toggle enabled for the verification email template for the email to be sent.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of the user to send the verification email to.
+
+ client_id : typing.Optional[str]
+ client_id of the client (application). If no value provided, the global Client ID will be used.
+
+ identity : typing.Optional[Identity]
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateVerificationEmailResponseContent
+ Job successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.jobs.verification_email.create(
+ user_id="user_id",
+ )
+ """
+ _response = self._raw_client.create(
+ user_id=user_id,
+ client_id=client_id,
+ identity=identity,
+ organization_id=organization_id,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncVerificationEmailClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawVerificationEmailClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawVerificationEmailClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawVerificationEmailClient
+ """
+ return self._raw_client
+
+ async def create(
+ self,
+ *,
+ user_id: str = "google-oauth2|1234",
+ client_id: typing.Optional[str] = OMIT,
+ identity: typing.Optional[Identity] = OMIT,
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateVerificationEmailResponseContent:
+ """
+ Send an email to the specified user that asks them to click a link to verify their email address.
+
+ Note: You must have the `Status` toggle enabled for the verification email template for the email to be sent.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of the user to send the verification email to.
+
+ client_id : typing.Optional[str]
+ client_id of the client (application). If no value provided, the global Client ID will be used.
+
+ identity : typing.Optional[Identity]
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateVerificationEmailResponseContent
+ Job successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.jobs.verification_email.create(
+ user_id="user_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ user_id=user_id,
+ client_id=client_id,
+ identity=identity,
+ organization_id=organization_id,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/jobs/verification_email/raw_client.py b/src/auth0/management/jobs/verification_email/raw_client.py
new file mode 100644
index 00000000..b4626abd
--- /dev/null
+++ b/src/auth0/management/jobs/verification_email/raw_client.py
@@ -0,0 +1,252 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.create_verification_email_response_content import CreateVerificationEmailResponseContent
+from ...types.identity import Identity
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawVerificationEmailClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def create(
+ self,
+ *,
+ user_id: str = "google-oauth2|1234",
+ client_id: typing.Optional[str] = OMIT,
+ identity: typing.Optional[Identity] = OMIT,
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateVerificationEmailResponseContent]:
+ """
+ Send an email to the specified user that asks them to click a link to verify their email address.
+
+ Note: You must have the `Status` toggle enabled for the verification email template for the email to be sent.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of the user to send the verification email to.
+
+ client_id : typing.Optional[str]
+ client_id of the client (application). If no value provided, the global Client ID will be used.
+
+ identity : typing.Optional[Identity]
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateVerificationEmailResponseContent]
+ Job successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "jobs/verification-email",
+ method="POST",
+ json={
+ "user_id": user_id,
+ "client_id": client_id,
+ "identity": convert_and_respect_annotation_metadata(
+ object_=identity, annotation=Identity, direction="write"
+ ),
+ "organization_id": organization_id,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateVerificationEmailResponseContent,
+ parse_obj_as(
+ type_=CreateVerificationEmailResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawVerificationEmailClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def create(
+ self,
+ *,
+ user_id: str = "google-oauth2|1234",
+ client_id: typing.Optional[str] = OMIT,
+ identity: typing.Optional[Identity] = OMIT,
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateVerificationEmailResponseContent]:
+ """
+ Send an email to the specified user that asks them to click a link to verify their email address.
+
+ Note: You must have the `Status` toggle enabled for the verification email template for the email to be sent.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of the user to send the verification email to.
+
+ client_id : typing.Optional[str]
+ client_id of the client (application). If no value provided, the global Client ID will be used.
+
+ identity : typing.Optional[Identity]
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateVerificationEmailResponseContent]
+ Job successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "jobs/verification-email",
+ method="POST",
+ json={
+ "user_id": user_id,
+ "client_id": client_id,
+ "identity": convert_and_respect_annotation_metadata(
+ object_=identity, annotation=Identity, direction="write"
+ ),
+ "organization_id": organization_id,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateVerificationEmailResponseContent,
+ parse_obj_as(
+ type_=CreateVerificationEmailResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/keys/__init__.py b/src/auth0/management/keys/__init__.py
new file mode 100644
index 00000000..62c766c4
--- /dev/null
+++ b/src/auth0/management/keys/__init__.py
@@ -0,0 +1,38 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import custom_signing, encryption, signing
+_dynamic_imports: typing.Dict[str, str] = {
+ "custom_signing": ".custom_signing",
+ "encryption": ".encryption",
+ "signing": ".signing",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["custom_signing", "encryption", "signing"]
diff --git a/src/auth0/management/keys/client.py b/src/auth0/management/keys/client.py
new file mode 100644
index 00000000..ca47c4b3
--- /dev/null
+++ b/src/auth0/management/keys/client.py
@@ -0,0 +1,101 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .raw_client import AsyncRawKeysClient, RawKeysClient
+
+if typing.TYPE_CHECKING:
+ from .custom_signing.client import AsyncCustomSigningClient, CustomSigningClient
+ from .encryption.client import AsyncEncryptionClient, EncryptionClient
+ from .signing.client import AsyncSigningClient, SigningClient
+
+
+class KeysClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawKeysClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._custom_signing: typing.Optional[CustomSigningClient] = None
+ self._encryption: typing.Optional[EncryptionClient] = None
+ self._signing: typing.Optional[SigningClient] = None
+
+ @property
+ def with_raw_response(self) -> RawKeysClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawKeysClient
+ """
+ return self._raw_client
+
+ @property
+ def custom_signing(self):
+ if self._custom_signing is None:
+ from .custom_signing.client import CustomSigningClient # noqa: E402
+
+ self._custom_signing = CustomSigningClient(client_wrapper=self._client_wrapper)
+ return self._custom_signing
+
+ @property
+ def encryption(self):
+ if self._encryption is None:
+ from .encryption.client import EncryptionClient # noqa: E402
+
+ self._encryption = EncryptionClient(client_wrapper=self._client_wrapper)
+ return self._encryption
+
+ @property
+ def signing(self):
+ if self._signing is None:
+ from .signing.client import SigningClient # noqa: E402
+
+ self._signing = SigningClient(client_wrapper=self._client_wrapper)
+ return self._signing
+
+
+class AsyncKeysClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawKeysClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._custom_signing: typing.Optional[AsyncCustomSigningClient] = None
+ self._encryption: typing.Optional[AsyncEncryptionClient] = None
+ self._signing: typing.Optional[AsyncSigningClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawKeysClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawKeysClient
+ """
+ return self._raw_client
+
+ @property
+ def custom_signing(self):
+ if self._custom_signing is None:
+ from .custom_signing.client import AsyncCustomSigningClient # noqa: E402
+
+ self._custom_signing = AsyncCustomSigningClient(client_wrapper=self._client_wrapper)
+ return self._custom_signing
+
+ @property
+ def encryption(self):
+ if self._encryption is None:
+ from .encryption.client import AsyncEncryptionClient # noqa: E402
+
+ self._encryption = AsyncEncryptionClient(client_wrapper=self._client_wrapper)
+ return self._encryption
+
+ @property
+ def signing(self):
+ if self._signing is None:
+ from .signing.client import AsyncSigningClient # noqa: E402
+
+ self._signing = AsyncSigningClient(client_wrapper=self._client_wrapper)
+ return self._signing
diff --git a/src/auth0/management/keys/custom_signing/__init__.py b/src/auth0/management/keys/custom_signing/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/keys/custom_signing/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/keys/custom_signing/client.py b/src/auth0/management/keys/custom_signing/client.py
new file mode 100644
index 00000000..478de550
--- /dev/null
+++ b/src/auth0/management/keys/custom_signing/client.py
@@ -0,0 +1,247 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.custom_signing_key_jwk import CustomSigningKeyJwk
+from ...types.get_custom_signing_keys_response_content import GetCustomSigningKeysResponseContent
+from ...types.set_custom_signing_keys_response_content import SetCustomSigningKeysResponseContent
+from .raw_client import AsyncRawCustomSigningClient, RawCustomSigningClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class CustomSigningClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawCustomSigningClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawCustomSigningClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawCustomSigningClient
+ """
+ return self._raw_client
+
+ def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> GetCustomSigningKeysResponseContent:
+ """
+ Get entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCustomSigningKeysResponseContent
+ Custom signing keys were successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.custom_signing.get()
+ """
+ _response = self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ def set(
+ self, *, keys: typing.Sequence[CustomSigningKeyJwk], request_options: typing.Optional[RequestOptions] = None
+ ) -> SetCustomSigningKeysResponseContent:
+ """
+ Create or replace entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ keys : typing.Sequence[CustomSigningKeyJwk]
+ An array of custom public signing keys.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetCustomSigningKeysResponseContent
+ Custom signing keys were successfully created or replaced.
+
+ Examples
+ --------
+ from auth0 import Auth0, CustomSigningKeyJwk
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.custom_signing.set(
+ keys=[
+ CustomSigningKeyJwk(
+ kty="EC",
+ )
+ ],
+ )
+ """
+ _response = self._raw_client.set(keys=keys, request_options=request_options)
+ return _response.data
+
+ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.custom_signing.delete()
+ """
+ _response = self._raw_client.delete(request_options=request_options)
+ return _response.data
+
+
+class AsyncCustomSigningClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawCustomSigningClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawCustomSigningClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawCustomSigningClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetCustomSigningKeysResponseContent:
+ """
+ Get entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCustomSigningKeysResponseContent
+ Custom signing keys were successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.custom_signing.get()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ async def set(
+ self, *, keys: typing.Sequence[CustomSigningKeyJwk], request_options: typing.Optional[RequestOptions] = None
+ ) -> SetCustomSigningKeysResponseContent:
+ """
+ Create or replace entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ keys : typing.Sequence[CustomSigningKeyJwk]
+ An array of custom public signing keys.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetCustomSigningKeysResponseContent
+ Custom signing keys were successfully created or replaced.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, CustomSigningKeyJwk
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.custom_signing.set(
+ keys=[
+ CustomSigningKeyJwk(
+ kty="EC",
+ )
+ ],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.set(keys=keys, request_options=request_options)
+ return _response.data
+
+ async def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.custom_signing.delete()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/keys/custom_signing/raw_client.py b/src/auth0/management/keys/custom_signing/raw_client.py
new file mode 100644
index 00000000..5fba4601
--- /dev/null
+++ b/src/auth0/management/keys/custom_signing/raw_client.py
@@ -0,0 +1,494 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.custom_signing_key_jwk import CustomSigningKeyJwk
+from ...types.get_custom_signing_keys_response_content import GetCustomSigningKeysResponseContent
+from ...types.set_custom_signing_keys_response_content import SetCustomSigningKeysResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawCustomSigningClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetCustomSigningKeysResponseContent]:
+ """
+ Get entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetCustomSigningKeysResponseContent]
+ Custom signing keys were successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "keys/custom-signing",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCustomSigningKeysResponseContent,
+ parse_obj_as(
+ type_=GetCustomSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def set(
+ self, *, keys: typing.Sequence[CustomSigningKeyJwk], request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[SetCustomSigningKeysResponseContent]:
+ """
+ Create or replace entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ keys : typing.Sequence[CustomSigningKeyJwk]
+ An array of custom public signing keys.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[SetCustomSigningKeysResponseContent]
+ Custom signing keys were successfully created or replaced.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "keys/custom-signing",
+ method="PUT",
+ json={
+ "keys": convert_and_respect_annotation_metadata(
+ object_=keys, annotation=typing.Sequence[CustomSigningKeyJwk], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetCustomSigningKeysResponseContent,
+ parse_obj_as(
+ type_=SetCustomSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "keys/custom-signing",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawCustomSigningClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetCustomSigningKeysResponseContent]:
+ """
+ Get entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetCustomSigningKeysResponseContent]
+ Custom signing keys were successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "keys/custom-signing",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCustomSigningKeysResponseContent,
+ parse_obj_as(
+ type_=GetCustomSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def set(
+ self, *, keys: typing.Sequence[CustomSigningKeyJwk], request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[SetCustomSigningKeysResponseContent]:
+ """
+ Create or replace entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ keys : typing.Sequence[CustomSigningKeyJwk]
+ An array of custom public signing keys.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[SetCustomSigningKeysResponseContent]
+ Custom signing keys were successfully created or replaced.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "keys/custom-signing",
+ method="PUT",
+ json={
+ "keys": convert_and_respect_annotation_metadata(
+ object_=keys, annotation=typing.Sequence[CustomSigningKeyJwk], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetCustomSigningKeysResponseContent,
+ parse_obj_as(
+ type_=SetCustomSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[None]:
+ """
+ Delete entire jwks representation of custom signing keys.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "keys/custom-signing",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/keys/encryption/__init__.py b/src/auth0/management/keys/encryption/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/keys/encryption/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/keys/encryption/client.py b/src/auth0/management/keys/encryption/client.py
new file mode 100644
index 00000000..318f8c9b
--- /dev/null
+++ b/src/auth0/management/keys/encryption/client.py
@@ -0,0 +1,595 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.create_encryption_key_public_wrapping_response_content import (
+ CreateEncryptionKeyPublicWrappingResponseContent,
+)
+from ...types.create_encryption_key_response_content import CreateEncryptionKeyResponseContent
+from ...types.create_encryption_key_type import CreateEncryptionKeyType
+from ...types.encryption_key import EncryptionKey
+from ...types.get_encryption_key_response_content import GetEncryptionKeyResponseContent
+from ...types.import_encryption_key_response_content import ImportEncryptionKeyResponseContent
+from ...types.list_encryption_key_offset_paginated_response_content import (
+ ListEncryptionKeyOffsetPaginatedResponseContent,
+)
+from .raw_client import AsyncRawEncryptionClient, RawEncryptionClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class EncryptionClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawEncryptionClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawEncryptionClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawEncryptionClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[EncryptionKey, ListEncryptionKeyOffsetPaginatedResponseContent]:
+ """
+ Retrieve details of all the encryption keys associated with your tenant.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Default value is 50, maximum value is 100.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[EncryptionKey, ListEncryptionKeyOffsetPaginatedResponseContent]
+ The keys were successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.keys.encryption.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ def create(
+ self, *, type: CreateEncryptionKeyType, request_options: typing.Optional[RequestOptions] = None
+ ) -> CreateEncryptionKeyResponseContent:
+ """
+ Create the new, pre-activated encryption key, without the key material.
+
+ Parameters
+ ----------
+ type : CreateEncryptionKeyType
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateEncryptionKeyResponseContent
+ The key was successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.encryption.create(
+ type="customer-provided-root-key",
+ )
+ """
+ _response = self._raw_client.create(type=type, request_options=request_options)
+ return _response.data
+
+ def rekey(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Perform rekeying operation on the key hierarchy.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.encryption.rekey()
+ """
+ _response = self._raw_client.rekey(request_options=request_options)
+ return _response.data
+
+ def get(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetEncryptionKeyResponseContent:
+ """
+ Retrieve details of the encryption key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetEncryptionKeyResponseContent
+ The key was successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.encryption.get(
+ kid="kid",
+ )
+ """
+ _response = self._raw_client.get(kid, request_options=request_options)
+ return _response.data
+
+ def import_(
+ self, kid: str, *, wrapped_key: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> ImportEncryptionKeyResponseContent:
+ """
+ Import wrapped key material and activate encryption key.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ wrapped_key : str
+ Base64 encoded ciphertext of key material wrapped by public wrapping key.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ImportEncryptionKeyResponseContent
+ The key was successfully imported.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.encryption.import_(
+ kid="kid",
+ wrapped_key="wrapped_key",
+ )
+ """
+ _response = self._raw_client.import_(kid, wrapped_key=wrapped_key, request_options=request_options)
+ return _response.data
+
+ def delete(self, kid: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete the custom provided encryption key with the given ID and move back to using native encryption key.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.encryption.delete(
+ kid="kid",
+ )
+ """
+ _response = self._raw_client.delete(kid, request_options=request_options)
+ return _response.data
+
+ def create_public_wrapping_key(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> CreateEncryptionKeyPublicWrappingResponseContent:
+ """
+ Create the public wrapping key to wrap your own encryption key material.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateEncryptionKeyPublicWrappingResponseContent
+ The public wrapping key was successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.encryption.create_public_wrapping_key(
+ kid="kid",
+ )
+ """
+ _response = self._raw_client.create_public_wrapping_key(kid, request_options=request_options)
+ return _response.data
+
+
+class AsyncEncryptionClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawEncryptionClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawEncryptionClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawEncryptionClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[EncryptionKey, ListEncryptionKeyOffsetPaginatedResponseContent]:
+ """
+ Retrieve details of all the encryption keys associated with your tenant.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Default value is 50, maximum value is 100.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[EncryptionKey, ListEncryptionKeyOffsetPaginatedResponseContent]
+ The keys were successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.keys.encryption.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ async def create(
+ self, *, type: CreateEncryptionKeyType, request_options: typing.Optional[RequestOptions] = None
+ ) -> CreateEncryptionKeyResponseContent:
+ """
+ Create the new, pre-activated encryption key, without the key material.
+
+ Parameters
+ ----------
+ type : CreateEncryptionKeyType
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateEncryptionKeyResponseContent
+ The key was successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.encryption.create(
+ type="customer-provided-root-key",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(type=type, request_options=request_options)
+ return _response.data
+
+ async def rekey(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Perform rekeying operation on the key hierarchy.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.encryption.rekey()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.rekey(request_options=request_options)
+ return _response.data
+
+ async def get(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetEncryptionKeyResponseContent:
+ """
+ Retrieve details of the encryption key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetEncryptionKeyResponseContent
+ The key was successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.encryption.get(
+ kid="kid",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(kid, request_options=request_options)
+ return _response.data
+
+ async def import_(
+ self, kid: str, *, wrapped_key: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> ImportEncryptionKeyResponseContent:
+ """
+ Import wrapped key material and activate encryption key.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ wrapped_key : str
+ Base64 encoded ciphertext of key material wrapped by public wrapping key.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ImportEncryptionKeyResponseContent
+ The key was successfully imported.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.encryption.import_(
+ kid="kid",
+ wrapped_key="wrapped_key",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.import_(kid, wrapped_key=wrapped_key, request_options=request_options)
+ return _response.data
+
+ async def delete(self, kid: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete the custom provided encryption key with the given ID and move back to using native encryption key.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.encryption.delete(
+ kid="kid",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(kid, request_options=request_options)
+ return _response.data
+
+ async def create_public_wrapping_key(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> CreateEncryptionKeyPublicWrappingResponseContent:
+ """
+ Create the public wrapping key to wrap your own encryption key material.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateEncryptionKeyPublicWrappingResponseContent
+ The public wrapping key was successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.encryption.create_public_wrapping_key(
+ kid="kid",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create_public_wrapping_key(kid, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/keys/encryption/raw_client.py b/src/auth0/management/keys/encryption/raw_client.py
new file mode 100644
index 00000000..a2d3c957
--- /dev/null
+++ b/src/auth0/management/keys/encryption/raw_client.py
@@ -0,0 +1,1313 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.conflict_error import ConflictError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.create_encryption_key_public_wrapping_response_content import (
+ CreateEncryptionKeyPublicWrappingResponseContent,
+)
+from ...types.create_encryption_key_response_content import CreateEncryptionKeyResponseContent
+from ...types.create_encryption_key_type import CreateEncryptionKeyType
+from ...types.encryption_key import EncryptionKey
+from ...types.get_encryption_key_response_content import GetEncryptionKeyResponseContent
+from ...types.import_encryption_key_response_content import ImportEncryptionKeyResponseContent
+from ...types.list_encryption_key_offset_paginated_response_content import (
+ ListEncryptionKeyOffsetPaginatedResponseContent,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawEncryptionClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[EncryptionKey, ListEncryptionKeyOffsetPaginatedResponseContent]:
+ """
+ Retrieve details of all the encryption keys associated with your tenant.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Default value is 50, maximum value is 100.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[EncryptionKey, ListEncryptionKeyOffsetPaginatedResponseContent]
+ The keys were successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "keys/encryption",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListEncryptionKeyOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListEncryptionKeyOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.keys
+ _has_next = True
+ _get_next = lambda: self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self, *, type: CreateEncryptionKeyType, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[CreateEncryptionKeyResponseContent]:
+ """
+ Create the new, pre-activated encryption key, without the key material.
+
+ Parameters
+ ----------
+ type : CreateEncryptionKeyType
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateEncryptionKeyResponseContent]
+ The key was successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "keys/encryption",
+ method="POST",
+ json={
+ "type": type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateEncryptionKeyResponseContent,
+ parse_obj_as(
+ type_=CreateEncryptionKeyResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def rekey(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Perform rekeying operation on the key hierarchy.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "keys/encryption/rekey",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetEncryptionKeyResponseContent]:
+ """
+ Retrieve details of the encryption key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetEncryptionKeyResponseContent]
+ The key was successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"keys/encryption/{jsonable_encoder(kid)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetEncryptionKeyResponseContent,
+ parse_obj_as(
+ type_=GetEncryptionKeyResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def import_(
+ self, kid: str, *, wrapped_key: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[ImportEncryptionKeyResponseContent]:
+ """
+ Import wrapped key material and activate encryption key.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ wrapped_key : str
+ Base64 encoded ciphertext of key material wrapped by public wrapping key.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ImportEncryptionKeyResponseContent]
+ The key was successfully imported.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"keys/encryption/{jsonable_encoder(kid)}",
+ method="POST",
+ json={
+ "wrapped_key": wrapped_key,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ImportEncryptionKeyResponseContent,
+ parse_obj_as(
+ type_=ImportEncryptionKeyResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, kid: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete the custom provided encryption key with the given ID and move back to using native encryption key.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"keys/encryption/{jsonable_encoder(kid)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create_public_wrapping_key(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[CreateEncryptionKeyPublicWrappingResponseContent]:
+ """
+ Create the public wrapping key to wrap your own encryption key material.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateEncryptionKeyPublicWrappingResponseContent]
+ The public wrapping key was successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"keys/encryption/{jsonable_encoder(kid)}/wrapping-key",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateEncryptionKeyPublicWrappingResponseContent,
+ parse_obj_as(
+ type_=CreateEncryptionKeyPublicWrappingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawEncryptionClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[EncryptionKey, ListEncryptionKeyOffsetPaginatedResponseContent]:
+ """
+ Retrieve details of all the encryption keys associated with your tenant.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Default value is 50, maximum value is 100.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[EncryptionKey, ListEncryptionKeyOffsetPaginatedResponseContent]
+ The keys were successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "keys/encryption",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListEncryptionKeyOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListEncryptionKeyOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.keys
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self, *, type: CreateEncryptionKeyType, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[CreateEncryptionKeyResponseContent]:
+ """
+ Create the new, pre-activated encryption key, without the key material.
+
+ Parameters
+ ----------
+ type : CreateEncryptionKeyType
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateEncryptionKeyResponseContent]
+ The key was successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "keys/encryption",
+ method="POST",
+ json={
+ "type": type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateEncryptionKeyResponseContent,
+ parse_obj_as(
+ type_=CreateEncryptionKeyResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def rekey(self, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[None]:
+ """
+ Perform rekeying operation on the key hierarchy.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "keys/encryption/rekey",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetEncryptionKeyResponseContent]:
+ """
+ Retrieve details of the encryption key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetEncryptionKeyResponseContent]
+ The key was successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"keys/encryption/{jsonable_encoder(kid)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetEncryptionKeyResponseContent,
+ parse_obj_as(
+ type_=GetEncryptionKeyResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def import_(
+ self, kid: str, *, wrapped_key: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[ImportEncryptionKeyResponseContent]:
+ """
+ Import wrapped key material and activate encryption key.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ wrapped_key : str
+ Base64 encoded ciphertext of key material wrapped by public wrapping key.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ImportEncryptionKeyResponseContent]
+ The key was successfully imported.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"keys/encryption/{jsonable_encoder(kid)}",
+ method="POST",
+ json={
+ "wrapped_key": wrapped_key,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ImportEncryptionKeyResponseContent,
+ parse_obj_as(
+ type_=ImportEncryptionKeyResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete the custom provided encryption key with the given ID and move back to using native encryption key.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"keys/encryption/{jsonable_encoder(kid)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create_public_wrapping_key(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[CreateEncryptionKeyPublicWrappingResponseContent]:
+ """
+ Create the public wrapping key to wrap your own encryption key material.
+
+ Parameters
+ ----------
+ kid : str
+ Encryption key ID
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateEncryptionKeyPublicWrappingResponseContent]
+ The public wrapping key was successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"keys/encryption/{jsonable_encoder(kid)}/wrapping-key",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateEncryptionKeyPublicWrappingResponseContent,
+ parse_obj_as(
+ type_=CreateEncryptionKeyPublicWrappingResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/keys/raw_client.py b/src/auth0/management/keys/raw_client.py
new file mode 100644
index 00000000..1c849cd2
--- /dev/null
+++ b/src/auth0/management/keys/raw_client.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+
+
+class RawKeysClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+
+class AsyncRawKeysClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
diff --git a/src/auth0/management/keys/signing/__init__.py b/src/auth0/management/keys/signing/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/keys/signing/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/keys/signing/client.py b/src/auth0/management/keys/signing/client.py
new file mode 100644
index 00000000..b11fe785
--- /dev/null
+++ b/src/auth0/management/keys/signing/client.py
@@ -0,0 +1,313 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.get_signing_keys_response_content import GetSigningKeysResponseContent
+from ...types.revoked_signing_keys_response_content import RevokedSigningKeysResponseContent
+from ...types.rotate_signing_keys_response_content import RotateSigningKeysResponseContent
+from ...types.signing_keys import SigningKeys
+from .raw_client import AsyncRawSigningClient, RawSigningClient
+
+
+class SigningClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSigningClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawSigningClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSigningClient
+ """
+ return self._raw_client
+
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[SigningKeys]:
+ """
+ Retrieve details of all the application signing keys associated with your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[SigningKeys]
+ The signing keys were retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.signing.list()
+ """
+ _response = self._raw_client.list(request_options=request_options)
+ return _response.data
+
+ def rotate(self, *, request_options: typing.Optional[RequestOptions] = None) -> RotateSigningKeysResponseContent:
+ """
+ Rotate the application signing key of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RotateSigningKeysResponseContent
+ Signing key rotated successfully.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.signing.rotate()
+ """
+ _response = self._raw_client.rotate(request_options=request_options)
+ return _response.data
+
+ def get(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetSigningKeysResponseContent:
+ """
+ Retrieve details of the application signing key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Key id of the key to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSigningKeysResponseContent
+ The signing keys were retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.signing.get(
+ kid="kid",
+ )
+ """
+ _response = self._raw_client.get(kid, request_options=request_options)
+ return _response.data
+
+ def revoke(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RevokedSigningKeysResponseContent:
+ """
+ Revoke the application signing key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Key id of the key to revoke
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RevokedSigningKeysResponseContent
+ Signing key revoked successfully.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.keys.signing.revoke(
+ kid="kid",
+ )
+ """
+ _response = self._raw_client.revoke(kid, request_options=request_options)
+ return _response.data
+
+
+class AsyncSigningClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSigningClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawSigningClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSigningClient
+ """
+ return self._raw_client
+
+ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[SigningKeys]:
+ """
+ Retrieve details of all the application signing keys associated with your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[SigningKeys]
+ The signing keys were retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.signing.list()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(request_options=request_options)
+ return _response.data
+
+ async def rotate(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RotateSigningKeysResponseContent:
+ """
+ Rotate the application signing key of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RotateSigningKeysResponseContent
+ Signing key rotated successfully.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.signing.rotate()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.rotate(request_options=request_options)
+ return _response.data
+
+ async def get(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetSigningKeysResponseContent:
+ """
+ Retrieve details of the application signing key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Key id of the key to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSigningKeysResponseContent
+ The signing keys were retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.signing.get(
+ kid="kid",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(kid, request_options=request_options)
+ return _response.data
+
+ async def revoke(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RevokedSigningKeysResponseContent:
+ """
+ Revoke the application signing key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Key id of the key to revoke
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RevokedSigningKeysResponseContent
+ Signing key revoked successfully.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.keys.signing.revoke(
+ kid="kid",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.revoke(kid, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/keys/signing/raw_client.py b/src/auth0/management/keys/signing/raw_client.py
new file mode 100644
index 00000000..c5eb95a7
--- /dev/null
+++ b/src/auth0/management/keys/signing/raw_client.py
@@ -0,0 +1,660 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.get_signing_keys_response_content import GetSigningKeysResponseContent
+from ...types.revoked_signing_keys_response_content import RevokedSigningKeysResponseContent
+from ...types.rotate_signing_keys_response_content import RotateSigningKeysResponseContent
+from ...types.signing_keys import SigningKeys
+
+
+class RawSigningClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[typing.List[SigningKeys]]:
+ """
+ Retrieve details of all the application signing keys associated with your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[SigningKeys]]
+ The signing keys were retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "keys/signing",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[SigningKeys],
+ parse_obj_as(
+ type_=typing.List[SigningKeys], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def rotate(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[RotateSigningKeysResponseContent]:
+ """
+ Rotate the application signing key of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[RotateSigningKeysResponseContent]
+ Signing key rotated successfully.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "keys/signing/rotate",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RotateSigningKeysResponseContent,
+ parse_obj_as(
+ type_=RotateSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetSigningKeysResponseContent]:
+ """
+ Retrieve details of the application signing key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Key id of the key to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetSigningKeysResponseContent]
+ The signing keys were retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"keys/signing/{jsonable_encoder(kid)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSigningKeysResponseContent,
+ parse_obj_as(
+ type_=GetSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def revoke(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[RevokedSigningKeysResponseContent]:
+ """
+ Revoke the application signing key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Key id of the key to revoke
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[RevokedSigningKeysResponseContent]
+ Signing key revoked successfully.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"keys/signing/{jsonable_encoder(kid)}/revoke",
+ method="PUT",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RevokedSigningKeysResponseContent,
+ parse_obj_as(
+ type_=RevokedSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSigningClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[typing.List[SigningKeys]]:
+ """
+ Retrieve details of all the application signing keys associated with your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[SigningKeys]]
+ The signing keys were retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "keys/signing",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[SigningKeys],
+ parse_obj_as(
+ type_=typing.List[SigningKeys], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def rotate(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[RotateSigningKeysResponseContent]:
+ """
+ Rotate the application signing key of your tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[RotateSigningKeysResponseContent]
+ Signing key rotated successfully.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "keys/signing/rotate",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RotateSigningKeysResponseContent,
+ parse_obj_as(
+ type_=RotateSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetSigningKeysResponseContent]:
+ """
+ Retrieve details of the application signing key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Key id of the key to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetSigningKeysResponseContent]
+ The signing keys were retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"keys/signing/{jsonable_encoder(kid)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSigningKeysResponseContent,
+ parse_obj_as(
+ type_=GetSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def revoke(
+ self, kid: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[RevokedSigningKeysResponseContent]:
+ """
+ Revoke the application signing key with the given ID.
+
+ Parameters
+ ----------
+ kid : str
+ Key id of the key to revoke
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[RevokedSigningKeysResponseContent]
+ Signing key revoked successfully.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"keys/signing/{jsonable_encoder(kid)}/revoke",
+ method="PUT",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RevokedSigningKeysResponseContent,
+ parse_obj_as(
+ type_=RevokedSigningKeysResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/log_streams/__init__.py b/src/auth0/management/log_streams/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/log_streams/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/log_streams/client.py b/src/auth0/management/log_streams/client.py
new file mode 100644
index 00000000..4d8955eb
--- /dev/null
+++ b/src/auth0/management/log_streams/client.py
@@ -0,0 +1,1123 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.create_log_stream_request_content import CreateLogStreamRequestContent
+from ..types.create_log_stream_response_content import CreateLogStreamResponseContent
+from ..types.get_log_stream_response_content import GetLogStreamResponseContent
+from ..types.log_stream_filter import LogStreamFilter
+from ..types.log_stream_pii_config import LogStreamPiiConfig
+from ..types.log_stream_response_schema import LogStreamResponseSchema
+from ..types.log_stream_sink_patch import LogStreamSinkPatch
+from ..types.log_stream_status_enum import LogStreamStatusEnum
+from ..types.update_log_stream_response_content import UpdateLogStreamResponseContent
+from .raw_client import AsyncRawLogStreamsClient, RawLogStreamsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class LogStreamsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawLogStreamsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawLogStreamsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawLogStreamsClient
+ """
+ return self._raw_client
+
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[LogStreamResponseSchema]:
+ """
+ Retrieve details on log streams.
+ [{
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ }, {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "eventgrid",
+ "status": "active|paused|suspended",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }]
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[LogStreamResponseSchema]
+ Returning log streams
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.log_streams.list()
+ """
+ _response = self._raw_client.list(request_options=request_options)
+ return _response.data
+
+ def create(
+ self, *, request: CreateLogStreamRequestContent, request_options: typing.Optional[RequestOptions] = None
+ ) -> CreateLogStreamResponseContent:
+ """
+ Create a log stream.
+ type of log stream being created determines the properties required in the sink payload.
+ http Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "http",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+ }
+ eventbridge Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "eventbridge",
+ "sink": {
+ "awsRegion": "string",
+ "awsAccountId": "string"
+ }
+ }
+ The response will include an additional field awsPartnerEventSource in the sink: {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ }
+ Azure Event Grid Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "eventgrid",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+ }
+ Datadog Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "datadog",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ Splunk Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "splunk",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ Sumo Logic Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "sumo",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ }
+
+ Parameters
+ ----------
+ request : CreateLogStreamRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateLogStreamResponseContent
+ Log stream created
+
+ Examples
+ --------
+ from auth0 import Auth0, CreateLogStreamHttpRequestBody, LogStreamHttpSink
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.log_streams.create(
+ request=CreateLogStreamHttpRequestBody(
+ sink=LogStreamHttpSink(
+ http_endpoint="httpEndpoint",
+ ),
+ ),
+ )
+ """
+ _response = self._raw_client.create(request=request, request_options=request_options)
+ return _response.data
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetLogStreamResponseContent:
+ """
+ Retrieve a log stream configuration and status.
+ {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+
+ }{
+ "name": "string",
+ "type": "mixpanel",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string"
+ }
+ }
+
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "mixpanel",
+ "status": "active",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string" // the following is redacted on return
+ }
+ }
+
+ {
+ "name": "string",
+ "type": "segment",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "segment",
+ "status": "active",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ } status of a log stream maybe any of the following:
+ 1. active - Stream is currently enabled.
+ 2. paused - Stream is currently user disabled and will not attempt log delivery.
+ 3. suspended - Stream is currently disabled because of errors and will not attempt log delivery.
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to get
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetLogStreamResponseContent
+ Returning log stream.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.log_streams.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a log stream.
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.log_streams.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ status: typing.Optional[LogStreamStatusEnum] = OMIT,
+ is_priority: typing.Optional[bool] = OMIT,
+ filters: typing.Optional[typing.Sequence[LogStreamFilter]] = OMIT,
+ pii_config: typing.Optional[LogStreamPiiConfig] = OMIT,
+ sink: typing.Optional[LogStreamSinkPatch] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateLogStreamResponseContent:
+ """
+ Update a log stream.
+ eventbridge and eventgrid, updating the sink is not permitted.
+ {
+ "status": "active|paused"
+ }
+ {
+ "name": "string"
+ }
+ http{
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONARRAY|JSONLINES",
+ "httpAuthorization": "string"
+ }
+ }
+ datadog{
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ splunk{
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ sumo{
+ "sink": {
+ "sumoSourceAddress": "string"
+ }
+ }
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to get
+
+ name : typing.Optional[str]
+ log stream name
+
+ status : typing.Optional[LogStreamStatusEnum]
+
+ is_priority : typing.Optional[bool]
+ True for priority log streams, false for non-priority
+
+ filters : typing.Optional[typing.Sequence[LogStreamFilter]]
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+
+ pii_config : typing.Optional[LogStreamPiiConfig]
+
+ sink : typing.Optional[LogStreamSinkPatch]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateLogStreamResponseContent
+ Log stream updated
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.log_streams.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ name=name,
+ status=status,
+ is_priority=is_priority,
+ filters=filters,
+ pii_config=pii_config,
+ sink=sink,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncLogStreamsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawLogStreamsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawLogStreamsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawLogStreamsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LogStreamResponseSchema]:
+ """
+ Retrieve details on log streams.
+ [{
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ }, {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "eventgrid",
+ "status": "active|paused|suspended",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }]
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[LogStreamResponseSchema]
+ Returning log streams
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.log_streams.list()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(request_options=request_options)
+ return _response.data
+
+ async def create(
+ self, *, request: CreateLogStreamRequestContent, request_options: typing.Optional[RequestOptions] = None
+ ) -> CreateLogStreamResponseContent:
+ """
+ Create a log stream.
+ type of log stream being created determines the properties required in the sink payload.
+ http Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "http",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+ }
+ eventbridge Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "eventbridge",
+ "sink": {
+ "awsRegion": "string",
+ "awsAccountId": "string"
+ }
+ }
+ The response will include an additional field awsPartnerEventSource in the sink: {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ }
+ Azure Event Grid Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "eventgrid",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+ }
+ Datadog Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "datadog",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ Splunk Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "splunk",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ Sumo Logic Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "sumo",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ }
+
+ Parameters
+ ----------
+ request : CreateLogStreamRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateLogStreamResponseContent
+ Log stream created
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, CreateLogStreamHttpRequestBody, LogStreamHttpSink
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.log_streams.create(
+ request=CreateLogStreamHttpRequestBody(
+ sink=LogStreamHttpSink(
+ http_endpoint="httpEndpoint",
+ ),
+ ),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(request=request, request_options=request_options)
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetLogStreamResponseContent:
+ """
+ Retrieve a log stream configuration and status.
+ {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+
+ }{
+ "name": "string",
+ "type": "mixpanel",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string"
+ }
+ }
+
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "mixpanel",
+ "status": "active",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string" // the following is redacted on return
+ }
+ }
+
+ {
+ "name": "string",
+ "type": "segment",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "segment",
+ "status": "active",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ } status of a log stream maybe any of the following:
+ 1. active - Stream is currently enabled.
+ 2. paused - Stream is currently user disabled and will not attempt log delivery.
+ 3. suspended - Stream is currently disabled because of errors and will not attempt log delivery.
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to get
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetLogStreamResponseContent
+ Returning log stream.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.log_streams.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a log stream.
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.log_streams.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ status: typing.Optional[LogStreamStatusEnum] = OMIT,
+ is_priority: typing.Optional[bool] = OMIT,
+ filters: typing.Optional[typing.Sequence[LogStreamFilter]] = OMIT,
+ pii_config: typing.Optional[LogStreamPiiConfig] = OMIT,
+ sink: typing.Optional[LogStreamSinkPatch] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateLogStreamResponseContent:
+ """
+ Update a log stream.
+ eventbridge and eventgrid, updating the sink is not permitted.
+ {
+ "status": "active|paused"
+ }
+ {
+ "name": "string"
+ }
+ http{
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONARRAY|JSONLINES",
+ "httpAuthorization": "string"
+ }
+ }
+ datadog{
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ splunk{
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ sumo{
+ "sink": {
+ "sumoSourceAddress": "string"
+ }
+ }
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to get
+
+ name : typing.Optional[str]
+ log stream name
+
+ status : typing.Optional[LogStreamStatusEnum]
+
+ is_priority : typing.Optional[bool]
+ True for priority log streams, false for non-priority
+
+ filters : typing.Optional[typing.Sequence[LogStreamFilter]]
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+
+ pii_config : typing.Optional[LogStreamPiiConfig]
+
+ sink : typing.Optional[LogStreamSinkPatch]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateLogStreamResponseContent
+ Log stream updated
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.log_streams.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ name=name,
+ status=status,
+ is_priority=is_priority,
+ filters=filters,
+ pii_config=pii_config,
+ sink=sink,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/log_streams/raw_client.py b/src/auth0/management/log_streams/raw_client.py
new file mode 100644
index 00000000..d7a5f41b
--- /dev/null
+++ b/src/auth0/management/log_streams/raw_client.py
@@ -0,0 +1,1636 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.create_log_stream_request_content import CreateLogStreamRequestContent
+from ..types.create_log_stream_response_content import CreateLogStreamResponseContent
+from ..types.get_log_stream_response_content import GetLogStreamResponseContent
+from ..types.log_stream_filter import LogStreamFilter
+from ..types.log_stream_pii_config import LogStreamPiiConfig
+from ..types.log_stream_response_schema import LogStreamResponseSchema
+from ..types.log_stream_sink_patch import LogStreamSinkPatch
+from ..types.log_stream_status_enum import LogStreamStatusEnum
+from ..types.update_log_stream_response_content import UpdateLogStreamResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawLogStreamsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[typing.List[LogStreamResponseSchema]]:
+ """
+ Retrieve details on log streams.
+ [{
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ }, {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "eventgrid",
+ "status": "active|paused|suspended",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }]
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[LogStreamResponseSchema]]
+ Returning log streams
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "log-streams",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[LogStreamResponseSchema],
+ parse_obj_as(
+ type_=typing.List[LogStreamResponseSchema], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self, *, request: CreateLogStreamRequestContent, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[CreateLogStreamResponseContent]:
+ """
+ Create a log stream.
+ type of log stream being created determines the properties required in the sink payload.
+ http Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "http",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+ }
+ eventbridge Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "eventbridge",
+ "sink": {
+ "awsRegion": "string",
+ "awsAccountId": "string"
+ }
+ }
+ The response will include an additional field awsPartnerEventSource in the sink: {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ }
+ Azure Event Grid Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "eventgrid",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+ }
+ Datadog Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "datadog",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ Splunk Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "splunk",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ Sumo Logic Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "sumo",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ }
+
+ Parameters
+ ----------
+ request : CreateLogStreamRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateLogStreamResponseContent]
+ Log stream created
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "log-streams",
+ method="POST",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=CreateLogStreamRequestContent, direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateLogStreamResponseContent,
+ parse_obj_as(
+ type_=CreateLogStreamResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetLogStreamResponseContent]:
+ """
+ Retrieve a log stream configuration and status.
+ {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+
+ }{
+ "name": "string",
+ "type": "mixpanel",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string"
+ }
+ }
+
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "mixpanel",
+ "status": "active",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string" // the following is redacted on return
+ }
+ }
+
+ {
+ "name": "string",
+ "type": "segment",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "segment",
+ "status": "active",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ } status of a log stream maybe any of the following:
+ 1. active - Stream is currently enabled.
+ 2. paused - Stream is currently user disabled and will not attempt log delivery.
+ 3. suspended - Stream is currently disabled because of errors and will not attempt log delivery.
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to get
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetLogStreamResponseContent]
+ Returning log stream.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"log-streams/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetLogStreamResponseContent,
+ parse_obj_as(
+ type_=GetLogStreamResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a log stream.
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"log-streams/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ status: typing.Optional[LogStreamStatusEnum] = OMIT,
+ is_priority: typing.Optional[bool] = OMIT,
+ filters: typing.Optional[typing.Sequence[LogStreamFilter]] = OMIT,
+ pii_config: typing.Optional[LogStreamPiiConfig] = OMIT,
+ sink: typing.Optional[LogStreamSinkPatch] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateLogStreamResponseContent]:
+ """
+ Update a log stream.
+ eventbridge and eventgrid, updating the sink is not permitted.
+ {
+ "status": "active|paused"
+ }
+ {
+ "name": "string"
+ }
+ http{
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONARRAY|JSONLINES",
+ "httpAuthorization": "string"
+ }
+ }
+ datadog{
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ splunk{
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ sumo{
+ "sink": {
+ "sumoSourceAddress": "string"
+ }
+ }
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to get
+
+ name : typing.Optional[str]
+ log stream name
+
+ status : typing.Optional[LogStreamStatusEnum]
+
+ is_priority : typing.Optional[bool]
+ True for priority log streams, false for non-priority
+
+ filters : typing.Optional[typing.Sequence[LogStreamFilter]]
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+
+ pii_config : typing.Optional[LogStreamPiiConfig]
+
+ sink : typing.Optional[LogStreamSinkPatch]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateLogStreamResponseContent]
+ Log stream updated
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"log-streams/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "status": status,
+ "isPriority": is_priority,
+ "filters": convert_and_respect_annotation_metadata(
+ object_=filters, annotation=typing.Sequence[LogStreamFilter], direction="write"
+ ),
+ "pii_config": convert_and_respect_annotation_metadata(
+ object_=pii_config, annotation=LogStreamPiiConfig, direction="write"
+ ),
+ "sink": convert_and_respect_annotation_metadata(
+ object_=sink, annotation=LogStreamSinkPatch, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateLogStreamResponseContent,
+ parse_obj_as(
+ type_=UpdateLogStreamResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawLogStreamsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[typing.List[LogStreamResponseSchema]]:
+ """
+ Retrieve details on log streams.
+ [{
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ }, {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "eventgrid",
+ "status": "active|paused|suspended",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ },
+ {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }]
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[LogStreamResponseSchema]]
+ Returning log streams
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "log-streams",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[LogStreamResponseSchema],
+ parse_obj_as(
+ type_=typing.List[LogStreamResponseSchema], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self, *, request: CreateLogStreamRequestContent, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[CreateLogStreamResponseContent]:
+ """
+ Create a log stream.
+ type of log stream being created determines the properties required in the sink payload.
+ http Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "http",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+ }
+ eventbridge Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "eventbridge",
+ "sink": {
+ "awsRegion": "string",
+ "awsAccountId": "string"
+ }
+ }
+ The response will include an additional field awsPartnerEventSource in the sink: {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ }
+ Azure Event Grid Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "eventgrid",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+ }
+ Datadog Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "datadog",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ Splunk Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "splunk",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ Sumo Logic Stream, the sink properties are listed in the payload below
+ Request: {
+ "name": "string",
+ "type": "sumo",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ }
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ }
+
+ Parameters
+ ----------
+ request : CreateLogStreamRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateLogStreamResponseContent]
+ Log stream created
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "log-streams",
+ method="POST",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=CreateLogStreamRequestContent, direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateLogStreamResponseContent,
+ parse_obj_as(
+ type_=CreateLogStreamResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetLogStreamResponseContent]:
+ """
+ Retrieve a log stream configuration and status.
+ {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+
+ }{
+ "name": "string",
+ "type": "mixpanel",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string"
+ }
+ }
+
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "mixpanel",
+ "status": "active",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string" // the following is redacted on return
+ }
+ }
+
+ {
+ "name": "string",
+ "type": "segment",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "segment",
+ "status": "active",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ } {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+ } status of a log stream maybe any of the following:
+ 1. active - Stream is currently enabled.
+ 2. paused - Stream is currently user disabled and will not attempt log delivery.
+ 3. suspended - Stream is currently disabled because of errors and will not attempt log delivery.
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to get
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetLogStreamResponseContent]
+ Returning log stream.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"log-streams/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetLogStreamResponseContent,
+ parse_obj_as(
+ type_=GetLogStreamResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a log stream.
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"log-streams/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ status: typing.Optional[LogStreamStatusEnum] = OMIT,
+ is_priority: typing.Optional[bool] = OMIT,
+ filters: typing.Optional[typing.Sequence[LogStreamFilter]] = OMIT,
+ pii_config: typing.Optional[LogStreamPiiConfig] = OMIT,
+ sink: typing.Optional[LogStreamSinkPatch] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateLogStreamResponseContent]:
+ """
+ Update a log stream.
+ eventbridge and eventgrid, updating the sink is not permitted.
+ {
+ "status": "active|paused"
+ }
+ {
+ "name": "string"
+ }
+ http{
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONARRAY|JSONLINES",
+ "httpAuthorization": "string"
+ }
+ }
+ datadog{
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+ }
+ splunk{
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+ }
+ sumo{
+ "sink": {
+ "sumoSourceAddress": "string"
+ }
+ }
+
+ Parameters
+ ----------
+ id : str
+ The id of the log stream to get
+
+ name : typing.Optional[str]
+ log stream name
+
+ status : typing.Optional[LogStreamStatusEnum]
+
+ is_priority : typing.Optional[bool]
+ True for priority log streams, false for non-priority
+
+ filters : typing.Optional[typing.Sequence[LogStreamFilter]]
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+
+ pii_config : typing.Optional[LogStreamPiiConfig]
+
+ sink : typing.Optional[LogStreamSinkPatch]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateLogStreamResponseContent]
+ Log stream updated
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"log-streams/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "status": status,
+ "isPriority": is_priority,
+ "filters": convert_and_respect_annotation_metadata(
+ object_=filters, annotation=typing.Sequence[LogStreamFilter], direction="write"
+ ),
+ "pii_config": convert_and_respect_annotation_metadata(
+ object_=pii_config, annotation=LogStreamPiiConfig, direction="write"
+ ),
+ "sink": convert_and_respect_annotation_metadata(
+ object_=sink, annotation=LogStreamSinkPatch, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateLogStreamResponseContent,
+ parse_obj_as(
+ type_=UpdateLogStreamResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/logs/__init__.py b/src/auth0/management/logs/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/logs/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/logs/client.py b/src/auth0/management/logs/client.py
new file mode 100644
index 00000000..03a2fd0e
--- /dev/null
+++ b/src/auth0/management/logs/client.py
@@ -0,0 +1,340 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.get_log_response_content import GetLogResponseContent
+from ..types.list_log_offset_paginated_response_content import ListLogOffsetPaginatedResponseContent
+from ..types.log import Log
+from .raw_client import AsyncRawLogsClient, RawLogsClient
+
+
+class LogsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawLogsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawLogsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawLogsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ sort: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ include_totals: typing.Optional[bool] = True,
+ search: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Log, ListLogOffsetPaginatedResponseContent]:
+ """
+ Retrieve log entries that match the specified search criteria (or all log entries if no criteria specified).
+
+ Set custom search criteria using the q parameter, or search from a specific log ID ("search from checkpoint").
+
+ For more information on all possible event types, their respective acronyms, and descriptions, see Log Event Type Codes.
+
+ fields and sort, see Searchable Fields.
+
+ Auth0 limits the number of logs you can return by search criteria to 100 logs per request. Furthermore, you may paginate only through 1,000 search results. If you exceed this threshold, please redefine your search or use the get logs by checkpoint method.
+
+ take parameter. If you use from at the same time as q, from takes precedence and q is ignored.from parameter.from and take will be ignored, and date ordering is not guaranteed.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Paging is disabled if parameter not sent. Default: 50. Max value: 100
+
+ sort : typing.Optional[str]
+ Field to use for sorting appended with :1 for ascending and :-1 for descending. e.g. date:-1
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false)
+
+ include_totals : typing.Optional[bool]
+ Return results as an array when false (default). Return results inside an object that also contains a total result count when true.
+
+ search : typing.Optional[str]
+ Retrieves logs that match the specified search criteria. This parameter can be combined with all the others in the /api/logs endpoint but is specified separately for clarity.
+ If no fields are provided a case insensitive 'starts with' search is performed on all of the following fields: client_name, connection, user_name. Otherwise, you can specify multiple fields and specify the search using the %field%:%search%, for example: application:node user:"John@contoso.com".
+ Values specified without quotes are matched using a case insensitive 'starts with' search. If quotes are used a case insensitve exact search is used. If multiple fields are used, the AND operator is used to join the clauses.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Log, ListLogOffsetPaginatedResponseContent]
+ Logs successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.logs.list(
+ page=1,
+ per_page=1,
+ sort="sort",
+ fields="fields",
+ include_fields=True,
+ include_totals=True,
+ search="search",
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ sort=sort,
+ fields=fields,
+ include_fields=include_fields,
+ include_totals=include_totals,
+ search=search,
+ request_options=request_options,
+ )
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetLogResponseContent:
+ """
+ Retrieve an individual log event.
+
+ Parameters
+ ----------
+ id : str
+ log_id of the log to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetLogResponseContent
+ Log successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.logs.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncLogsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawLogsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawLogsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawLogsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ sort: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ include_totals: typing.Optional[bool] = True,
+ search: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Log, ListLogOffsetPaginatedResponseContent]:
+ """
+ Retrieve log entries that match the specified search criteria (or all log entries if no criteria specified).
+
+ Set custom search criteria using the q parameter, or search from a specific log ID ("search from checkpoint").
+
+ For more information on all possible event types, their respective acronyms, and descriptions, see Log Event Type Codes.
+
+ fields and sort, see Searchable Fields.
+
+ Auth0 limits the number of logs you can return by search criteria to 100 logs per request. Furthermore, you may paginate only through 1,000 search results. If you exceed this threshold, please redefine your search or use the get logs by checkpoint method.
+
+ take parameter. If you use from at the same time as q, from takes precedence and q is ignored.from parameter.from and take will be ignored, and date ordering is not guaranteed.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Paging is disabled if parameter not sent. Default: 50. Max value: 100
+
+ sort : typing.Optional[str]
+ Field to use for sorting appended with :1 for ascending and :-1 for descending. e.g. date:-1
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false)
+
+ include_totals : typing.Optional[bool]
+ Return results as an array when false (default). Return results inside an object that also contains a total result count when true.
+
+ search : typing.Optional[str]
+ Retrieves logs that match the specified search criteria. This parameter can be combined with all the others in the /api/logs endpoint but is specified separately for clarity.
+ If no fields are provided a case insensitive 'starts with' search is performed on all of the following fields: client_name, connection, user_name. Otherwise, you can specify multiple fields and specify the search using the %field%:%search%, for example: application:node user:"John@contoso.com".
+ Values specified without quotes are matched using a case insensitive 'starts with' search. If quotes are used a case insensitve exact search is used. If multiple fields are used, the AND operator is used to join the clauses.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Log, ListLogOffsetPaginatedResponseContent]
+ Logs successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.logs.list(
+ page=1,
+ per_page=1,
+ sort="sort",
+ fields="fields",
+ include_fields=True,
+ include_totals=True,
+ search="search",
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ sort=sort,
+ fields=fields,
+ include_fields=include_fields,
+ include_totals=include_totals,
+ search=search,
+ request_options=request_options,
+ )
+
+ async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetLogResponseContent:
+ """
+ Retrieve an individual log event.
+
+ Parameters
+ ----------
+ id : str
+ log_id of the log to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetLogResponseContent
+ Log successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.logs.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/logs/raw_client.py b/src/auth0/management/logs/raw_client.py
new file mode 100644
index 00000000..a35a49bf
--- /dev/null
+++ b/src/auth0/management/logs/raw_client.py
@@ -0,0 +1,547 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.get_log_response_content import GetLogResponseContent
+from ..types.list_log_offset_paginated_response_content import ListLogOffsetPaginatedResponseContent
+from ..types.log import Log
+
+
+class RawLogsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ sort: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ include_totals: typing.Optional[bool] = True,
+ search: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Log, ListLogOffsetPaginatedResponseContent]:
+ """
+ Retrieve log entries that match the specified search criteria (or all log entries if no criteria specified).
+
+ Set custom search criteria using the q parameter, or search from a specific log ID ("search from checkpoint").
+
+ For more information on all possible event types, their respective acronyms, and descriptions, see Log Event Type Codes.
+
+ fields and sort, see Searchable Fields.
+
+ Auth0 limits the number of logs you can return by search criteria to 100 logs per request. Furthermore, you may paginate only through 1,000 search results. If you exceed this threshold, please redefine your search or use the get logs by checkpoint method.
+
+ take parameter. If you use from at the same time as q, from takes precedence and q is ignored.from parameter.from and take will be ignored, and date ordering is not guaranteed.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Paging is disabled if parameter not sent. Default: 50. Max value: 100
+
+ sort : typing.Optional[str]
+ Field to use for sorting appended with :1 for ascending and :-1 for descending. e.g. date:-1
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false)
+
+ include_totals : typing.Optional[bool]
+ Return results as an array when false (default). Return results inside an object that also contains a total result count when true.
+
+ search : typing.Optional[str]
+ Retrieves logs that match the specified search criteria. This parameter can be combined with all the others in the /api/logs endpoint but is specified separately for clarity.
+ If no fields are provided a case insensitive 'starts with' search is performed on all of the following fields: client_name, connection, user_name. Otherwise, you can specify multiple fields and specify the search using the %field%:%search%, for example: application:node user:"John@contoso.com".
+ Values specified without quotes are matched using a case insensitive 'starts with' search. If quotes are used a case insensitve exact search is used. If multiple fields are used, the AND operator is used to join the clauses.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Log, ListLogOffsetPaginatedResponseContent]
+ Logs successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "logs",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "sort": sort,
+ "fields": fields,
+ "include_fields": include_fields,
+ "include_totals": include_totals,
+ "search": search,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListLogOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListLogOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.logs
+ _has_next = True
+ _get_next = lambda: self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ sort=sort,
+ fields=fields,
+ include_fields=include_fields,
+ include_totals=include_totals,
+ search=search,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetLogResponseContent]:
+ """
+ Retrieve an individual log event.
+
+ Parameters
+ ----------
+ id : str
+ log_id of the log to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetLogResponseContent]
+ Log successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"logs/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetLogResponseContent,
+ parse_obj_as(
+ type_=GetLogResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawLogsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ sort: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ include_totals: typing.Optional[bool] = True,
+ search: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Log, ListLogOffsetPaginatedResponseContent]:
+ """
+ Retrieve log entries that match the specified search criteria (or all log entries if no criteria specified).
+
+ Set custom search criteria using the q parameter, or search from a specific log ID ("search from checkpoint").
+
+ For more information on all possible event types, their respective acronyms, and descriptions, see Log Event Type Codes.
+
+ fields and sort, see Searchable Fields.
+
+ Auth0 limits the number of logs you can return by search criteria to 100 logs per request. Furthermore, you may paginate only through 1,000 search results. If you exceed this threshold, please redefine your search or use the get logs by checkpoint method.
+
+ take parameter. If you use from at the same time as q, from takes precedence and q is ignored.from parameter.from and take will be ignored, and date ordering is not guaranteed.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Paging is disabled if parameter not sent. Default: 50. Max value: 100
+
+ sort : typing.Optional[str]
+ Field to use for sorting appended with :1 for ascending and :-1 for descending. e.g. date:-1
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false)
+
+ include_totals : typing.Optional[bool]
+ Return results as an array when false (default). Return results inside an object that also contains a total result count when true.
+
+ search : typing.Optional[str]
+ Retrieves logs that match the specified search criteria. This parameter can be combined with all the others in the /api/logs endpoint but is specified separately for clarity.
+ If no fields are provided a case insensitive 'starts with' search is performed on all of the following fields: client_name, connection, user_name. Otherwise, you can specify multiple fields and specify the search using the %field%:%search%, for example: application:node user:"John@contoso.com".
+ Values specified without quotes are matched using a case insensitive 'starts with' search. If quotes are used a case insensitve exact search is used. If multiple fields are used, the AND operator is used to join the clauses.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Log, ListLogOffsetPaginatedResponseContent]
+ Logs successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "logs",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "sort": sort,
+ "fields": fields,
+ "include_fields": include_fields,
+ "include_totals": include_totals,
+ "search": search,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListLogOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListLogOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.logs
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ sort=sort,
+ fields=fields,
+ include_fields=include_fields,
+ include_totals=include_totals,
+ search=search,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetLogResponseContent]:
+ """
+ Retrieve an individual log event.
+
+ Parameters
+ ----------
+ id : str
+ log_id of the log to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetLogResponseContent]
+ Log successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"logs/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetLogResponseContent,
+ parse_obj_as(
+ type_=GetLogResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/management_client.py b/src/auth0/management/management_client.py
new file mode 100644
index 00000000..43d4d1d7
--- /dev/null
+++ b/src/auth0/management/management_client.py
@@ -0,0 +1,545 @@
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Callable, Dict, Optional, Union
+
+import httpx
+from .client import AsyncAuth0, Auth0
+from .token_provider import TokenProvider
+
+if TYPE_CHECKING:
+ from .actions.client import ActionsClient, AsyncActionsClient
+ from .anomaly.client import AnomalyClient, AsyncAnomalyClient
+ from .attack_protection.client import AsyncAttackProtectionClient, AttackProtectionClient
+ from .branding.client import AsyncBrandingClient, BrandingClient
+ from .client_grants.client import AsyncClientGrantsClient, ClientGrantsClient
+ from .clients.client import AsyncClientsClient, ClientsClient
+ from .connections.client import AsyncConnectionsClient, ConnectionsClient
+ from .custom_domains.client import AsyncCustomDomainsClient, CustomDomainsClient
+ from .device_credentials.client import AsyncDeviceCredentialsClient, DeviceCredentialsClient
+ from .email_templates.client import AsyncEmailTemplatesClient, EmailTemplatesClient
+ from .emails.client import AsyncEmailsClient, EmailsClient
+ from .event_streams.client import AsyncEventStreamsClient, EventStreamsClient
+ from .flows.client import AsyncFlowsClient, FlowsClient
+ from .forms.client import AsyncFormsClient, FormsClient
+ from .guardian.client import AsyncGuardianClient, GuardianClient
+ from .hooks.client import AsyncHooksClient, HooksClient
+ from .jobs.client import AsyncJobsClient, JobsClient
+ from .keys.client import AsyncKeysClient, KeysClient
+ from .log_streams.client import AsyncLogStreamsClient, LogStreamsClient
+ from .logs.client import AsyncLogsClient, LogsClient
+ from .network_acls.client import AsyncNetworkAclsClient, NetworkAclsClient
+ from .organizations.client import AsyncOrganizationsClient, OrganizationsClient
+ from .prompts.client import AsyncPromptsClient, PromptsClient
+ from .refresh_tokens.client import AsyncRefreshTokensClient, RefreshTokensClient
+ from .resource_servers.client import AsyncResourceServersClient, ResourceServersClient
+ from .roles.client import AsyncRolesClient, RolesClient
+ from .rules.client import AsyncRulesClient, RulesClient
+ from .rules_configs.client import AsyncRulesConfigsClient, RulesConfigsClient
+ from .self_service_profiles.client import AsyncSelfServiceProfilesClient, SelfServiceProfilesClient
+ from .sessions.client import AsyncSessionsClient, SessionsClient
+ from .stats.client import AsyncStatsClient, StatsClient
+ from .supplemental_signals.client import AsyncSupplementalSignalsClient, SupplementalSignalsClient
+ from .tenants.client import AsyncTenantsClient, TenantsClient
+ from .tickets.client import AsyncTicketsClient, TicketsClient
+ from .token_exchange_profiles.client import AsyncTokenExchangeProfilesClient, TokenExchangeProfilesClient
+ from .user_blocks.client import AsyncUserBlocksClient, UserBlocksClient
+ from .user_grants.client import AsyncUserGrantsClient, UserGrantsClient
+ from .users.client import AsyncUsersClient, UsersClient
+ from .verifiable_credentials.client import AsyncVerifiableCredentialsClient, VerifiableCredentialsClient
+
+
+class ManagementClient:
+ """
+ Auth0 Management API client with automatic token management.
+
+ Supports two initialization patterns:
+
+ 1. With an existing token:
+
+ client = ManagementClient(
+ domain="tenant.auth0.com",
+ token="your_token"
+ )
+
+ 2. With client credentials (automatic token acquisition and refresh):
+
+ client = ManagementClient(
+ domain="tenant.auth0.com",
+ client_id="your_client_id",
+ client_secret="your_client_secret"
+ )
+
+ Parameters
+ ----------
+ domain : str
+ Your Auth0 domain (e.g., "your-tenant.auth0.com").
+ token : Optional[Union[str, Callable[[], str]]]
+ A static token string or a callable that returns a token.
+ Required if client_id/client_secret are not provided.
+ client_id : Optional[str]
+ Your Auth0 application client ID.
+ Required along with client_secret for automatic token acquisition.
+ client_secret : Optional[str]
+ Your Auth0 application client secret.
+ Required along with client_id for automatic token acquisition.
+ audience : Optional[str]
+ The API audience. Defaults to https://{domain}/api/v2/
+ headers : Optional[Dict[str, str]]
+ Additional headers to send with requests.
+ timeout : Optional[float]
+ Request timeout in seconds. Defaults to 60.
+ httpx_client : Optional[httpx.Client]
+ Custom httpx client for requests.
+
+ Raises
+ ------
+ ValueError
+ If neither token nor client_id/client_secret are provided.
+ """
+
+ def __init__(
+ self,
+ *,
+ domain: str,
+ token: Optional[Union[str, Callable[[], str]]] = None,
+ client_id: Optional[str] = None,
+ client_secret: Optional[str] = None,
+ audience: Optional[str] = None,
+ headers: Optional[Dict[str, str]] = None,
+ timeout: Optional[float] = None,
+ httpx_client: Optional[httpx.Client] = None,
+ ):
+ # Validate auth options
+ has_token = token is not None
+ has_credentials = client_id is not None and client_secret is not None
+
+ if not has_token and not has_credentials:
+ raise ValueError("Either 'token' or both 'client_id' and 'client_secret' must be provided")
+
+ # Create token supplier
+ if has_credentials and not has_token:
+ provider = TokenProvider(
+ domain=domain,
+ client_id=client_id, # type: ignore[arg-type]
+ client_secret=client_secret, # type: ignore[arg-type]
+ audience=audience,
+ )
+ resolved_token: Union[str, Callable[[], str]] = provider.get_token
+ else:
+ resolved_token = token # type: ignore[assignment]
+
+ # Create underlying client
+ self._api = Auth0(
+ base_url=f"https://{domain}/api/v2",
+ token=resolved_token,
+ headers=headers,
+ timeout=timeout,
+ httpx_client=httpx_client,
+ )
+
+ # Forward all sub-client properties
+ @property
+ def actions(self) -> "ActionsClient":
+ return self._api.actions
+
+ @property
+ def anomaly(self) -> "AnomalyClient":
+ return self._api.anomaly
+
+ @property
+ def attack_protection(self) -> "AttackProtectionClient":
+ return self._api.attack_protection
+
+ @property
+ def branding(self) -> "BrandingClient":
+ return self._api.branding
+
+ @property
+ def client_grants(self) -> "ClientGrantsClient":
+ return self._api.client_grants
+
+ @property
+ def clients(self) -> "ClientsClient":
+ return self._api.clients
+
+ @property
+ def connections(self) -> "ConnectionsClient":
+ return self._api.connections
+
+ @property
+ def custom_domains(self) -> "CustomDomainsClient":
+ return self._api.custom_domains
+
+ @property
+ def device_credentials(self) -> "DeviceCredentialsClient":
+ return self._api.device_credentials
+
+ @property
+ def email_templates(self) -> "EmailTemplatesClient":
+ return self._api.email_templates
+
+ @property
+ def emails(self) -> "EmailsClient":
+ return self._api.emails
+
+ @property
+ def event_streams(self) -> "EventStreamsClient":
+ return self._api.event_streams
+
+ @property
+ def flows(self) -> "FlowsClient":
+ return self._api.flows
+
+ @property
+ def forms(self) -> "FormsClient":
+ return self._api.forms
+
+ @property
+ def guardian(self) -> "GuardianClient":
+ return self._api.guardian
+
+ @property
+ def hooks(self) -> "HooksClient":
+ return self._api.hooks
+
+ @property
+ def jobs(self) -> "JobsClient":
+ return self._api.jobs
+
+ @property
+ def keys(self) -> "KeysClient":
+ return self._api.keys
+
+ @property
+ def log_streams(self) -> "LogStreamsClient":
+ return self._api.log_streams
+
+ @property
+ def logs(self) -> "LogsClient":
+ return self._api.logs
+
+ @property
+ def network_acls(self) -> "NetworkAclsClient":
+ return self._api.network_acls
+
+ @property
+ def organizations(self) -> "OrganizationsClient":
+ return self._api.organizations
+
+ @property
+ def prompts(self) -> "PromptsClient":
+ return self._api.prompts
+
+ @property
+ def refresh_tokens(self) -> "RefreshTokensClient":
+ return self._api.refresh_tokens
+
+ @property
+ def resource_servers(self) -> "ResourceServersClient":
+ return self._api.resource_servers
+
+ @property
+ def roles(self) -> "RolesClient":
+ return self._api.roles
+
+ @property
+ def rules(self) -> "RulesClient":
+ return self._api.rules
+
+ @property
+ def rules_configs(self) -> "RulesConfigsClient":
+ return self._api.rules_configs
+
+ @property
+ def self_service_profiles(self) -> "SelfServiceProfilesClient":
+ return self._api.self_service_profiles
+
+ @property
+ def sessions(self) -> "SessionsClient":
+ return self._api.sessions
+
+ @property
+ def stats(self) -> "StatsClient":
+ return self._api.stats
+
+ @property
+ def supplemental_signals(self) -> "SupplementalSignalsClient":
+ return self._api.supplemental_signals
+
+ @property
+ def tenants(self) -> "TenantsClient":
+ return self._api.tenants
+
+ @property
+ def tickets(self) -> "TicketsClient":
+ return self._api.tickets
+
+ @property
+ def token_exchange_profiles(self) -> "TokenExchangeProfilesClient":
+ return self._api.token_exchange_profiles
+
+ @property
+ def user_blocks(self) -> "UserBlocksClient":
+ return self._api.user_blocks
+
+ @property
+ def user_grants(self) -> "UserGrantsClient":
+ return self._api.user_grants
+
+ @property
+ def users(self) -> "UsersClient":
+ return self._api.users
+
+ @property
+ def verifiable_credentials(self) -> "VerifiableCredentialsClient":
+ return self._api.verifiable_credentials
+
+
+class AsyncManagementClient:
+ """
+ Async Auth0 Management API client with automatic token management.
+
+ Supports two initialization patterns:
+
+ 1. With an existing token:
+
+ client = AsyncManagementClient(
+ domain="tenant.auth0.com",
+ token="your_token"
+ )
+
+ 2. With client credentials (automatic token acquisition and refresh):
+
+ client = AsyncManagementClient(
+ domain="tenant.auth0.com",
+ client_id="your_client_id",
+ client_secret="your_client_secret"
+ )
+
+ Parameters
+ ----------
+ domain : str
+ Your Auth0 domain (e.g., "your-tenant.auth0.com").
+ token : Optional[Union[str, Callable[[], str]]]
+ A static token string or a callable that returns a token.
+ Required if client_id/client_secret are not provided.
+ client_id : Optional[str]
+ Your Auth0 application client ID.
+ Required along with client_secret for automatic token acquisition.
+ client_secret : Optional[str]
+ Your Auth0 application client secret.
+ Required along with client_id for automatic token acquisition.
+ audience : Optional[str]
+ The API audience. Defaults to https://{domain}/api/v2/
+ headers : Optional[Dict[str, str]]
+ Additional headers to send with requests.
+ timeout : Optional[float]
+ Request timeout in seconds. Defaults to 60.
+ httpx_client : Optional[httpx.AsyncClient]
+ Custom httpx async client for requests.
+
+ Raises
+ ------
+ ValueError
+ If neither token nor client_id/client_secret are provided.
+ """
+
+ def __init__(
+ self,
+ *,
+ domain: str,
+ token: Optional[Union[str, Callable[[], str]]] = None,
+ client_id: Optional[str] = None,
+ client_secret: Optional[str] = None,
+ audience: Optional[str] = None,
+ headers: Optional[Dict[str, str]] = None,
+ timeout: Optional[float] = None,
+ httpx_client: Optional[httpx.AsyncClient] = None,
+ ):
+ # Validate auth options
+ has_token = token is not None
+ has_credentials = client_id is not None and client_secret is not None
+
+ if not has_token and not has_credentials:
+ raise ValueError("Either 'token' or both 'client_id' and 'client_secret' must be provided")
+
+ # Create token supplier
+ # Note: AsyncAuth0Api expects a sync callable for token, so we use
+ # the sync TokenProvider. This is safe because httpx sync calls work
+ # in async contexts.
+ if has_credentials and not has_token:
+ provider = TokenProvider(
+ domain=domain,
+ client_id=client_id, # type: ignore[arg-type]
+ client_secret=client_secret, # type: ignore[arg-type]
+ audience=audience,
+ )
+ resolved_token: Union[str, Callable[[], str]] = provider.get_token
+ else:
+ resolved_token = token # type: ignore[assignment]
+
+ # Create underlying client
+ self._api = AsyncAuth0(
+ base_url=f"https://{domain}/api/v2",
+ token=resolved_token,
+ headers=headers,
+ timeout=timeout,
+ httpx_client=httpx_client,
+ )
+
+ # Forward all sub-client properties
+ @property
+ def actions(self) -> "AsyncActionsClient":
+ return self._api.actions
+
+ @property
+ def anomaly(self) -> "AsyncAnomalyClient":
+ return self._api.anomaly
+
+ @property
+ def attack_protection(self) -> "AsyncAttackProtectionClient":
+ return self._api.attack_protection
+
+ @property
+ def branding(self) -> "AsyncBrandingClient":
+ return self._api.branding
+
+ @property
+ def client_grants(self) -> "AsyncClientGrantsClient":
+ return self._api.client_grants
+
+ @property
+ def clients(self) -> "AsyncClientsClient":
+ return self._api.clients
+
+ @property
+ def connections(self) -> "AsyncConnectionsClient":
+ return self._api.connections
+
+ @property
+ def custom_domains(self) -> "AsyncCustomDomainsClient":
+ return self._api.custom_domains
+
+ @property
+ def device_credentials(self) -> "AsyncDeviceCredentialsClient":
+ return self._api.device_credentials
+
+ @property
+ def email_templates(self) -> "AsyncEmailTemplatesClient":
+ return self._api.email_templates
+
+ @property
+ def emails(self) -> "AsyncEmailsClient":
+ return self._api.emails
+
+ @property
+ def event_streams(self) -> "AsyncEventStreamsClient":
+ return self._api.event_streams
+
+ @property
+ def flows(self) -> "AsyncFlowsClient":
+ return self._api.flows
+
+ @property
+ def forms(self) -> "AsyncFormsClient":
+ return self._api.forms
+
+ @property
+ def guardian(self) -> "AsyncGuardianClient":
+ return self._api.guardian
+
+ @property
+ def hooks(self) -> "AsyncHooksClient":
+ return self._api.hooks
+
+ @property
+ def jobs(self) -> "AsyncJobsClient":
+ return self._api.jobs
+
+ @property
+ def keys(self) -> "AsyncKeysClient":
+ return self._api.keys
+
+ @property
+ def log_streams(self) -> "AsyncLogStreamsClient":
+ return self._api.log_streams
+
+ @property
+ def logs(self) -> "AsyncLogsClient":
+ return self._api.logs
+
+ @property
+ def network_acls(self) -> "AsyncNetworkAclsClient":
+ return self._api.network_acls
+
+ @property
+ def organizations(self) -> "AsyncOrganizationsClient":
+ return self._api.organizations
+
+ @property
+ def prompts(self) -> "AsyncPromptsClient":
+ return self._api.prompts
+
+ @property
+ def refresh_tokens(self) -> "AsyncRefreshTokensClient":
+ return self._api.refresh_tokens
+
+ @property
+ def resource_servers(self) -> "AsyncResourceServersClient":
+ return self._api.resource_servers
+
+ @property
+ def roles(self) -> "AsyncRolesClient":
+ return self._api.roles
+
+ @property
+ def rules(self) -> "AsyncRulesClient":
+ return self._api.rules
+
+ @property
+ def rules_configs(self) -> "AsyncRulesConfigsClient":
+ return self._api.rules_configs
+
+ @property
+ def self_service_profiles(self) -> "AsyncSelfServiceProfilesClient":
+ return self._api.self_service_profiles
+
+ @property
+ def sessions(self) -> "AsyncSessionsClient":
+ return self._api.sessions
+
+ @property
+ def stats(self) -> "AsyncStatsClient":
+ return self._api.stats
+
+ @property
+ def supplemental_signals(self) -> "AsyncSupplementalSignalsClient":
+ return self._api.supplemental_signals
+
+ @property
+ def tenants(self) -> "AsyncTenantsClient":
+ return self._api.tenants
+
+ @property
+ def tickets(self) -> "AsyncTicketsClient":
+ return self._api.tickets
+
+ @property
+ def token_exchange_profiles(self) -> "AsyncTokenExchangeProfilesClient":
+ return self._api.token_exchange_profiles
+
+ @property
+ def user_blocks(self) -> "AsyncUserBlocksClient":
+ return self._api.user_blocks
+
+ @property
+ def user_grants(self) -> "AsyncUserGrantsClient":
+ return self._api.user_grants
+
+ @property
+ def users(self) -> "AsyncUsersClient":
+ return self._api.users
+
+ @property
+ def verifiable_credentials(self) -> "AsyncVerifiableCredentialsClient":
+ return self._api.verifiable_credentials
diff --git a/src/auth0/management/network_acls/__init__.py b/src/auth0/management/network_acls/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/network_acls/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/network_acls/client.py b/src/auth0/management/network_acls/client.py
new file mode 100644
index 00000000..1dfa607e
--- /dev/null
+++ b/src/auth0/management/network_acls/client.py
@@ -0,0 +1,654 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.get_network_acls_response_content import GetNetworkAclsResponseContent
+from ..types.list_network_acls_offset_paginated_response_content import ListNetworkAclsOffsetPaginatedResponseContent
+from ..types.network_acl_rule import NetworkAclRule
+from ..types.network_acls_response_content import NetworkAclsResponseContent
+from ..types.set_network_acls_response_content import SetNetworkAclsResponseContent
+from ..types.update_network_acl_response_content import UpdateNetworkAclResponseContent
+from .raw_client import AsyncRawNetworkAclsClient, RawNetworkAclsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class NetworkAclsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawNetworkAclsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawNetworkAclsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawNetworkAclsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[NetworkAclsResponseContent, ListNetworkAclsOffsetPaginatedResponseContent]:
+ """
+ Get all access control list entries for your client.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Use this field to request a specific page of the list results.
+
+ per_page : typing.Optional[int]
+ The amount of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[NetworkAclsResponseContent, ListNetworkAclsOffsetPaginatedResponseContent]
+ Network access control list successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.network_acls.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ def create(
+ self,
+ *,
+ description: str,
+ active: bool,
+ priority: float,
+ rule: NetworkAclRule,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Create a new access control list for your client.
+
+ Parameters
+ ----------
+ description : str
+
+ active : bool
+ Indicates whether or not this access control list is actively being used
+
+ priority : float
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : NetworkAclRule
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0, NetworkAclAction, NetworkAclRule
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.network_acls.create(
+ description="description",
+ active=True,
+ priority=1.1,
+ rule=NetworkAclRule(
+ action=NetworkAclAction(),
+ scope="management",
+ ),
+ )
+ """
+ _response = self._raw_client.create(
+ description=description, active=active, priority=priority, rule=rule, request_options=request_options
+ )
+ return _response.data
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetNetworkAclsResponseContent:
+ """
+ Get a specific access control list entry for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the access control list to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetNetworkAclsResponseContent
+ Network access control list successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.network_acls.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def set(
+ self,
+ id: str,
+ *,
+ description: str,
+ active: bool,
+ priority: float,
+ rule: NetworkAclRule,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SetNetworkAclsResponseContent:
+ """
+ Update existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to update.
+
+ description : str
+
+ active : bool
+ Indicates whether or not this access control list is actively being used
+
+ priority : float
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : NetworkAclRule
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetNetworkAclsResponseContent
+ Network ACL properties successfully updated
+
+ Examples
+ --------
+ from auth0 import Auth0, NetworkAclAction, NetworkAclRule
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.network_acls.set(
+ id="id",
+ description="description",
+ active=True,
+ priority=1.1,
+ rule=NetworkAclRule(
+ action=NetworkAclAction(),
+ scope="management",
+ ),
+ )
+ """
+ _response = self._raw_client.set(
+ id, description=description, active=active, priority=priority, rule=rule, request_options=request_options
+ )
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.network_acls.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ description: typing.Optional[str] = OMIT,
+ active: typing.Optional[bool] = OMIT,
+ priority: typing.Optional[float] = OMIT,
+ rule: typing.Optional[NetworkAclRule] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateNetworkAclResponseContent:
+ """
+ Update existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to update.
+
+ description : typing.Optional[str]
+
+ active : typing.Optional[bool]
+ Indicates whether or not this access control list is actively being used
+
+ priority : typing.Optional[float]
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : typing.Optional[NetworkAclRule]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateNetworkAclResponseContent
+ Network ACL properties successfully updated
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.network_acls.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id, description=description, active=active, priority=priority, rule=rule, request_options=request_options
+ )
+ return _response.data
+
+
+class AsyncNetworkAclsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawNetworkAclsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawNetworkAclsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawNetworkAclsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[NetworkAclsResponseContent, ListNetworkAclsOffsetPaginatedResponseContent]:
+ """
+ Get all access control list entries for your client.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Use this field to request a specific page of the list results.
+
+ per_page : typing.Optional[int]
+ The amount of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[NetworkAclsResponseContent, ListNetworkAclsOffsetPaginatedResponseContent]
+ Network access control list successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.network_acls.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ async def create(
+ self,
+ *,
+ description: str,
+ active: bool,
+ priority: float,
+ rule: NetworkAclRule,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Create a new access control list for your client.
+
+ Parameters
+ ----------
+ description : str
+
+ active : bool
+ Indicates whether or not this access control list is actively being used
+
+ priority : float
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : NetworkAclRule
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, NetworkAclAction, NetworkAclRule
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.network_acls.create(
+ description="description",
+ active=True,
+ priority=1.1,
+ rule=NetworkAclRule(
+ action=NetworkAclAction(),
+ scope="management",
+ ),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ description=description, active=active, priority=priority, rule=rule, request_options=request_options
+ )
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetNetworkAclsResponseContent:
+ """
+ Get a specific access control list entry for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the access control list to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetNetworkAclsResponseContent
+ Network access control list successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.network_acls.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def set(
+ self,
+ id: str,
+ *,
+ description: str,
+ active: bool,
+ priority: float,
+ rule: NetworkAclRule,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SetNetworkAclsResponseContent:
+ """
+ Update existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to update.
+
+ description : str
+
+ active : bool
+ Indicates whether or not this access control list is actively being used
+
+ priority : float
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : NetworkAclRule
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetNetworkAclsResponseContent
+ Network ACL properties successfully updated
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, NetworkAclAction, NetworkAclRule
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.network_acls.set(
+ id="id",
+ description="description",
+ active=True,
+ priority=1.1,
+ rule=NetworkAclRule(
+ action=NetworkAclAction(),
+ scope="management",
+ ),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.set(
+ id, description=description, active=active, priority=priority, rule=rule, request_options=request_options
+ )
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.network_acls.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ description: typing.Optional[str] = OMIT,
+ active: typing.Optional[bool] = OMIT,
+ priority: typing.Optional[float] = OMIT,
+ rule: typing.Optional[NetworkAclRule] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateNetworkAclResponseContent:
+ """
+ Update existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to update.
+
+ description : typing.Optional[str]
+
+ active : typing.Optional[bool]
+ Indicates whether or not this access control list is actively being used
+
+ priority : typing.Optional[float]
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : typing.Optional[NetworkAclRule]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateNetworkAclResponseContent
+ Network ACL properties successfully updated
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.network_acls.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id, description=description, active=active, priority=priority, rule=rule, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/network_acls/raw_client.py b/src/auth0/management/network_acls/raw_client.py
new file mode 100644
index 00000000..933a2891
--- /dev/null
+++ b/src/auth0/management/network_acls/raw_client.py
@@ -0,0 +1,1332 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.internal_server_error import InternalServerError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.get_network_acls_response_content import GetNetworkAclsResponseContent
+from ..types.list_network_acls_offset_paginated_response_content import ListNetworkAclsOffsetPaginatedResponseContent
+from ..types.network_acl_rule import NetworkAclRule
+from ..types.network_acls_response_content import NetworkAclsResponseContent
+from ..types.set_network_acls_response_content import SetNetworkAclsResponseContent
+from ..types.update_network_acl_response_content import UpdateNetworkAclResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawNetworkAclsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[NetworkAclsResponseContent, ListNetworkAclsOffsetPaginatedResponseContent]:
+ """
+ Get all access control list entries for your client.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Use this field to request a specific page of the list results.
+
+ per_page : typing.Optional[int]
+ The amount of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[NetworkAclsResponseContent, ListNetworkAclsOffsetPaginatedResponseContent]
+ Network access control list successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "network-acls",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListNetworkAclsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListNetworkAclsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.network_acls
+ _has_next = True
+ _get_next = lambda: self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ description: str,
+ active: bool,
+ priority: float,
+ rule: NetworkAclRule,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Create a new access control list for your client.
+
+ Parameters
+ ----------
+ description : str
+
+ active : bool
+ Indicates whether or not this access control list is actively being used
+
+ priority : float
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : NetworkAclRule
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "network-acls",
+ method="POST",
+ json={
+ "description": description,
+ "active": active,
+ "priority": priority,
+ "rule": convert_and_respect_annotation_metadata(
+ object_=rule, annotation=NetworkAclRule, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetNetworkAclsResponseContent]:
+ """
+ Get a specific access control list entry for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the access control list to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetNetworkAclsResponseContent]
+ Network access control list successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"network-acls/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetNetworkAclsResponseContent,
+ parse_obj_as(
+ type_=GetNetworkAclsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def set(
+ self,
+ id: str,
+ *,
+ description: str,
+ active: bool,
+ priority: float,
+ rule: NetworkAclRule,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[SetNetworkAclsResponseContent]:
+ """
+ Update existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to update.
+
+ description : str
+
+ active : bool
+ Indicates whether or not this access control list is actively being used
+
+ priority : float
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : NetworkAclRule
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[SetNetworkAclsResponseContent]
+ Network ACL properties successfully updated
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"network-acls/{jsonable_encoder(id)}",
+ method="PUT",
+ json={
+ "description": description,
+ "active": active,
+ "priority": priority,
+ "rule": convert_and_respect_annotation_metadata(
+ object_=rule, annotation=NetworkAclRule, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetNetworkAclsResponseContent,
+ parse_obj_as(
+ type_=SetNetworkAclsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"network-acls/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ description: typing.Optional[str] = OMIT,
+ active: typing.Optional[bool] = OMIT,
+ priority: typing.Optional[float] = OMIT,
+ rule: typing.Optional[NetworkAclRule] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateNetworkAclResponseContent]:
+ """
+ Update existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to update.
+
+ description : typing.Optional[str]
+
+ active : typing.Optional[bool]
+ Indicates whether or not this access control list is actively being used
+
+ priority : typing.Optional[float]
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : typing.Optional[NetworkAclRule]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateNetworkAclResponseContent]
+ Network ACL properties successfully updated
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"network-acls/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "description": description,
+ "active": active,
+ "priority": priority,
+ "rule": convert_and_respect_annotation_metadata(
+ object_=rule, annotation=NetworkAclRule, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateNetworkAclResponseContent,
+ parse_obj_as(
+ type_=UpdateNetworkAclResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawNetworkAclsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[NetworkAclsResponseContent, ListNetworkAclsOffsetPaginatedResponseContent]:
+ """
+ Get all access control list entries for your client.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Use this field to request a specific page of the list results.
+
+ per_page : typing.Optional[int]
+ The amount of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[NetworkAclsResponseContent, ListNetworkAclsOffsetPaginatedResponseContent]
+ Network access control list successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "network-acls",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListNetworkAclsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListNetworkAclsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.network_acls
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ description: str,
+ active: bool,
+ priority: float,
+ rule: NetworkAclRule,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Create a new access control list for your client.
+
+ Parameters
+ ----------
+ description : str
+
+ active : bool
+ Indicates whether or not this access control list is actively being used
+
+ priority : float
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : NetworkAclRule
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "network-acls",
+ method="POST",
+ json={
+ "description": description,
+ "active": active,
+ "priority": priority,
+ "rule": convert_and_respect_annotation_metadata(
+ object_=rule, annotation=NetworkAclRule, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetNetworkAclsResponseContent]:
+ """
+ Get a specific access control list entry for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the access control list to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetNetworkAclsResponseContent]
+ Network access control list successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"network-acls/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetNetworkAclsResponseContent,
+ parse_obj_as(
+ type_=GetNetworkAclsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def set(
+ self,
+ id: str,
+ *,
+ description: str,
+ active: bool,
+ priority: float,
+ rule: NetworkAclRule,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[SetNetworkAclsResponseContent]:
+ """
+ Update existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to update.
+
+ description : str
+
+ active : bool
+ Indicates whether or not this access control list is actively being used
+
+ priority : float
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : NetworkAclRule
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[SetNetworkAclsResponseContent]
+ Network ACL properties successfully updated
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"network-acls/{jsonable_encoder(id)}",
+ method="PUT",
+ json={
+ "description": description,
+ "active": active,
+ "priority": priority,
+ "rule": convert_and_respect_annotation_metadata(
+ object_=rule, annotation=NetworkAclRule, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetNetworkAclsResponseContent,
+ parse_obj_as(
+ type_=SetNetworkAclsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"network-acls/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ description: typing.Optional[str] = OMIT,
+ active: typing.Optional[bool] = OMIT,
+ priority: typing.Optional[float] = OMIT,
+ rule: typing.Optional[NetworkAclRule] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateNetworkAclResponseContent]:
+ """
+ Update existing access control list for your client.
+
+ Parameters
+ ----------
+ id : str
+ The id of the ACL to update.
+
+ description : typing.Optional[str]
+
+ active : typing.Optional[bool]
+ Indicates whether or not this access control list is actively being used
+
+ priority : typing.Optional[float]
+ Indicates the order in which the ACL will be evaluated relative to other ACL rules.
+
+ rule : typing.Optional[NetworkAclRule]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateNetworkAclResponseContent]
+ Network ACL properties successfully updated
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"network-acls/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "description": description,
+ "active": active,
+ "priority": priority,
+ "rule": convert_and_respect_annotation_metadata(
+ object_=rule, annotation=NetworkAclRule, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateNetworkAclResponseContent,
+ parse_obj_as(
+ type_=UpdateNetworkAclResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/organizations/__init__.py b/src/auth0/management/organizations/__init__.py
new file mode 100644
index 00000000..5b708c76
--- /dev/null
+++ b/src/auth0/management/organizations/__init__.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import client_grants, discovery_domains, enabled_connections, invitations, members
+_dynamic_imports: typing.Dict[str, str] = {
+ "client_grants": ".client_grants",
+ "discovery_domains": ".discovery_domains",
+ "enabled_connections": ".enabled_connections",
+ "invitations": ".invitations",
+ "members": ".members",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["client_grants", "discovery_domains", "enabled_connections", "invitations", "members"]
diff --git a/src/auth0/management/organizations/client.py b/src/auth0/management/organizations/client.py
new file mode 100644
index 00000000..1bf89735
--- /dev/null
+++ b/src/auth0/management/organizations/client.py
@@ -0,0 +1,779 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.connection_for_organization import ConnectionForOrganization
+from ..types.create_organization_response_content import CreateOrganizationResponseContent
+from ..types.create_token_quota import CreateTokenQuota
+from ..types.get_organization_by_name_response_content import GetOrganizationByNameResponseContent
+from ..types.get_organization_response_content import GetOrganizationResponseContent
+from ..types.list_organizations_paginated_response_content import ListOrganizationsPaginatedResponseContent
+from ..types.organization import Organization
+from ..types.organization_branding import OrganizationBranding
+from ..types.organization_metadata import OrganizationMetadata
+from ..types.update_organization_response_content import UpdateOrganizationResponseContent
+from ..types.update_token_quota import UpdateTokenQuota
+from .raw_client import AsyncRawOrganizationsClient, RawOrganizationsClient
+
+if typing.TYPE_CHECKING:
+ from .client_grants.client import AsyncClientGrantsClient, ClientGrantsClient
+ from .discovery_domains.client import AsyncDiscoveryDomainsClient, DiscoveryDomainsClient
+ from .enabled_connections.client import AsyncEnabledConnectionsClient, EnabledConnectionsClient
+ from .invitations.client import AsyncInvitationsClient, InvitationsClient
+ from .members.client import AsyncMembersClient, MembersClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class OrganizationsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawOrganizationsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._client_grants: typing.Optional[ClientGrantsClient] = None
+ self._discovery_domains: typing.Optional[DiscoveryDomainsClient] = None
+ self._enabled_connections: typing.Optional[EnabledConnectionsClient] = None
+ self._invitations: typing.Optional[InvitationsClient] = None
+ self._members: typing.Optional[MembersClient] = None
+
+ @property
+ def with_raw_response(self) -> RawOrganizationsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawOrganizationsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Organization, ListOrganizationsPaginatedResponseContent]:
+ """
+ Retrieve detailed list of all Organizations available in your tenant. For more information, see Auth0 Organizations.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total number of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1. We currently support sorting by the following fields: name, display_name and created_at.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Organization, ListOrganizationsPaginatedResponseContent]
+ Organizations successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.organizations.list(
+ from_="from",
+ take=1,
+ sort="sort",
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(from_=from_, take=take, sort=sort, request_options=request_options)
+
+ def create(
+ self,
+ *,
+ name: str = "organization-1",
+ display_name: typing.Optional[str] = "Acme Users",
+ branding: typing.Optional[OrganizationBranding] = OMIT,
+ metadata: typing.Optional[OrganizationMetadata] = OMIT,
+ enabled_connections: typing.Optional[typing.Sequence[ConnectionForOrganization]] = OMIT,
+ token_quota: typing.Optional[CreateTokenQuota] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateOrganizationResponseContent:
+ """
+ Create a new Organization within your tenant. To learn more about Organization settings, behavior, and configuration options, review Create Your First Organization.
+
+ Parameters
+ ----------
+ name : str
+ The name of this organization.
+
+ display_name : typing.Optional[str]
+ Friendly name of this organization.
+
+ branding : typing.Optional[OrganizationBranding]
+
+ metadata : typing.Optional[OrganizationMetadata]
+
+ enabled_connections : typing.Optional[typing.Sequence[ConnectionForOrganization]]
+ Connections that will be enabled for this organization. See POST enabled_connections endpoint for the object format. (Max of 10 connections allowed)
+
+ token_quota : typing.Optional[CreateTokenQuota]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateOrganizationResponseContent
+ Organization successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.create(
+ name="name",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name,
+ display_name=display_name,
+ branding=branding,
+ metadata=metadata,
+ enabled_connections=enabled_connections,
+ token_quota=token_quota,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get_by_name(
+ self, name: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetOrganizationByNameResponseContent:
+ """
+ Retrieve details about a single Organization specified by name.
+
+ Parameters
+ ----------
+ name : str
+ name of the organization to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationByNameResponseContent
+ Organization successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.get_by_name(
+ name="name",
+ )
+ """
+ _response = self._raw_client.get_by_name(name, request_options=request_options)
+ return _response.data
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetOrganizationResponseContent:
+ """
+ Retrieve details about a single Organization specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationResponseContent
+ Organization successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Remove an Organization from your tenant. This action cannot be undone.
+
+ Note: Members are automatically disassociated from an Organization when it is deleted. However, this action does not delete these users from your tenant.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ display_name: typing.Optional[str] = "Acme Users",
+ name: typing.Optional[str] = "organization-1",
+ branding: typing.Optional[OrganizationBranding] = OMIT,
+ metadata: typing.Optional[OrganizationMetadata] = OMIT,
+ token_quota: typing.Optional[UpdateTokenQuota] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateOrganizationResponseContent:
+ """
+ Update the details of a specific Organization, such as name and display name, branding options, and metadata.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization to update.
+
+ display_name : typing.Optional[str]
+ Friendly name of this organization.
+
+ name : typing.Optional[str]
+ The name of this organization.
+
+ branding : typing.Optional[OrganizationBranding]
+
+ metadata : typing.Optional[OrganizationMetadata]
+
+ token_quota : typing.Optional[UpdateTokenQuota]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateOrganizationResponseContent
+ Organization successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ display_name=display_name,
+ name=name,
+ branding=branding,
+ metadata=metadata,
+ token_quota=token_quota,
+ request_options=request_options,
+ )
+ return _response.data
+
+ @property
+ def client_grants(self):
+ if self._client_grants is None:
+ from .client_grants.client import ClientGrantsClient # noqa: E402
+
+ self._client_grants = ClientGrantsClient(client_wrapper=self._client_wrapper)
+ return self._client_grants
+
+ @property
+ def discovery_domains(self):
+ if self._discovery_domains is None:
+ from .discovery_domains.client import DiscoveryDomainsClient # noqa: E402
+
+ self._discovery_domains = DiscoveryDomainsClient(client_wrapper=self._client_wrapper)
+ return self._discovery_domains
+
+ @property
+ def enabled_connections(self):
+ if self._enabled_connections is None:
+ from .enabled_connections.client import EnabledConnectionsClient # noqa: E402
+
+ self._enabled_connections = EnabledConnectionsClient(client_wrapper=self._client_wrapper)
+ return self._enabled_connections
+
+ @property
+ def invitations(self):
+ if self._invitations is None:
+ from .invitations.client import InvitationsClient # noqa: E402
+
+ self._invitations = InvitationsClient(client_wrapper=self._client_wrapper)
+ return self._invitations
+
+ @property
+ def members(self):
+ if self._members is None:
+ from .members.client import MembersClient # noqa: E402
+
+ self._members = MembersClient(client_wrapper=self._client_wrapper)
+ return self._members
+
+
+class AsyncOrganizationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawOrganizationsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._client_grants: typing.Optional[AsyncClientGrantsClient] = None
+ self._discovery_domains: typing.Optional[AsyncDiscoveryDomainsClient] = None
+ self._enabled_connections: typing.Optional[AsyncEnabledConnectionsClient] = None
+ self._invitations: typing.Optional[AsyncInvitationsClient] = None
+ self._members: typing.Optional[AsyncMembersClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawOrganizationsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawOrganizationsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Organization, ListOrganizationsPaginatedResponseContent]:
+ """
+ Retrieve detailed list of all Organizations available in your tenant. For more information, see Auth0 Organizations.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total number of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1. We currently support sorting by the following fields: name, display_name and created_at.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Organization, ListOrganizationsPaginatedResponseContent]
+ Organizations successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.organizations.list(
+ from_="from",
+ take=1,
+ sort="sort",
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(from_=from_, take=take, sort=sort, request_options=request_options)
+
+ async def create(
+ self,
+ *,
+ name: str = "organization-1",
+ display_name: typing.Optional[str] = "Acme Users",
+ branding: typing.Optional[OrganizationBranding] = OMIT,
+ metadata: typing.Optional[OrganizationMetadata] = OMIT,
+ enabled_connections: typing.Optional[typing.Sequence[ConnectionForOrganization]] = OMIT,
+ token_quota: typing.Optional[CreateTokenQuota] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateOrganizationResponseContent:
+ """
+ Create a new Organization within your tenant. To learn more about Organization settings, behavior, and configuration options, review Create Your First Organization.
+
+ Parameters
+ ----------
+ name : str
+ The name of this organization.
+
+ display_name : typing.Optional[str]
+ Friendly name of this organization.
+
+ branding : typing.Optional[OrganizationBranding]
+
+ metadata : typing.Optional[OrganizationMetadata]
+
+ enabled_connections : typing.Optional[typing.Sequence[ConnectionForOrganization]]
+ Connections that will be enabled for this organization. See POST enabled_connections endpoint for the object format. (Max of 10 connections allowed)
+
+ token_quota : typing.Optional[CreateTokenQuota]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateOrganizationResponseContent
+ Organization successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.create(
+ name="name",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name,
+ display_name=display_name,
+ branding=branding,
+ metadata=metadata,
+ enabled_connections=enabled_connections,
+ token_quota=token_quota,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get_by_name(
+ self, name: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetOrganizationByNameResponseContent:
+ """
+ Retrieve details about a single Organization specified by name.
+
+ Parameters
+ ----------
+ name : str
+ name of the organization to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationByNameResponseContent
+ Organization successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.get_by_name(
+ name="name",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_by_name(name, request_options=request_options)
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetOrganizationResponseContent:
+ """
+ Retrieve details about a single Organization specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationResponseContent
+ Organization successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Remove an Organization from your tenant. This action cannot be undone.
+
+ Note: Members are automatically disassociated from an Organization when it is deleted. However, this action does not delete these users from your tenant.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ display_name: typing.Optional[str] = "Acme Users",
+ name: typing.Optional[str] = "organization-1",
+ branding: typing.Optional[OrganizationBranding] = OMIT,
+ metadata: typing.Optional[OrganizationMetadata] = OMIT,
+ token_quota: typing.Optional[UpdateTokenQuota] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateOrganizationResponseContent:
+ """
+ Update the details of a specific Organization, such as name and display name, branding options, and metadata.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization to update.
+
+ display_name : typing.Optional[str]
+ Friendly name of this organization.
+
+ name : typing.Optional[str]
+ The name of this organization.
+
+ branding : typing.Optional[OrganizationBranding]
+
+ metadata : typing.Optional[OrganizationMetadata]
+
+ token_quota : typing.Optional[UpdateTokenQuota]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateOrganizationResponseContent
+ Organization successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ display_name=display_name,
+ name=name,
+ branding=branding,
+ metadata=metadata,
+ token_quota=token_quota,
+ request_options=request_options,
+ )
+ return _response.data
+
+ @property
+ def client_grants(self):
+ if self._client_grants is None:
+ from .client_grants.client import AsyncClientGrantsClient # noqa: E402
+
+ self._client_grants = AsyncClientGrantsClient(client_wrapper=self._client_wrapper)
+ return self._client_grants
+
+ @property
+ def discovery_domains(self):
+ if self._discovery_domains is None:
+ from .discovery_domains.client import AsyncDiscoveryDomainsClient # noqa: E402
+
+ self._discovery_domains = AsyncDiscoveryDomainsClient(client_wrapper=self._client_wrapper)
+ return self._discovery_domains
+
+ @property
+ def enabled_connections(self):
+ if self._enabled_connections is None:
+ from .enabled_connections.client import AsyncEnabledConnectionsClient # noqa: E402
+
+ self._enabled_connections = AsyncEnabledConnectionsClient(client_wrapper=self._client_wrapper)
+ return self._enabled_connections
+
+ @property
+ def invitations(self):
+ if self._invitations is None:
+ from .invitations.client import AsyncInvitationsClient # noqa: E402
+
+ self._invitations = AsyncInvitationsClient(client_wrapper=self._client_wrapper)
+ return self._invitations
+
+ @property
+ def members(self):
+ if self._members is None:
+ from .members.client import AsyncMembersClient # noqa: E402
+
+ self._members = AsyncMembersClient(client_wrapper=self._client_wrapper)
+ return self._members
diff --git a/src/auth0/management/organizations/client_grants/__init__.py b/src/auth0/management/organizations/client_grants/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/organizations/client_grants/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/organizations/client_grants/client.py b/src/auth0/management/organizations/client_grants/client.py
new file mode 100644
index 00000000..4ea7dd87
--- /dev/null
+++ b/src/auth0/management/organizations/client_grants/client.py
@@ -0,0 +1,361 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.associate_organization_client_grant_response_content import (
+ AssociateOrganizationClientGrantResponseContent,
+)
+from ...types.list_organization_client_grants_offset_paginated_response_content import (
+ ListOrganizationClientGrantsOffsetPaginatedResponseContent,
+)
+from ...types.organization_client_grant import OrganizationClientGrant
+from .raw_client import AsyncRawClientGrantsClient, RawClientGrantsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ClientGrantsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawClientGrantsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawClientGrantsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawClientGrantsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ id: str,
+ *,
+ audience: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ grant_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[OrganizationClientGrant, ListOrganizationClientGrantsOffsetPaginatedResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ audience : typing.Optional[str]
+ Optional filter on audience of the client grant.
+
+ client_id : typing.Optional[str]
+ Optional filter on client_id of the client grant.
+
+ grant_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ Optional filter on the ID of the client grant. Must be URL encoded and may be specified multiple times (max 10).status field must be either pending or verified.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ domain : str
+ The domain name to associate with the organization e.g. acme.com.
+
+ status : typing.Optional[OrganizationDiscoveryDomainStatus]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateOrganizationDiscoveryDomainResponseContent
+ Organization discovery domain successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.discovery_domains.create(
+ id="id",
+ domain="domain",
+ )
+ """
+ _response = self._raw_client.create(id, domain=domain, status=status, request_options=request_options)
+ return _response.data
+
+ def get(
+ self, id: str, discovery_domain_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetOrganizationDiscoveryDomainResponseContent:
+ """
+ Retrieve details about a single organization discovery domain specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationDiscoveryDomainResponseContent
+ Organization discovery domain successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.discovery_domains.get(
+ id="id",
+ discovery_domain_id="discovery_domain_id",
+ )
+ """
+ _response = self._raw_client.get(id, discovery_domain_id, request_options=request_options)
+ return _response.data
+
+ def delete(
+ self, id: str, discovery_domain_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Remove a discovery domain from an organization. This action cannot be undone.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.discovery_domains.delete(
+ id="id",
+ discovery_domain_id="discovery_domain_id",
+ )
+ """
+ _response = self._raw_client.delete(id, discovery_domain_id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ discovery_domain_id: str,
+ *,
+ status: typing.Optional[OrganizationDiscoveryDomainStatus] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateOrganizationDiscoveryDomainResponseContent:
+ """
+ Update the verification status for an organization discovery domain. The status field must be either pending or verified.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain to update.
+
+ status : typing.Optional[OrganizationDiscoveryDomainStatus]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateOrganizationDiscoveryDomainResponseContent
+ Organization discovery domain successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.discovery_domains.update(
+ id="id",
+ discovery_domain_id="discovery_domain_id",
+ )
+ """
+ _response = self._raw_client.update(id, discovery_domain_id, status=status, request_options=request_options)
+ return _response.data
+
+
+class AsyncDiscoveryDomainsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawDiscoveryDomainsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawDiscoveryDomainsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawDiscoveryDomainsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[OrganizationDiscoveryDomain, ListOrganizationDiscoveryDomainsResponseContent]:
+ """
+ Retrieve list of all organization discovery domains associated with the specified organization.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[OrganizationDiscoveryDomain, ListOrganizationDiscoveryDomainsResponseContent]
+ Organization discovery domains retrieved successfully.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.organizations.discovery_domains.list(
+ id="id",
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(id, from_=from_, take=take, request_options=request_options)
+
+ async def create(
+ self,
+ id: str,
+ *,
+ domain: str,
+ status: typing.Optional[OrganizationDiscoveryDomainStatus] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateOrganizationDiscoveryDomainResponseContent:
+ """
+ Update the verification status for an organization discovery domain. The status field must be either pending or verified.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ domain : str
+ The domain name to associate with the organization e.g. acme.com.
+
+ status : typing.Optional[OrganizationDiscoveryDomainStatus]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateOrganizationDiscoveryDomainResponseContent
+ Organization discovery domain successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.discovery_domains.create(
+ id="id",
+ domain="domain",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(id, domain=domain, status=status, request_options=request_options)
+ return _response.data
+
+ async def get(
+ self, id: str, discovery_domain_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetOrganizationDiscoveryDomainResponseContent:
+ """
+ Retrieve details about a single organization discovery domain specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationDiscoveryDomainResponseContent
+ Organization discovery domain successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.discovery_domains.get(
+ id="id",
+ discovery_domain_id="discovery_domain_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, discovery_domain_id, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self, id: str, discovery_domain_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Remove a discovery domain from an organization. This action cannot be undone.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.discovery_domains.delete(
+ id="id",
+ discovery_domain_id="discovery_domain_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, discovery_domain_id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ discovery_domain_id: str,
+ *,
+ status: typing.Optional[OrganizationDiscoveryDomainStatus] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateOrganizationDiscoveryDomainResponseContent:
+ """
+ Update the verification status for an organization discovery domain. The status field must be either pending or verified.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain to update.
+
+ status : typing.Optional[OrganizationDiscoveryDomainStatus]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateOrganizationDiscoveryDomainResponseContent
+ Organization discovery domain successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.discovery_domains.update(
+ id="id",
+ discovery_domain_id="discovery_domain_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id, discovery_domain_id, status=status, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/organizations/discovery_domains/raw_client.py b/src/auth0/management/organizations/discovery_domains/raw_client.py
new file mode 100644
index 00000000..1dae03dc
--- /dev/null
+++ b/src/auth0/management/organizations/discovery_domains/raw_client.py
@@ -0,0 +1,1034 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.conflict_error import ConflictError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.create_organization_discovery_domain_response_content import (
+ CreateOrganizationDiscoveryDomainResponseContent,
+)
+from ...types.get_organization_discovery_domain_response_content import GetOrganizationDiscoveryDomainResponseContent
+from ...types.list_organization_discovery_domains_response_content import (
+ ListOrganizationDiscoveryDomainsResponseContent,
+)
+from ...types.organization_discovery_domain import OrganizationDiscoveryDomain
+from ...types.organization_discovery_domain_status import OrganizationDiscoveryDomainStatus
+from ...types.update_organization_discovery_domain_response_content import (
+ UpdateOrganizationDiscoveryDomainResponseContent,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawDiscoveryDomainsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[OrganizationDiscoveryDomain, ListOrganizationDiscoveryDomainsResponseContent]:
+ """
+ Retrieve list of all organization discovery domains associated with the specified organization.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[OrganizationDiscoveryDomain, ListOrganizationDiscoveryDomainsResponseContent]
+ Organization discovery domains retrieved successfully.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationDiscoveryDomainsResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationDiscoveryDomainsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.domains
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ id: str,
+ *,
+ domain: str,
+ status: typing.Optional[OrganizationDiscoveryDomainStatus] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateOrganizationDiscoveryDomainResponseContent]:
+ """
+ Update the verification status for an organization discovery domain. The status field must be either pending or verified.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ domain : str
+ The domain name to associate with the organization e.g. acme.com.
+
+ status : typing.Optional[OrganizationDiscoveryDomainStatus]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateOrganizationDiscoveryDomainResponseContent]
+ Organization discovery domain successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains",
+ method="POST",
+ json={
+ "domain": domain,
+ "status": status,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateOrganizationDiscoveryDomainResponseContent,
+ parse_obj_as(
+ type_=CreateOrganizationDiscoveryDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, discovery_domain_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetOrganizationDiscoveryDomainResponseContent]:
+ """
+ Retrieve details about a single organization discovery domain specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetOrganizationDiscoveryDomainResponseContent]
+ Organization discovery domain successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains/{jsonable_encoder(discovery_domain_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationDiscoveryDomainResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationDiscoveryDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, id: str, discovery_domain_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Remove a discovery domain from an organization. This action cannot be undone.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains/{jsonable_encoder(discovery_domain_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ discovery_domain_id: str,
+ *,
+ status: typing.Optional[OrganizationDiscoveryDomainStatus] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateOrganizationDiscoveryDomainResponseContent]:
+ """
+ Update the verification status for an organization discovery domain. The status field must be either pending or verified.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain to update.
+
+ status : typing.Optional[OrganizationDiscoveryDomainStatus]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateOrganizationDiscoveryDomainResponseContent]
+ Organization discovery domain successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains/{jsonable_encoder(discovery_domain_id)}",
+ method="PATCH",
+ json={
+ "status": status,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateOrganizationDiscoveryDomainResponseContent,
+ parse_obj_as(
+ type_=UpdateOrganizationDiscoveryDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawDiscoveryDomainsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[OrganizationDiscoveryDomain, ListOrganizationDiscoveryDomainsResponseContent]:
+ """
+ Retrieve list of all organization discovery domains associated with the specified organization.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[OrganizationDiscoveryDomain, ListOrganizationDiscoveryDomainsResponseContent]
+ Organization discovery domains retrieved successfully.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationDiscoveryDomainsResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationDiscoveryDomainsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.domains
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ id: str,
+ *,
+ domain: str,
+ status: typing.Optional[OrganizationDiscoveryDomainStatus] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateOrganizationDiscoveryDomainResponseContent]:
+ """
+ Update the verification status for an organization discovery domain. The status field must be either pending or verified.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ domain : str
+ The domain name to associate with the organization e.g. acme.com.
+
+ status : typing.Optional[OrganizationDiscoveryDomainStatus]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateOrganizationDiscoveryDomainResponseContent]
+ Organization discovery domain successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains",
+ method="POST",
+ json={
+ "domain": domain,
+ "status": status,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateOrganizationDiscoveryDomainResponseContent,
+ parse_obj_as(
+ type_=CreateOrganizationDiscoveryDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, discovery_domain_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetOrganizationDiscoveryDomainResponseContent]:
+ """
+ Retrieve details about a single organization discovery domain specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetOrganizationDiscoveryDomainResponseContent]
+ Organization discovery domain successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains/{jsonable_encoder(discovery_domain_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationDiscoveryDomainResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationDiscoveryDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, discovery_domain_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Remove a discovery domain from an organization. This action cannot be undone.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains/{jsonable_encoder(discovery_domain_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ discovery_domain_id: str,
+ *,
+ status: typing.Optional[OrganizationDiscoveryDomainStatus] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateOrganizationDiscoveryDomainResponseContent]:
+ """
+ Update the verification status for an organization discovery domain. The status field must be either pending or verified.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization.
+
+ discovery_domain_id : str
+ ID of the discovery domain to update.
+
+ status : typing.Optional[OrganizationDiscoveryDomainStatus]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateOrganizationDiscoveryDomainResponseContent]
+ Organization discovery domain successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/discovery-domains/{jsonable_encoder(discovery_domain_id)}",
+ method="PATCH",
+ json={
+ "status": status,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateOrganizationDiscoveryDomainResponseContent,
+ parse_obj_as(
+ type_=UpdateOrganizationDiscoveryDomainResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/organizations/enabled_connections/__init__.py b/src/auth0/management/organizations/enabled_connections/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/organizations/enabled_connections/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/organizations/enabled_connections/client.py b/src/auth0/management/organizations/enabled_connections/client.py
new file mode 100644
index 00000000..2c94dc98
--- /dev/null
+++ b/src/auth0/management/organizations/enabled_connections/client.py
@@ -0,0 +1,597 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.add_organization_connection_response_content import AddOrganizationConnectionResponseContent
+from ...types.get_organization_connection_response_content import GetOrganizationConnectionResponseContent
+from ...types.list_organization_connections_offset_paginated_response_content import (
+ ListOrganizationConnectionsOffsetPaginatedResponseContent,
+)
+from ...types.organization_connection import OrganizationConnection
+from ...types.update_organization_connection_response_content import UpdateOrganizationConnectionResponseContent
+from .raw_client import AsyncRawEnabledConnectionsClient, RawEnabledConnectionsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class EnabledConnectionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawEnabledConnectionsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawEnabledConnectionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawEnabledConnectionsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[OrganizationConnection, ListOrganizationConnectionsOffsetPaginatedResponseContent]:
+ """
+ Retrieve details about a specific connection currently enabled for an Organization. Information returned includes details such as connection ID, name, strategy, and whether the connection automatically grants membership upon login.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[OrganizationConnection, ListOrganizationConnectionsOffsetPaginatedResponseContent]
+ Connections successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.organizations.enabled_connections.list(
+ id="id",
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ id, page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ def add(
+ self,
+ id: str,
+ *,
+ connection_id: str,
+ assign_membership_on_login: typing.Optional[bool] = OMIT,
+ is_signup_enabled: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AddOrganizationConnectionResponseContent:
+ """
+ Enable a specific connection for a given Organization. To enable a connection, it must already exist within your tenant; connections cannot be created through this action.
+
+ Connections represent the relationship between Auth0 and a source of users. Available types of connections include database, enterprise, and social.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Single connection ID to add to the organization.
+
+ assign_membership_on_login : typing.Optional[bool]
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+
+ is_signup_enabled : typing.Optional[bool]
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+
+ show_as_button : typing.Optional[bool]
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AddOrganizationConnectionResponseContent
+ Organization connection successfully added.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.enabled_connections.add(
+ id="id",
+ connection_id="connection_id",
+ )
+ """
+ _response = self._raw_client.add(
+ id,
+ connection_id=connection_id,
+ assign_membership_on_login=assign_membership_on_login,
+ is_signup_enabled=is_signup_enabled,
+ show_as_button=show_as_button,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self, id: str, connection_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetOrganizationConnectionResponseContent:
+ """
+ Retrieve details about a specific connection currently enabled for an Organization. Information returned includes details such as connection ID, name, strategy, and whether the connection automatically grants membership upon login.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationConnectionResponseContent
+ Connection successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.enabled_connections.get(
+ id="id",
+ connection_id="connectionId",
+ )
+ """
+ _response = self._raw_client.get(id, connection_id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, connection_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Disable a specific connection for an Organization. Once disabled, Organization members can no longer use that connection to authenticate.
+
+ Note: This action does not remove the connection from your tenant.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.enabled_connections.delete(
+ id="id",
+ connection_id="connectionId",
+ )
+ """
+ _response = self._raw_client.delete(id, connection_id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ connection_id: str,
+ *,
+ assign_membership_on_login: typing.Optional[bool] = OMIT,
+ is_signup_enabled: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateOrganizationConnectionResponseContent:
+ """
+ Modify the details of a specific connection currently enabled for an Organization.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ assign_membership_on_login : typing.Optional[bool]
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+
+ is_signup_enabled : typing.Optional[bool]
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+
+ show_as_button : typing.Optional[bool]
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateOrganizationConnectionResponseContent
+ Organization connection successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.enabled_connections.update(
+ id="id",
+ connection_id="connectionId",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ connection_id,
+ assign_membership_on_login=assign_membership_on_login,
+ is_signup_enabled=is_signup_enabled,
+ show_as_button=show_as_button,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncEnabledConnectionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawEnabledConnectionsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawEnabledConnectionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawEnabledConnectionsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[OrganizationConnection, ListOrganizationConnectionsOffsetPaginatedResponseContent]:
+ """
+ Retrieve details about a specific connection currently enabled for an Organization. Information returned includes details such as connection ID, name, strategy, and whether the connection automatically grants membership upon login.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[OrganizationConnection, ListOrganizationConnectionsOffsetPaginatedResponseContent]
+ Connections successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.organizations.enabled_connections.list(
+ id="id",
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ id, page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ async def add(
+ self,
+ id: str,
+ *,
+ connection_id: str,
+ assign_membership_on_login: typing.Optional[bool] = OMIT,
+ is_signup_enabled: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AddOrganizationConnectionResponseContent:
+ """
+ Enable a specific connection for a given Organization. To enable a connection, it must already exist within your tenant; connections cannot be created through this action.
+
+ Connections represent the relationship between Auth0 and a source of users. Available types of connections include database, enterprise, and social.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Single connection ID to add to the organization.
+
+ assign_membership_on_login : typing.Optional[bool]
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+
+ is_signup_enabled : typing.Optional[bool]
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+
+ show_as_button : typing.Optional[bool]
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AddOrganizationConnectionResponseContent
+ Organization connection successfully added.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.enabled_connections.add(
+ id="id",
+ connection_id="connection_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.add(
+ id,
+ connection_id=connection_id,
+ assign_membership_on_login=assign_membership_on_login,
+ is_signup_enabled=is_signup_enabled,
+ show_as_button=show_as_button,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self, id: str, connection_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetOrganizationConnectionResponseContent:
+ """
+ Retrieve details about a specific connection currently enabled for an Organization. Information returned includes details such as connection ID, name, strategy, and whether the connection automatically grants membership upon login.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationConnectionResponseContent
+ Connection successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.enabled_connections.get(
+ id="id",
+ connection_id="connectionId",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, connection_id, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self, id: str, connection_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Disable a specific connection for an Organization. Once disabled, Organization members can no longer use that connection to authenticate.
+
+ Note: This action does not remove the connection from your tenant.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.enabled_connections.delete(
+ id="id",
+ connection_id="connectionId",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, connection_id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ connection_id: str,
+ *,
+ assign_membership_on_login: typing.Optional[bool] = OMIT,
+ is_signup_enabled: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateOrganizationConnectionResponseContent:
+ """
+ Modify the details of a specific connection currently enabled for an Organization.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ assign_membership_on_login : typing.Optional[bool]
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+
+ is_signup_enabled : typing.Optional[bool]
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+
+ show_as_button : typing.Optional[bool]
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateOrganizationConnectionResponseContent
+ Organization connection successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.enabled_connections.update(
+ id="id",
+ connection_id="connectionId",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ connection_id,
+ assign_membership_on_login=assign_membership_on_login,
+ is_signup_enabled=is_signup_enabled,
+ show_as_button=show_as_button,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/organizations/enabled_connections/raw_client.py b/src/auth0/management/organizations/enabled_connections/raw_client.py
new file mode 100644
index 00000000..720eca5b
--- /dev/null
+++ b/src/auth0/management/organizations/enabled_connections/raw_client.py
@@ -0,0 +1,1027 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.add_organization_connection_response_content import AddOrganizationConnectionResponseContent
+from ...types.get_organization_connection_response_content import GetOrganizationConnectionResponseContent
+from ...types.list_organization_connections_offset_paginated_response_content import (
+ ListOrganizationConnectionsOffsetPaginatedResponseContent,
+)
+from ...types.organization_connection import OrganizationConnection
+from ...types.update_organization_connection_response_content import UpdateOrganizationConnectionResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawEnabledConnectionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[OrganizationConnection, ListOrganizationConnectionsOffsetPaginatedResponseContent]:
+ """
+ Retrieve details about a specific connection currently enabled for an Organization. Information returned includes details such as connection ID, name, strategy, and whether the connection automatically grants membership upon login.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[OrganizationConnection, ListOrganizationConnectionsOffsetPaginatedResponseContent]
+ Connections successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationConnectionsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationConnectionsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.enabled_connections
+ _has_next = True
+ _get_next = lambda: self.list(
+ id,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def add(
+ self,
+ id: str,
+ *,
+ connection_id: str,
+ assign_membership_on_login: typing.Optional[bool] = OMIT,
+ is_signup_enabled: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[AddOrganizationConnectionResponseContent]:
+ """
+ Enable a specific connection for a given Organization. To enable a connection, it must already exist within your tenant; connections cannot be created through this action.
+
+ Connections represent the relationship between Auth0 and a source of users. Available types of connections include database, enterprise, and social.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Single connection ID to add to the organization.
+
+ assign_membership_on_login : typing.Optional[bool]
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+
+ is_signup_enabled : typing.Optional[bool]
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+
+ show_as_button : typing.Optional[bool]
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[AddOrganizationConnectionResponseContent]
+ Organization connection successfully added.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections",
+ method="POST",
+ json={
+ "connection_id": connection_id,
+ "assign_membership_on_login": assign_membership_on_login,
+ "is_signup_enabled": is_signup_enabled,
+ "show_as_button": show_as_button,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ AddOrganizationConnectionResponseContent,
+ parse_obj_as(
+ type_=AddOrganizationConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, connection_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetOrganizationConnectionResponseContent]:
+ """
+ Retrieve details about a specific connection currently enabled for an Organization. Information returned includes details such as connection ID, name, strategy, and whether the connection automatically grants membership upon login.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetOrganizationConnectionResponseContent]
+ Connection successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections/{jsonable_encoder(connection_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationConnectionResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, id: str, connection_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Disable a specific connection for an Organization. Once disabled, Organization members can no longer use that connection to authenticate.
+
+ Note: This action does not remove the connection from your tenant.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections/{jsonable_encoder(connection_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ connection_id: str,
+ *,
+ assign_membership_on_login: typing.Optional[bool] = OMIT,
+ is_signup_enabled: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateOrganizationConnectionResponseContent]:
+ """
+ Modify the details of a specific connection currently enabled for an Organization.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ assign_membership_on_login : typing.Optional[bool]
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+
+ is_signup_enabled : typing.Optional[bool]
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+
+ show_as_button : typing.Optional[bool]
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateOrganizationConnectionResponseContent]
+ Organization connection successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections/{jsonable_encoder(connection_id)}",
+ method="PATCH",
+ json={
+ "assign_membership_on_login": assign_membership_on_login,
+ "is_signup_enabled": is_signup_enabled,
+ "show_as_button": show_as_button,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateOrganizationConnectionResponseContent,
+ parse_obj_as(
+ type_=UpdateOrganizationConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawEnabledConnectionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[OrganizationConnection, ListOrganizationConnectionsOffsetPaginatedResponseContent]:
+ """
+ Retrieve details about a specific connection currently enabled for an Organization. Information returned includes details such as connection ID, name, strategy, and whether the connection automatically grants membership upon login.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[OrganizationConnection, ListOrganizationConnectionsOffsetPaginatedResponseContent]
+ Connections successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationConnectionsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationConnectionsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.enabled_connections
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ id,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def add(
+ self,
+ id: str,
+ *,
+ connection_id: str,
+ assign_membership_on_login: typing.Optional[bool] = OMIT,
+ is_signup_enabled: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[AddOrganizationConnectionResponseContent]:
+ """
+ Enable a specific connection for a given Organization. To enable a connection, it must already exist within your tenant; connections cannot be created through this action.
+
+ Connections represent the relationship between Auth0 and a source of users. Available types of connections include database, enterprise, and social.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Single connection ID to add to the organization.
+
+ assign_membership_on_login : typing.Optional[bool]
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+
+ is_signup_enabled : typing.Optional[bool]
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+
+ show_as_button : typing.Optional[bool]
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[AddOrganizationConnectionResponseContent]
+ Organization connection successfully added.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections",
+ method="POST",
+ json={
+ "connection_id": connection_id,
+ "assign_membership_on_login": assign_membership_on_login,
+ "is_signup_enabled": is_signup_enabled,
+ "show_as_button": show_as_button,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ AddOrganizationConnectionResponseContent,
+ parse_obj_as(
+ type_=AddOrganizationConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, connection_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetOrganizationConnectionResponseContent]:
+ """
+ Retrieve details about a specific connection currently enabled for an Organization. Information returned includes details such as connection ID, name, strategy, and whether the connection automatically grants membership upon login.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetOrganizationConnectionResponseContent]
+ Connection successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections/{jsonable_encoder(connection_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationConnectionResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, connection_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Disable a specific connection for an Organization. Once disabled, Organization members can no longer use that connection to authenticate.
+
+ Note: This action does not remove the connection from your tenant.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections/{jsonable_encoder(connection_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ connection_id: str,
+ *,
+ assign_membership_on_login: typing.Optional[bool] = OMIT,
+ is_signup_enabled: typing.Optional[bool] = OMIT,
+ show_as_button: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateOrganizationConnectionResponseContent]:
+ """
+ Modify the details of a specific connection currently enabled for an Organization.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ connection_id : str
+ Connection identifier.
+
+ assign_membership_on_login : typing.Optional[bool]
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+
+ is_signup_enabled : typing.Optional[bool]
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+
+ show_as_button : typing.Optional[bool]
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateOrganizationConnectionResponseContent]
+ Organization connection successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/enabled_connections/{jsonable_encoder(connection_id)}",
+ method="PATCH",
+ json={
+ "assign_membership_on_login": assign_membership_on_login,
+ "is_signup_enabled": is_signup_enabled,
+ "show_as_button": show_as_button,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateOrganizationConnectionResponseContent,
+ parse_obj_as(
+ type_=UpdateOrganizationConnectionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/organizations/invitations/__init__.py b/src/auth0/management/organizations/invitations/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/organizations/invitations/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/organizations/invitations/client.py b/src/auth0/management/organizations/invitations/client.py
new file mode 100644
index 00000000..f084ca37
--- /dev/null
+++ b/src/auth0/management/organizations/invitations/client.py
@@ -0,0 +1,594 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.app_metadata import AppMetadata
+from ...types.create_organization_invitation_response_content import CreateOrganizationInvitationResponseContent
+from ...types.get_organization_invitation_response_content import GetOrganizationInvitationResponseContent
+from ...types.list_organization_invitations_offset_paginated_response_content import (
+ ListOrganizationInvitationsOffsetPaginatedResponseContent,
+)
+from ...types.organization_invitation import OrganizationInvitation
+from ...types.organization_invitation_invitee import OrganizationInvitationInvitee
+from ...types.organization_invitation_inviter import OrganizationInvitationInviter
+from ...types.user_metadata import UserMetadata
+from .raw_client import AsyncRawInvitationsClient, RawInvitationsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class InvitationsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawInvitationsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawInvitationsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawInvitationsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[OrganizationInvitation, ListOrganizationInvitationsOffsetPaginatedResponseContent]:
+ """
+ Retrieve a detailed list of invitations sent to users for a specific Organization. The list includes details such as inviter and invitee information, invitation URLs, and dates of creation and expiration. To learn more about Organization invitations, review Invite Organization Members.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ When true, return results inside an object that also contains the start and limit. When false (default), a direct array of results is returned. We do not yet support returning the total invitations count.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending Defaults to created_at:-1.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[OrganizationInvitation, ListOrganizationInvitationsOffsetPaginatedResponseContent]
+ Invitations successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.organizations.invitations.list(
+ id="id",
+ page=1,
+ per_page=1,
+ include_totals=True,
+ fields="fields",
+ include_fields=True,
+ sort="sort",
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ id,
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ fields=fields,
+ include_fields=include_fields,
+ sort=sort,
+ request_options=request_options,
+ )
+
+ def create(
+ self,
+ id: str,
+ *,
+ inviter: OrganizationInvitationInviter,
+ invitee: OrganizationInvitationInvitee,
+ client_id: str = "AaiyAPdpYdesoKnqjj8HJqRn4T5titww",
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ roles: typing.Optional[typing.Sequence[str]] = OMIT,
+ send_invitation_email: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateOrganizationInvitationResponseContent:
+ """
+ Create a user invitation for a specific Organization. Upon creation, the listed user receives an email inviting them to join the Organization. To learn more about Organization invitations, review Invite Organization Members.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ inviter : OrganizationInvitationInviter
+
+ invitee : OrganizationInvitationInvitee
+
+ client_id : str
+ Auth0 client ID. Used to resolve the application's login initiation endpoint.
+
+ connection_id : typing.Optional[str]
+ The id of the connection to force invitee to authenticate with.
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the invitation is valid before expiration. If unspecified or set to 0, this value defaults to 604800 seconds (7 days). Max value: 2592000 seconds (30 days).
+
+ roles : typing.Optional[typing.Sequence[str]]
+ List of roles IDs to associated with the user.
+
+ send_invitation_email : typing.Optional[bool]
+ Whether the user will receive an invitation email (true) or no email (false), true by default
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateOrganizationInvitationResponseContent
+ Invitation successfully created.
+
+ Examples
+ --------
+ from auth0 import (
+ Auth0,
+ OrganizationInvitationInvitee,
+ OrganizationInvitationInviter,
+ )
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.invitations.create(
+ id="id",
+ inviter=OrganizationInvitationInviter(
+ name="name",
+ ),
+ invitee=OrganizationInvitationInvitee(
+ email="email",
+ ),
+ client_id="client_id",
+ )
+ """
+ _response = self._raw_client.create(
+ id,
+ inviter=inviter,
+ invitee=invitee,
+ client_id=client_id,
+ connection_id=connection_id,
+ app_metadata=app_metadata,
+ user_metadata=user_metadata,
+ ttl_sec=ttl_sec,
+ roles=roles,
+ send_invitation_email=send_invitation_email,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self,
+ id: str,
+ invitation_id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetOrganizationInvitationResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ invitation_id : str
+ The id of the user invitation.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationInvitationResponseContent
+ Invitation successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.invitations.get(
+ id="id",
+ invitation_id="invitation_id",
+ fields="fields",
+ include_fields=True,
+ )
+ """
+ _response = self._raw_client.get(
+ id, invitation_id, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ def delete(self, id: str, invitation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ invitation_id : str
+ The id of the user invitation.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.invitations.delete(
+ id="id",
+ invitation_id="invitation_id",
+ )
+ """
+ _response = self._raw_client.delete(id, invitation_id, request_options=request_options)
+ return _response.data
+
+
+class AsyncInvitationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawInvitationsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawInvitationsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawInvitationsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[OrganizationInvitation, ListOrganizationInvitationsOffsetPaginatedResponseContent]:
+ """
+ Retrieve a detailed list of invitations sent to users for a specific Organization. The list includes details such as inviter and invitee information, invitation URLs, and dates of creation and expiration. To learn more about Organization invitations, review Invite Organization Members.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ When true, return results inside an object that also contains the start and limit. When false (default), a direct array of results is returned. We do not yet support returning the total invitations count.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending Defaults to created_at:-1.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[OrganizationInvitation, ListOrganizationInvitationsOffsetPaginatedResponseContent]
+ Invitations successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.organizations.invitations.list(
+ id="id",
+ page=1,
+ per_page=1,
+ include_totals=True,
+ fields="fields",
+ include_fields=True,
+ sort="sort",
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ id,
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ fields=fields,
+ include_fields=include_fields,
+ sort=sort,
+ request_options=request_options,
+ )
+
+ async def create(
+ self,
+ id: str,
+ *,
+ inviter: OrganizationInvitationInviter,
+ invitee: OrganizationInvitationInvitee,
+ client_id: str = "AaiyAPdpYdesoKnqjj8HJqRn4T5titww",
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ roles: typing.Optional[typing.Sequence[str]] = OMIT,
+ send_invitation_email: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateOrganizationInvitationResponseContent:
+ """
+ Create a user invitation for a specific Organization. Upon creation, the listed user receives an email inviting them to join the Organization. To learn more about Organization invitations, review Invite Organization Members.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ inviter : OrganizationInvitationInviter
+
+ invitee : OrganizationInvitationInvitee
+
+ client_id : str
+ Auth0 client ID. Used to resolve the application's login initiation endpoint.
+
+ connection_id : typing.Optional[str]
+ The id of the connection to force invitee to authenticate with.
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the invitation is valid before expiration. If unspecified or set to 0, this value defaults to 604800 seconds (7 days). Max value: 2592000 seconds (30 days).
+
+ roles : typing.Optional[typing.Sequence[str]]
+ List of roles IDs to associated with the user.
+
+ send_invitation_email : typing.Optional[bool]
+ Whether the user will receive an invitation email (true) or no email (false), true by default
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateOrganizationInvitationResponseContent
+ Invitation successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import (
+ AsyncAuth0,
+ OrganizationInvitationInvitee,
+ OrganizationInvitationInviter,
+ )
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.invitations.create(
+ id="id",
+ inviter=OrganizationInvitationInviter(
+ name="name",
+ ),
+ invitee=OrganizationInvitationInvitee(
+ email="email",
+ ),
+ client_id="client_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ id,
+ inviter=inviter,
+ invitee=invitee,
+ client_id=client_id,
+ connection_id=connection_id,
+ app_metadata=app_metadata,
+ user_metadata=user_metadata,
+ ttl_sec=ttl_sec,
+ roles=roles,
+ send_invitation_email=send_invitation_email,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self,
+ id: str,
+ invitation_id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetOrganizationInvitationResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ invitation_id : str
+ The id of the user invitation.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetOrganizationInvitationResponseContent
+ Invitation successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.invitations.get(
+ id="id",
+ invitation_id="invitation_id",
+ fields="fields",
+ include_fields=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(
+ id, invitation_id, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ async def delete(
+ self, id: str, invitation_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ invitation_id : str
+ The id of the user invitation.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.invitations.delete(
+ id="id",
+ invitation_id="invitation_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, invitation_id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/organizations/invitations/raw_client.py b/src/auth0/management/organizations/invitations/raw_client.py
new file mode 100644
index 00000000..d2ead0b3
--- /dev/null
+++ b/src/auth0/management/organizations/invitations/raw_client.py
@@ -0,0 +1,1000 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.app_metadata import AppMetadata
+from ...types.create_organization_invitation_response_content import CreateOrganizationInvitationResponseContent
+from ...types.get_organization_invitation_response_content import GetOrganizationInvitationResponseContent
+from ...types.list_organization_invitations_offset_paginated_response_content import (
+ ListOrganizationInvitationsOffsetPaginatedResponseContent,
+)
+from ...types.organization_invitation import OrganizationInvitation
+from ...types.organization_invitation_invitee import OrganizationInvitationInvitee
+from ...types.organization_invitation_inviter import OrganizationInvitationInviter
+from ...types.user_metadata import UserMetadata
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawInvitationsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[OrganizationInvitation, ListOrganizationInvitationsOffsetPaginatedResponseContent]:
+ """
+ Retrieve a detailed list of invitations sent to users for a specific Organization. The list includes details such as inviter and invitee information, invitation URLs, and dates of creation and expiration. To learn more about Organization invitations, review Invite Organization Members.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ When true, return results inside an object that also contains the start and limit. When false (default), a direct array of results is returned. We do not yet support returning the total invitations count.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending Defaults to created_at:-1.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[OrganizationInvitation, ListOrganizationInvitationsOffsetPaginatedResponseContent]
+ Invitations successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/invitations",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "fields": fields,
+ "include_fields": include_fields,
+ "sort": sort,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationInvitationsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationInvitationsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.invitations
+ _has_next = True
+ _get_next = lambda: self.list(
+ id,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ fields=fields,
+ include_fields=include_fields,
+ sort=sort,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ id: str,
+ *,
+ inviter: OrganizationInvitationInviter,
+ invitee: OrganizationInvitationInvitee,
+ client_id: str = "AaiyAPdpYdesoKnqjj8HJqRn4T5titww",
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ roles: typing.Optional[typing.Sequence[str]] = OMIT,
+ send_invitation_email: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateOrganizationInvitationResponseContent]:
+ """
+ Create a user invitation for a specific Organization. Upon creation, the listed user receives an email inviting them to join the Organization. To learn more about Organization invitations, review Invite Organization Members.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ inviter : OrganizationInvitationInviter
+
+ invitee : OrganizationInvitationInvitee
+
+ client_id : str
+ Auth0 client ID. Used to resolve the application's login initiation endpoint.
+
+ connection_id : typing.Optional[str]
+ The id of the connection to force invitee to authenticate with.
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the invitation is valid before expiration. If unspecified or set to 0, this value defaults to 604800 seconds (7 days). Max value: 2592000 seconds (30 days).
+
+ roles : typing.Optional[typing.Sequence[str]]
+ List of roles IDs to associated with the user.
+
+ send_invitation_email : typing.Optional[bool]
+ Whether the user will receive an invitation email (true) or no email (false), true by default
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateOrganizationInvitationResponseContent]
+ Invitation successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/invitations",
+ method="POST",
+ json={
+ "inviter": convert_and_respect_annotation_metadata(
+ object_=inviter, annotation=OrganizationInvitationInviter, direction="write"
+ ),
+ "invitee": convert_and_respect_annotation_metadata(
+ object_=invitee, annotation=OrganizationInvitationInvitee, direction="write"
+ ),
+ "client_id": client_id,
+ "connection_id": connection_id,
+ "app_metadata": app_metadata,
+ "user_metadata": user_metadata,
+ "ttl_sec": ttl_sec,
+ "roles": roles,
+ "send_invitation_email": send_invitation_email,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateOrganizationInvitationResponseContent,
+ parse_obj_as(
+ type_=CreateOrganizationInvitationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self,
+ id: str,
+ invitation_id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[GetOrganizationInvitationResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ invitation_id : str
+ The id of the user invitation.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetOrganizationInvitationResponseContent]
+ Invitation successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/invitations/{jsonable_encoder(invitation_id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationInvitationResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationInvitationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, id: str, invitation_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ invitation_id : str
+ The id of the user invitation.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/invitations/{jsonable_encoder(invitation_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawInvitationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[OrganizationInvitation, ListOrganizationInvitationsOffsetPaginatedResponseContent]:
+ """
+ Retrieve a detailed list of invitations sent to users for a specific Organization. The list includes details such as inviter and invitee information, invitation URLs, and dates of creation and expiration. To learn more about Organization invitations, review Invite Organization Members.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ When true, return results inside an object that also contains the start and limit. When false (default), a direct array of results is returned. We do not yet support returning the total invitations count.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending Defaults to created_at:-1.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[OrganizationInvitation, ListOrganizationInvitationsOffsetPaginatedResponseContent]
+ Invitations successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/invitations",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "fields": fields,
+ "include_fields": include_fields,
+ "sort": sort,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationInvitationsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationInvitationsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.invitations
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ id,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ fields=fields,
+ include_fields=include_fields,
+ sort=sort,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ id: str,
+ *,
+ inviter: OrganizationInvitationInviter,
+ invitee: OrganizationInvitationInvitee,
+ client_id: str = "AaiyAPdpYdesoKnqjj8HJqRn4T5titww",
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ roles: typing.Optional[typing.Sequence[str]] = OMIT,
+ send_invitation_email: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateOrganizationInvitationResponseContent]:
+ """
+ Create a user invitation for a specific Organization. Upon creation, the listed user receives an email inviting them to join the Organization. To learn more about Organization invitations, review Invite Organization Members.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ inviter : OrganizationInvitationInviter
+
+ invitee : OrganizationInvitationInvitee
+
+ client_id : str
+ Auth0 client ID. Used to resolve the application's login initiation endpoint.
+
+ connection_id : typing.Optional[str]
+ The id of the connection to force invitee to authenticate with.
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the invitation is valid before expiration. If unspecified or set to 0, this value defaults to 604800 seconds (7 days). Max value: 2592000 seconds (30 days).
+
+ roles : typing.Optional[typing.Sequence[str]]
+ List of roles IDs to associated with the user.
+
+ send_invitation_email : typing.Optional[bool]
+ Whether the user will receive an invitation email (true) or no email (false), true by default
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateOrganizationInvitationResponseContent]
+ Invitation successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/invitations",
+ method="POST",
+ json={
+ "inviter": convert_and_respect_annotation_metadata(
+ object_=inviter, annotation=OrganizationInvitationInviter, direction="write"
+ ),
+ "invitee": convert_and_respect_annotation_metadata(
+ object_=invitee, annotation=OrganizationInvitationInvitee, direction="write"
+ ),
+ "client_id": client_id,
+ "connection_id": connection_id,
+ "app_metadata": app_metadata,
+ "user_metadata": user_metadata,
+ "ttl_sec": ttl_sec,
+ "roles": roles,
+ "send_invitation_email": send_invitation_email,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateOrganizationInvitationResponseContent,
+ parse_obj_as(
+ type_=CreateOrganizationInvitationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self,
+ id: str,
+ invitation_id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[GetOrganizationInvitationResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ invitation_id : str
+ The id of the user invitation.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetOrganizationInvitationResponseContent]
+ Invitation successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/invitations/{jsonable_encoder(invitation_id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationInvitationResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationInvitationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, invitation_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ invitation_id : str
+ The id of the user invitation.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/invitations/{jsonable_encoder(invitation_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/organizations/members/__init__.py b/src/auth0/management/organizations/members/__init__.py
new file mode 100644
index 00000000..686aa754
--- /dev/null
+++ b/src/auth0/management/organizations/members/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import roles
+_dynamic_imports: typing.Dict[str, str] = {"roles": ".roles"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["roles"]
diff --git a/src/auth0/management/organizations/members/client.py b/src/auth0/management/organizations/members/client.py
new file mode 100644
index 00000000..22dbe6ee
--- /dev/null
+++ b/src/auth0/management/organizations/members/client.py
@@ -0,0 +1,406 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.list_organization_members_paginated_response_content import (
+ ListOrganizationMembersPaginatedResponseContent,
+)
+from ...types.organization_member import OrganizationMember
+from .raw_client import AsyncRawMembersClient, RawMembersClient
+
+if typing.TYPE_CHECKING:
+ from .roles.client import AsyncRolesClient, RolesClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class MembersClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawMembersClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._roles: typing.Optional[RolesClient] = None
+
+ @property
+ def with_raw_response(self) -> RawMembersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawMembersClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[OrganizationMember, ListOrganizationMembersPaginatedResponseContent]:
+ """
+ List organization members.
+ This endpoint is subject to eventual consistency. New users may not be immediately included in the response and deleted users may not be immediately removed from it.
+
+ fields parameter to optionally define the specific member details retrieved. If fields is left blank, all fields (except roles) are returned.
+ fields=roles to retrieve the roles assigned to each listed member. To use this parameter, you must include the read:organization_member_roles scope in the token.
+ from parameter. If there are more results, a next value will be included in the response. You can use this for subsequent API calls. When next is no longer included in the response, this indicates there are no more pages remaining.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[OrganizationMember, ListOrganizationMembersPaginatedResponseContent]
+ Members successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.organizations.members.list(
+ id="id",
+ from_="from",
+ take=1,
+ fields="fields",
+ include_fields=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ id, from_=from_, take=take, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+
+ def create(
+ self, id: str, *, members: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Set one or more existing users as members of a specific Organization.
+
+ To add a user to an Organization through this action, the user must already exist in your tenant. If a user does not yet exist, you can invite them to create an account, manually create them through the Auth0 Dashboard, or use the Management API.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ members : typing.Sequence[str]
+ List of user IDs to add to the organization as members.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.members.create(
+ id="id",
+ members=["members"],
+ )
+ """
+ _response = self._raw_client.create(id, members=members, request_options=request_options)
+ return _response.data
+
+ def delete(
+ self, id: str, *, members: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ members : typing.Sequence[str]
+ List of user IDs to remove from the organization.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.members.delete(
+ id="id",
+ members=["members"],
+ )
+ """
+ _response = self._raw_client.delete(id, members=members, request_options=request_options)
+ return _response.data
+
+ @property
+ def roles(self):
+ if self._roles is None:
+ from .roles.client import RolesClient # noqa: E402
+
+ self._roles = RolesClient(client_wrapper=self._client_wrapper)
+ return self._roles
+
+
+class AsyncMembersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawMembersClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._roles: typing.Optional[AsyncRolesClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawMembersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawMembersClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[OrganizationMember, ListOrganizationMembersPaginatedResponseContent]:
+ """
+ List organization members.
+ This endpoint is subject to eventual consistency. New users may not be immediately included in the response and deleted users may not be immediately removed from it.
+
+ fields parameter to optionally define the specific member details retrieved. If fields is left blank, all fields (except roles) are returned.
+ fields=roles to retrieve the roles assigned to each listed member. To use this parameter, you must include the read:organization_member_roles scope in the token.
+ from parameter. If there are more results, a next value will be included in the response. You can use this for subsequent API calls. When next is no longer included in the response, this indicates there are no more pages remaining.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[OrganizationMember, ListOrganizationMembersPaginatedResponseContent]
+ Members successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.organizations.members.list(
+ id="id",
+ from_="from",
+ take=1,
+ fields="fields",
+ include_fields=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ id, from_=from_, take=take, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+
+ async def create(
+ self, id: str, *, members: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Set one or more existing users as members of a specific Organization.
+
+ To add a user to an Organization through this action, the user must already exist in your tenant. If a user does not yet exist, you can invite them to create an account, manually create them through the Auth0 Dashboard, or use the Management API.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ members : typing.Sequence[str]
+ List of user IDs to add to the organization as members.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.members.create(
+ id="id",
+ members=["members"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(id, members=members, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self, id: str, *, members: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ members : typing.Sequence[str]
+ List of user IDs to remove from the organization.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.members.delete(
+ id="id",
+ members=["members"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, members=members, request_options=request_options)
+ return _response.data
+
+ @property
+ def roles(self):
+ if self._roles is None:
+ from .roles.client import AsyncRolesClient # noqa: E402
+
+ self._roles = AsyncRolesClient(client_wrapper=self._client_wrapper)
+ return self._roles
diff --git a/src/auth0/management/organizations/members/raw_client.py b/src/auth0/management/organizations/members/raw_client.py
new file mode 100644
index 00000000..41a5a8b4
--- /dev/null
+++ b/src/auth0/management/organizations/members/raw_client.py
@@ -0,0 +1,656 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.list_organization_members_paginated_response_content import (
+ ListOrganizationMembersPaginatedResponseContent,
+)
+from ...types.organization_member import OrganizationMember
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawMembersClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[OrganizationMember, ListOrganizationMembersPaginatedResponseContent]:
+ """
+ List organization members.
+ This endpoint is subject to eventual consistency. New users may not be immediately included in the response and deleted users may not be immediately removed from it.
+
+ fields parameter to optionally define the specific member details retrieved. If fields is left blank, all fields (except roles) are returned.
+ fields=roles to retrieve the roles assigned to each listed member. To use this parameter, you must include the read:organization_member_roles scope in the token.
+ from parameter. If there are more results, a next value will be included in the response. You can use this for subsequent API calls. When next is no longer included in the response, this indicates there are no more pages remaining.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[OrganizationMember, ListOrganizationMembersPaginatedResponseContent]
+ Members successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationMembersPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationMembersPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.members
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self, id: str, *, members: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Set one or more existing users as members of a specific Organization.
+
+ To add a user to an Organization through this action, the user must already exist in your tenant. If a user does not yet exist, you can invite them to create an account, manually create them through the Auth0 Dashboard, or use the Management API.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ members : typing.Sequence[str]
+ List of user IDs to add to the organization as members.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members",
+ method="POST",
+ json={
+ "members": members,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, id: str, *, members: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ members : typing.Sequence[str]
+ List of user IDs to remove from the organization.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members",
+ method="DELETE",
+ json={
+ "members": members,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawMembersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[OrganizationMember, ListOrganizationMembersPaginatedResponseContent]:
+ """
+ List organization members.
+ This endpoint is subject to eventual consistency. New users may not be immediately included in the response and deleted users may not be immediately removed from it.
+
+ fields parameter to optionally define the specific member details retrieved. If fields is left blank, all fields (except roles) are returned.
+ fields=roles to retrieve the roles assigned to each listed member. To use this parameter, you must include the read:organization_member_roles scope in the token.
+ from parameter. If there are more results, a next value will be included in the response. You can use this for subsequent API calls. When next is no longer included in the response, this indicates there are no more pages remaining.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[OrganizationMember, ListOrganizationMembersPaginatedResponseContent]
+ Members successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationMembersPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationMembersPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.members
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self, id: str, *, members: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Set one or more existing users as members of a specific Organization.
+
+ To add a user to an Organization through this action, the user must already exist in your tenant. If a user does not yet exist, you can invite them to create an account, manually create them through the Auth0 Dashboard, or use the Management API.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ members : typing.Sequence[str]
+ List of user IDs to add to the organization as members.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members",
+ method="POST",
+ json={
+ "members": members,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, members: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ members : typing.Sequence[str]
+ List of user IDs to remove from the organization.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members",
+ method="DELETE",
+ json={
+ "members": members,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/organizations/members/roles/__init__.py b/src/auth0/management/organizations/members/roles/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/organizations/members/roles/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/organizations/members/roles/client.py b/src/auth0/management/organizations/members/roles/client.py
new file mode 100644
index 00000000..98097bcb
--- /dev/null
+++ b/src/auth0/management/organizations/members/roles/client.py
@@ -0,0 +1,388 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.pagination import AsyncPager, SyncPager
+from ....core.request_options import RequestOptions
+from ....types.list_organization_member_roles_offset_paginated_response_content import (
+ ListOrganizationMemberRolesOffsetPaginatedResponseContent,
+)
+from ....types.role import Role
+from .raw_client import AsyncRawRolesClient, RawRolesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RolesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawRolesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawRolesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawRolesClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Role, ListOrganizationMemberRolesOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of roles assigned to a given user within the context of a specific Organization.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action only returns the roles associated with the specified Organization; any roles assigned to the user within other Organizations are not included.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ ID of the user to associate roles with.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Role, ListOrganizationMemberRolesOffsetPaginatedResponseContent]
+ Roles successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.organizations.members.roles.list(
+ id="id",
+ user_id="user_id",
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ id, user_id, page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ def assign(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ roles: typing.Sequence[str],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Assign one or more roles to a user to determine their access for a specific Organization.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action assigns roles to a user only for the specified Organization. Roles cannot be assigned to a user across multiple Organizations in the same call.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ ID of the user to associate roles with.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to associated with the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.members.roles.assign(
+ id="id",
+ user_id="user_id",
+ roles=["roles"],
+ )
+ """
+ _response = self._raw_client.assign(id, user_id, roles=roles, request_options=request_options)
+ return _response.data
+
+ def delete(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ roles: typing.Sequence[str],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Remove one or more Organization-specific roles from a given user.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action removes roles from a user in relation to the specified Organization. Roles assigned to the user within a different Organization cannot be managed in the same call.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ User ID of the organization member to remove roles from.
+
+ roles : typing.Sequence[str]
+ List of roles IDs associated with the organization member to remove.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.organizations.members.roles.delete(
+ id="id",
+ user_id="user_id",
+ roles=["roles"],
+ )
+ """
+ _response = self._raw_client.delete(id, user_id, roles=roles, request_options=request_options)
+ return _response.data
+
+
+class AsyncRolesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawRolesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawRolesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawRolesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Role, ListOrganizationMemberRolesOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of roles assigned to a given user within the context of a specific Organization.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action only returns the roles associated with the specified Organization; any roles assigned to the user within other Organizations are not included.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ ID of the user to associate roles with.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Role, ListOrganizationMemberRolesOffsetPaginatedResponseContent]
+ Roles successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.organizations.members.roles.list(
+ id="id",
+ user_id="user_id",
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ id, user_id, page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ async def assign(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ roles: typing.Sequence[str],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Assign one or more roles to a user to determine their access for a specific Organization.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action assigns roles to a user only for the specified Organization. Roles cannot be assigned to a user across multiple Organizations in the same call.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ ID of the user to associate roles with.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to associated with the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.members.roles.assign(
+ id="id",
+ user_id="user_id",
+ roles=["roles"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.assign(id, user_id, roles=roles, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ roles: typing.Sequence[str],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Remove one or more Organization-specific roles from a given user.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action removes roles from a user in relation to the specified Organization. Roles assigned to the user within a different Organization cannot be managed in the same call.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ User ID of the organization member to remove roles from.
+
+ roles : typing.Sequence[str]
+ List of roles IDs associated with the organization member to remove.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.organizations.members.roles.delete(
+ id="id",
+ user_id="user_id",
+ roles=["roles"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, user_id, roles=roles, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/organizations/members/roles/raw_client.py b/src/auth0/management/organizations/members/roles/raw_client.py
new file mode 100644
index 00000000..e6824cef
--- /dev/null
+++ b/src/auth0/management/organizations/members/roles/raw_client.py
@@ -0,0 +1,681 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ....core.api_error import ApiError
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.http_response import AsyncHttpResponse, HttpResponse
+from ....core.jsonable_encoder import jsonable_encoder
+from ....core.pagination import AsyncPager, SyncPager
+from ....core.pydantic_utilities import parse_obj_as
+from ....core.request_options import RequestOptions
+from ....errors.bad_request_error import BadRequestError
+from ....errors.conflict_error import ConflictError
+from ....errors.forbidden_error import ForbiddenError
+from ....errors.too_many_requests_error import TooManyRequestsError
+from ....errors.unauthorized_error import UnauthorizedError
+from ....types.list_organization_member_roles_offset_paginated_response_content import (
+ ListOrganizationMemberRolesOffsetPaginatedResponseContent,
+)
+from ....types.role import Role
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawRolesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Role, ListOrganizationMemberRolesOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of roles assigned to a given user within the context of a specific Organization.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action only returns the roles associated with the specified Organization; any roles assigned to the user within other Organizations are not included.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ ID of the user to associate roles with.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Role, ListOrganizationMemberRolesOffsetPaginatedResponseContent]
+ Roles successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members/{jsonable_encoder(user_id)}/roles",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationMemberRolesOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationMemberRolesOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.roles
+ _has_next = True
+ _get_next = lambda: self.list(
+ id,
+ user_id,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def assign(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ roles: typing.Sequence[str],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Assign one or more roles to a user to determine their access for a specific Organization.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action assigns roles to a user only for the specified Organization. Roles cannot be assigned to a user across multiple Organizations in the same call.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ ID of the user to associate roles with.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to associated with the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members/{jsonable_encoder(user_id)}/roles",
+ method="POST",
+ json={
+ "roles": roles,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ roles: typing.Sequence[str],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Remove one or more Organization-specific roles from a given user.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action removes roles from a user in relation to the specified Organization. Roles assigned to the user within a different Organization cannot be managed in the same call.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ User ID of the organization member to remove roles from.
+
+ roles : typing.Sequence[str]
+ List of roles IDs associated with the organization member to remove.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members/{jsonable_encoder(user_id)}/roles",
+ method="DELETE",
+ json={
+ "roles": roles,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawRolesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Role, ListOrganizationMemberRolesOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of roles assigned to a given user within the context of a specific Organization.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action only returns the roles associated with the specified Organization; any roles assigned to the user within other Organizations are not included.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ ID of the user to associate roles with.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Role, ListOrganizationMemberRolesOffsetPaginatedResponseContent]
+ Roles successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members/{jsonable_encoder(user_id)}/roles",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationMemberRolesOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationMemberRolesOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.roles
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ id,
+ user_id,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def assign(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ roles: typing.Sequence[str],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Assign one or more roles to a user to determine their access for a specific Organization.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action assigns roles to a user only for the specified Organization. Roles cannot be assigned to a user across multiple Organizations in the same call.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ ID of the user to associate roles with.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to associated with the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members/{jsonable_encoder(user_id)}/roles",
+ method="POST",
+ json={
+ "roles": roles,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self,
+ id: str,
+ user_id: str,
+ *,
+ roles: typing.Sequence[str],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Remove one or more Organization-specific roles from a given user.
+
+ Users can be members of multiple Organizations with unique roles assigned for each membership. This action removes roles from a user in relation to the specified Organization. Roles assigned to the user within a different Organization cannot be managed in the same call.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ user_id : str
+ User ID of the organization member to remove roles from.
+
+ roles : typing.Sequence[str]
+ List of roles IDs associated with the organization member to remove.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}/members/{jsonable_encoder(user_id)}/roles",
+ method="DELETE",
+ json={
+ "roles": roles,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/organizations/raw_client.py b/src/auth0/management/organizations/raw_client.py
new file mode 100644
index 00000000..5936f620
--- /dev/null
+++ b/src/auth0/management/organizations/raw_client.py
@@ -0,0 +1,1308 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.connection_for_organization import ConnectionForOrganization
+from ..types.create_organization_response_content import CreateOrganizationResponseContent
+from ..types.create_token_quota import CreateTokenQuota
+from ..types.get_organization_by_name_response_content import GetOrganizationByNameResponseContent
+from ..types.get_organization_response_content import GetOrganizationResponseContent
+from ..types.list_organizations_paginated_response_content import ListOrganizationsPaginatedResponseContent
+from ..types.organization import Organization
+from ..types.organization_branding import OrganizationBranding
+from ..types.organization_metadata import OrganizationMetadata
+from ..types.update_organization_response_content import UpdateOrganizationResponseContent
+from ..types.update_token_quota import UpdateTokenQuota
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawOrganizationsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Organization, ListOrganizationsPaginatedResponseContent]:
+ """
+ Retrieve detailed list of all Organizations available in your tenant. For more information, see Auth0 Organizations.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total number of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1. We currently support sorting by the following fields: name, display_name and created_at.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Organization, ListOrganizationsPaginatedResponseContent]
+ Organizations successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "organizations",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ "sort": sort,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationsPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationsPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.organizations
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ from_=_parsed_next,
+ take=take,
+ sort=sort,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: str = "organization-1",
+ display_name: typing.Optional[str] = "Acme Users",
+ branding: typing.Optional[OrganizationBranding] = OMIT,
+ metadata: typing.Optional[OrganizationMetadata] = OMIT,
+ enabled_connections: typing.Optional[typing.Sequence[ConnectionForOrganization]] = OMIT,
+ token_quota: typing.Optional[CreateTokenQuota] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateOrganizationResponseContent]:
+ """
+ Create a new Organization within your tenant. To learn more about Organization settings, behavior, and configuration options, review Create Your First Organization.
+
+ Parameters
+ ----------
+ name : str
+ The name of this organization.
+
+ display_name : typing.Optional[str]
+ Friendly name of this organization.
+
+ branding : typing.Optional[OrganizationBranding]
+
+ metadata : typing.Optional[OrganizationMetadata]
+
+ enabled_connections : typing.Optional[typing.Sequence[ConnectionForOrganization]]
+ Connections that will be enabled for this organization. See POST enabled_connections endpoint for the object format. (Max of 10 connections allowed)
+
+ token_quota : typing.Optional[CreateTokenQuota]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateOrganizationResponseContent]
+ Organization successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "organizations",
+ method="POST",
+ json={
+ "name": name,
+ "display_name": display_name,
+ "branding": convert_and_respect_annotation_metadata(
+ object_=branding, annotation=OrganizationBranding, direction="write"
+ ),
+ "metadata": metadata,
+ "enabled_connections": convert_and_respect_annotation_metadata(
+ object_=enabled_connections,
+ annotation=typing.Sequence[ConnectionForOrganization],
+ direction="write",
+ ),
+ "token_quota": convert_and_respect_annotation_metadata(
+ object_=token_quota, annotation=CreateTokenQuota, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateOrganizationResponseContent,
+ parse_obj_as(
+ type_=CreateOrganizationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get_by_name(
+ self, name: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetOrganizationByNameResponseContent]:
+ """
+ Retrieve details about a single Organization specified by name.
+
+ Parameters
+ ----------
+ name : str
+ name of the organization to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetOrganizationByNameResponseContent]
+ Organization successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/name/{jsonable_encoder(name)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationByNameResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationByNameResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetOrganizationResponseContent]:
+ """
+ Retrieve details about a single Organization specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetOrganizationResponseContent]
+ Organization successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Remove an Organization from your tenant. This action cannot be undone.
+
+ Note: Members are automatically disassociated from an Organization when it is deleted. However, this action does not delete these users from your tenant.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ display_name: typing.Optional[str] = "Acme Users",
+ name: typing.Optional[str] = "organization-1",
+ branding: typing.Optional[OrganizationBranding] = OMIT,
+ metadata: typing.Optional[OrganizationMetadata] = OMIT,
+ token_quota: typing.Optional[UpdateTokenQuota] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateOrganizationResponseContent]:
+ """
+ Update the details of a specific Organization, such as name and display name, branding options, and metadata.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization to update.
+
+ display_name : typing.Optional[str]
+ Friendly name of this organization.
+
+ name : typing.Optional[str]
+ The name of this organization.
+
+ branding : typing.Optional[OrganizationBranding]
+
+ metadata : typing.Optional[OrganizationMetadata]
+
+ token_quota : typing.Optional[UpdateTokenQuota]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateOrganizationResponseContent]
+ Organization successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "display_name": display_name,
+ "name": name,
+ "branding": convert_and_respect_annotation_metadata(
+ object_=branding, annotation=OrganizationBranding, direction="write"
+ ),
+ "metadata": metadata,
+ "token_quota": convert_and_respect_annotation_metadata(
+ object_=token_quota, annotation=typing.Optional[UpdateTokenQuota], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateOrganizationResponseContent,
+ parse_obj_as(
+ type_=UpdateOrganizationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawOrganizationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ sort: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Organization, ListOrganizationsPaginatedResponseContent]:
+ """
+ Retrieve detailed list of all Organizations available in your tenant. For more information, see Auth0 Organizations.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total number of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1. We currently support sorting by the following fields: name, display_name and created_at.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Organization, ListOrganizationsPaginatedResponseContent]
+ Organizations successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "organizations",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ "sort": sort,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListOrganizationsPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListOrganizationsPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.organizations
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ from_=_parsed_next,
+ take=take,
+ sort=sort,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: str = "organization-1",
+ display_name: typing.Optional[str] = "Acme Users",
+ branding: typing.Optional[OrganizationBranding] = OMIT,
+ metadata: typing.Optional[OrganizationMetadata] = OMIT,
+ enabled_connections: typing.Optional[typing.Sequence[ConnectionForOrganization]] = OMIT,
+ token_quota: typing.Optional[CreateTokenQuota] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateOrganizationResponseContent]:
+ """
+ Create a new Organization within your tenant. To learn more about Organization settings, behavior, and configuration options, review Create Your First Organization.
+
+ Parameters
+ ----------
+ name : str
+ The name of this organization.
+
+ display_name : typing.Optional[str]
+ Friendly name of this organization.
+
+ branding : typing.Optional[OrganizationBranding]
+
+ metadata : typing.Optional[OrganizationMetadata]
+
+ enabled_connections : typing.Optional[typing.Sequence[ConnectionForOrganization]]
+ Connections that will be enabled for this organization. See POST enabled_connections endpoint for the object format. (Max of 10 connections allowed)
+
+ token_quota : typing.Optional[CreateTokenQuota]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateOrganizationResponseContent]
+ Organization successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "organizations",
+ method="POST",
+ json={
+ "name": name,
+ "display_name": display_name,
+ "branding": convert_and_respect_annotation_metadata(
+ object_=branding, annotation=OrganizationBranding, direction="write"
+ ),
+ "metadata": metadata,
+ "enabled_connections": convert_and_respect_annotation_metadata(
+ object_=enabled_connections,
+ annotation=typing.Sequence[ConnectionForOrganization],
+ direction="write",
+ ),
+ "token_quota": convert_and_respect_annotation_metadata(
+ object_=token_quota, annotation=CreateTokenQuota, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateOrganizationResponseContent,
+ parse_obj_as(
+ type_=CreateOrganizationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get_by_name(
+ self, name: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetOrganizationByNameResponseContent]:
+ """
+ Retrieve details about a single Organization specified by name.
+
+ Parameters
+ ----------
+ name : str
+ name of the organization to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetOrganizationByNameResponseContent]
+ Organization successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/name/{jsonable_encoder(name)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationByNameResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationByNameResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetOrganizationResponseContent]:
+ """
+ Retrieve details about a single Organization specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetOrganizationResponseContent]
+ Organization successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetOrganizationResponseContent,
+ parse_obj_as(
+ type_=GetOrganizationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Remove an Organization from your tenant. This action cannot be undone.
+
+ Note: Members are automatically disassociated from an Organization when it is deleted. However, this action does not delete these users from your tenant.
+
+ Parameters
+ ----------
+ id : str
+ Organization identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ display_name: typing.Optional[str] = "Acme Users",
+ name: typing.Optional[str] = "organization-1",
+ branding: typing.Optional[OrganizationBranding] = OMIT,
+ metadata: typing.Optional[OrganizationMetadata] = OMIT,
+ token_quota: typing.Optional[UpdateTokenQuota] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateOrganizationResponseContent]:
+ """
+ Update the details of a specific Organization, such as name and display name, branding options, and metadata.
+
+ Parameters
+ ----------
+ id : str
+ ID of the organization to update.
+
+ display_name : typing.Optional[str]
+ Friendly name of this organization.
+
+ name : typing.Optional[str]
+ The name of this organization.
+
+ branding : typing.Optional[OrganizationBranding]
+
+ metadata : typing.Optional[OrganizationMetadata]
+
+ token_quota : typing.Optional[UpdateTokenQuota]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateOrganizationResponseContent]
+ Organization successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"organizations/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "display_name": display_name,
+ "name": name,
+ "branding": convert_and_respect_annotation_metadata(
+ object_=branding, annotation=OrganizationBranding, direction="write"
+ ),
+ "metadata": metadata,
+ "token_quota": convert_and_respect_annotation_metadata(
+ object_=token_quota, annotation=typing.Optional[UpdateTokenQuota], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateOrganizationResponseContent,
+ parse_obj_as(
+ type_=UpdateOrganizationResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/prompts/__init__.py b/src/auth0/management/prompts/__init__.py
new file mode 100644
index 00000000..4181c307
--- /dev/null
+++ b/src/auth0/management/prompts/__init__.py
@@ -0,0 +1,38 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import custom_text, partials, rendering
+_dynamic_imports: typing.Dict[str, str] = {
+ "custom_text": ".custom_text",
+ "partials": ".partials",
+ "rendering": ".rendering",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["custom_text", "partials", "rendering"]
diff --git a/src/auth0/management/prompts/client.py b/src/auth0/management/prompts/client.py
new file mode 100644
index 00000000..4b9f29c7
--- /dev/null
+++ b/src/auth0/management/prompts/client.py
@@ -0,0 +1,269 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.get_settings_response_content import GetSettingsResponseContent
+from ..types.universal_login_experience_enum import UniversalLoginExperienceEnum
+from ..types.update_settings_response_content import UpdateSettingsResponseContent
+from .raw_client import AsyncRawPromptsClient, RawPromptsClient
+
+if typing.TYPE_CHECKING:
+ from .custom_text.client import AsyncCustomTextClient, CustomTextClient
+ from .partials.client import AsyncPartialsClient, PartialsClient
+ from .rendering.client import AsyncRenderingClient, RenderingClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class PromptsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawPromptsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._rendering: typing.Optional[RenderingClient] = None
+ self._custom_text: typing.Optional[CustomTextClient] = None
+ self._partials: typing.Optional[PartialsClient] = None
+
+ @property
+ def with_raw_response(self) -> RawPromptsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawPromptsClient
+ """
+ return self._raw_client
+
+ def get_settings(self, *, request_options: typing.Optional[RequestOptions] = None) -> GetSettingsResponseContent:
+ """
+ Retrieve details of the Universal Login configuration of your tenant. This includes the Identifier First Authentication and WebAuthn with Device Biometrics for MFA features.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSettingsResponseContent
+ Prompt settings successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.prompts.get_settings()
+ """
+ _response = self._raw_client.get_settings(request_options=request_options)
+ return _response.data
+
+ def update_settings(
+ self,
+ *,
+ universal_login_experience: typing.Optional[UniversalLoginExperienceEnum] = OMIT,
+ identifier_first: typing.Optional[bool] = OMIT,
+ webauthn_platform_first_factor: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateSettingsResponseContent:
+ """
+ Update the Universal Login configuration of your tenant. This includes the Identifier First Authentication and WebAuthn with Device Biometrics for MFA features.
+
+ Parameters
+ ----------
+ universal_login_experience : typing.Optional[UniversalLoginExperienceEnum]
+
+ identifier_first : typing.Optional[bool]
+ Whether identifier first is enabled or not
+
+ webauthn_platform_first_factor : typing.Optional[bool]
+ Use WebAuthn with Device Biometrics as the first authentication factor
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateSettingsResponseContent
+ Prompts settings successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.prompts.update_settings()
+ """
+ _response = self._raw_client.update_settings(
+ universal_login_experience=universal_login_experience,
+ identifier_first=identifier_first,
+ webauthn_platform_first_factor=webauthn_platform_first_factor,
+ request_options=request_options,
+ )
+ return _response.data
+
+ @property
+ def rendering(self):
+ if self._rendering is None:
+ from .rendering.client import RenderingClient # noqa: E402
+
+ self._rendering = RenderingClient(client_wrapper=self._client_wrapper)
+ return self._rendering
+
+ @property
+ def custom_text(self):
+ if self._custom_text is None:
+ from .custom_text.client import CustomTextClient # noqa: E402
+
+ self._custom_text = CustomTextClient(client_wrapper=self._client_wrapper)
+ return self._custom_text
+
+ @property
+ def partials(self):
+ if self._partials is None:
+ from .partials.client import PartialsClient # noqa: E402
+
+ self._partials = PartialsClient(client_wrapper=self._client_wrapper)
+ return self._partials
+
+
+class AsyncPromptsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawPromptsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._rendering: typing.Optional[AsyncRenderingClient] = None
+ self._custom_text: typing.Optional[AsyncCustomTextClient] = None
+ self._partials: typing.Optional[AsyncPartialsClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawPromptsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawPromptsClient
+ """
+ return self._raw_client
+
+ async def get_settings(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetSettingsResponseContent:
+ """
+ Retrieve details of the Universal Login configuration of your tenant. This includes the Identifier First Authentication and WebAuthn with Device Biometrics for MFA features.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSettingsResponseContent
+ Prompt settings successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.prompts.get_settings()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_settings(request_options=request_options)
+ return _response.data
+
+ async def update_settings(
+ self,
+ *,
+ universal_login_experience: typing.Optional[UniversalLoginExperienceEnum] = OMIT,
+ identifier_first: typing.Optional[bool] = OMIT,
+ webauthn_platform_first_factor: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateSettingsResponseContent:
+ """
+ Update the Universal Login configuration of your tenant. This includes the Identifier First Authentication and WebAuthn with Device Biometrics for MFA features.
+
+ Parameters
+ ----------
+ universal_login_experience : typing.Optional[UniversalLoginExperienceEnum]
+
+ identifier_first : typing.Optional[bool]
+ Whether identifier first is enabled or not
+
+ webauthn_platform_first_factor : typing.Optional[bool]
+ Use WebAuthn with Device Biometrics as the first authentication factor
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateSettingsResponseContent
+ Prompts settings successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.prompts.update_settings()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update_settings(
+ universal_login_experience=universal_login_experience,
+ identifier_first=identifier_first,
+ webauthn_platform_first_factor=webauthn_platform_first_factor,
+ request_options=request_options,
+ )
+ return _response.data
+
+ @property
+ def rendering(self):
+ if self._rendering is None:
+ from .rendering.client import AsyncRenderingClient # noqa: E402
+
+ self._rendering = AsyncRenderingClient(client_wrapper=self._client_wrapper)
+ return self._rendering
+
+ @property
+ def custom_text(self):
+ if self._custom_text is None:
+ from .custom_text.client import AsyncCustomTextClient # noqa: E402
+
+ self._custom_text = AsyncCustomTextClient(client_wrapper=self._client_wrapper)
+ return self._custom_text
+
+ @property
+ def partials(self):
+ if self._partials is None:
+ from .partials.client import AsyncPartialsClient # noqa: E402
+
+ self._partials = AsyncPartialsClient(client_wrapper=self._client_wrapper)
+ return self._partials
diff --git a/src/auth0/management/prompts/custom_text/__init__.py b/src/auth0/management/prompts/custom_text/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/prompts/custom_text/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/prompts/custom_text/client.py b/src/auth0/management/prompts/custom_text/client.py
new file mode 100644
index 00000000..d5ceda66
--- /dev/null
+++ b/src/auth0/management/prompts/custom_text/client.py
@@ -0,0 +1,232 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.get_custom_texts_by_language_response_content import GetCustomTextsByLanguageResponseContent
+from ...types.prompt_group_name_enum import PromptGroupNameEnum
+from ...types.prompt_language_enum import PromptLanguageEnum
+from ...types.sets_custom_texts_by_language_request_content import SetsCustomTextsByLanguageRequestContent
+from .raw_client import AsyncRawCustomTextClient, RawCustomTextClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class CustomTextClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawCustomTextClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawCustomTextClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawCustomTextClient
+ """
+ return self._raw_client
+
+ def get(
+ self,
+ prompt: PromptGroupNameEnum,
+ language: PromptLanguageEnum,
+ *,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetCustomTextsByLanguageResponseContent:
+ """
+ Retrieve custom text for a specific prompt and language.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt.
+
+ language : PromptLanguageEnum
+ Language to update.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCustomTextsByLanguageResponseContent
+ Prompt dictionaries successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.prompts.custom_text.get(
+ prompt="login",
+ language="am",
+ )
+ """
+ _response = self._raw_client.get(prompt, language, request_options=request_options)
+ return _response.data
+
+ def set(
+ self,
+ prompt: PromptGroupNameEnum,
+ language: PromptLanguageEnum,
+ *,
+ request: SetsCustomTextsByLanguageRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Set custom text for a specific prompt. Existing texts will be overwritten.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt.
+
+ language : PromptLanguageEnum
+ Language to update.
+
+ request : SetsCustomTextsByLanguageRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.prompts.custom_text.set(
+ prompt="login",
+ language="am",
+ request={"key": "value"},
+ )
+ """
+ _response = self._raw_client.set(prompt, language, request=request, request_options=request_options)
+ return _response.data
+
+
+class AsyncCustomTextClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawCustomTextClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawCustomTextClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawCustomTextClient
+ """
+ return self._raw_client
+
+ async def get(
+ self,
+ prompt: PromptGroupNameEnum,
+ language: PromptLanguageEnum,
+ *,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetCustomTextsByLanguageResponseContent:
+ """
+ Retrieve custom text for a specific prompt and language.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt.
+
+ language : PromptLanguageEnum
+ Language to update.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCustomTextsByLanguageResponseContent
+ Prompt dictionaries successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.prompts.custom_text.get(
+ prompt="login",
+ language="am",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(prompt, language, request_options=request_options)
+ return _response.data
+
+ async def set(
+ self,
+ prompt: PromptGroupNameEnum,
+ language: PromptLanguageEnum,
+ *,
+ request: SetsCustomTextsByLanguageRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Set custom text for a specific prompt. Existing texts will be overwritten.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt.
+
+ language : PromptLanguageEnum
+ Language to update.
+
+ request : SetsCustomTextsByLanguageRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.prompts.custom_text.set(
+ prompt="login",
+ language="am",
+ request={"key": "value"},
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.set(prompt, language, request=request, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/prompts/custom_text/raw_client.py b/src/auth0/management/prompts/custom_text/raw_client.py
new file mode 100644
index 00000000..6a48c61d
--- /dev/null
+++ b/src/auth0/management/prompts/custom_text/raw_client.py
@@ -0,0 +1,415 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.get_custom_texts_by_language_response_content import GetCustomTextsByLanguageResponseContent
+from ...types.prompt_group_name_enum import PromptGroupNameEnum
+from ...types.prompt_language_enum import PromptLanguageEnum
+from ...types.sets_custom_texts_by_language_request_content import SetsCustomTextsByLanguageRequestContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawCustomTextClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self,
+ prompt: PromptGroupNameEnum,
+ language: PromptLanguageEnum,
+ *,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[GetCustomTextsByLanguageResponseContent]:
+ """
+ Retrieve custom text for a specific prompt and language.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt.
+
+ language : PromptLanguageEnum
+ Language to update.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetCustomTextsByLanguageResponseContent]
+ Prompt dictionaries successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/custom-text/{jsonable_encoder(language)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCustomTextsByLanguageResponseContent,
+ parse_obj_as(
+ type_=GetCustomTextsByLanguageResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def set(
+ self,
+ prompt: PromptGroupNameEnum,
+ language: PromptLanguageEnum,
+ *,
+ request: SetsCustomTextsByLanguageRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Set custom text for a specific prompt. Existing texts will be overwritten.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt.
+
+ language : PromptLanguageEnum
+ Language to update.
+
+ request : SetsCustomTextsByLanguageRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/custom-text/{jsonable_encoder(language)}",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawCustomTextClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self,
+ prompt: PromptGroupNameEnum,
+ language: PromptLanguageEnum,
+ *,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[GetCustomTextsByLanguageResponseContent]:
+ """
+ Retrieve custom text for a specific prompt and language.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt.
+
+ language : PromptLanguageEnum
+ Language to update.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetCustomTextsByLanguageResponseContent]
+ Prompt dictionaries successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/custom-text/{jsonable_encoder(language)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCustomTextsByLanguageResponseContent,
+ parse_obj_as(
+ type_=GetCustomTextsByLanguageResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def set(
+ self,
+ prompt: PromptGroupNameEnum,
+ language: PromptLanguageEnum,
+ *,
+ request: SetsCustomTextsByLanguageRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Set custom text for a specific prompt. Existing texts will be overwritten.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt.
+
+ language : PromptLanguageEnum
+ Language to update.
+
+ request : SetsCustomTextsByLanguageRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/custom-text/{jsonable_encoder(language)}",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/prompts/partials/__init__.py b/src/auth0/management/prompts/partials/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/prompts/partials/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/prompts/partials/client.py b/src/auth0/management/prompts/partials/client.py
new file mode 100644
index 00000000..c2ddf9db
--- /dev/null
+++ b/src/auth0/management/prompts/partials/client.py
@@ -0,0 +1,205 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.get_partials_response_content import GetPartialsResponseContent
+from ...types.partial_groups_enum import PartialGroupsEnum
+from ...types.set_partials_request_content import SetPartialsRequestContent
+from .raw_client import AsyncRawPartialsClient, RawPartialsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class PartialsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawPartialsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawPartialsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawPartialsClient
+ """
+ return self._raw_client
+
+ def get(
+ self, prompt: PartialGroupsEnum, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetPartialsResponseContent:
+ """
+ Get template partials for a prompt
+
+ Parameters
+ ----------
+ prompt : PartialGroupsEnum
+ Name of the prompt.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetPartialsResponseContent
+ Prompt partials successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.prompts.partials.get(
+ prompt="login",
+ )
+ """
+ _response = self._raw_client.get(prompt, request_options=request_options)
+ return _response.data
+
+ def set(
+ self,
+ prompt: PartialGroupsEnum,
+ *,
+ request: SetPartialsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Set template partials for a prompt
+
+ Parameters
+ ----------
+ prompt : PartialGroupsEnum
+ Name of the prompt.
+
+ request : SetPartialsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.prompts.partials.set(
+ prompt="login",
+ request={"key": "value"},
+ )
+ """
+ _response = self._raw_client.set(prompt, request=request, request_options=request_options)
+ return _response.data
+
+
+class AsyncPartialsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawPartialsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawPartialsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawPartialsClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, prompt: PartialGroupsEnum, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetPartialsResponseContent:
+ """
+ Get template partials for a prompt
+
+ Parameters
+ ----------
+ prompt : PartialGroupsEnum
+ Name of the prompt.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetPartialsResponseContent
+ Prompt partials successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.prompts.partials.get(
+ prompt="login",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(prompt, request_options=request_options)
+ return _response.data
+
+ async def set(
+ self,
+ prompt: PartialGroupsEnum,
+ *,
+ request: SetPartialsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Set template partials for a prompt
+
+ Parameters
+ ----------
+ prompt : PartialGroupsEnum
+ Name of the prompt.
+
+ request : SetPartialsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.prompts.partials.set(
+ prompt="login",
+ request={"key": "value"},
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.set(prompt, request=request, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/prompts/partials/raw_client.py b/src/auth0/management/prompts/partials/raw_client.py
new file mode 100644
index 00000000..d9f38a23
--- /dev/null
+++ b/src/auth0/management/prompts/partials/raw_client.py
@@ -0,0 +1,392 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.get_partials_response_content import GetPartialsResponseContent
+from ...types.partial_groups_enum import PartialGroupsEnum
+from ...types.set_partials_request_content import SetPartialsRequestContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawPartialsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, prompt: PartialGroupsEnum, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetPartialsResponseContent]:
+ """
+ Get template partials for a prompt
+
+ Parameters
+ ----------
+ prompt : PartialGroupsEnum
+ Name of the prompt.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetPartialsResponseContent]
+ Prompt partials successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/partials",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetPartialsResponseContent,
+ parse_obj_as(
+ type_=GetPartialsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def set(
+ self,
+ prompt: PartialGroupsEnum,
+ *,
+ request: SetPartialsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Set template partials for a prompt
+
+ Parameters
+ ----------
+ prompt : PartialGroupsEnum
+ Name of the prompt.
+
+ request : SetPartialsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/partials",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawPartialsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, prompt: PartialGroupsEnum, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetPartialsResponseContent]:
+ """
+ Get template partials for a prompt
+
+ Parameters
+ ----------
+ prompt : PartialGroupsEnum
+ Name of the prompt.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetPartialsResponseContent]
+ Prompt partials successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/partials",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetPartialsResponseContent,
+ parse_obj_as(
+ type_=GetPartialsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def set(
+ self,
+ prompt: PartialGroupsEnum,
+ *,
+ request: SetPartialsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Set template partials for a prompt
+
+ Parameters
+ ----------
+ prompt : PartialGroupsEnum
+ Name of the prompt.
+
+ request : SetPartialsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/partials",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/prompts/raw_client.py b/src/auth0/management/prompts/raw_client.py
new file mode 100644
index 00000000..782401d2
--- /dev/null
+++ b/src/auth0/management/prompts/raw_client.py
@@ -0,0 +1,372 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.get_settings_response_content import GetSettingsResponseContent
+from ..types.universal_login_experience_enum import UniversalLoginExperienceEnum
+from ..types.update_settings_response_content import UpdateSettingsResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawPromptsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get_settings(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetSettingsResponseContent]:
+ """
+ Retrieve details of the Universal Login configuration of your tenant. This includes the Identifier First Authentication and WebAuthn with Device Biometrics for MFA features.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetSettingsResponseContent]
+ Prompt settings successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "prompts",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSettingsResponseContent,
+ parse_obj_as(
+ type_=GetSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update_settings(
+ self,
+ *,
+ universal_login_experience: typing.Optional[UniversalLoginExperienceEnum] = OMIT,
+ identifier_first: typing.Optional[bool] = OMIT,
+ webauthn_platform_first_factor: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateSettingsResponseContent]:
+ """
+ Update the Universal Login configuration of your tenant. This includes the Identifier First Authentication and WebAuthn with Device Biometrics for MFA features.
+
+ Parameters
+ ----------
+ universal_login_experience : typing.Optional[UniversalLoginExperienceEnum]
+
+ identifier_first : typing.Optional[bool]
+ Whether identifier first is enabled or not
+
+ webauthn_platform_first_factor : typing.Optional[bool]
+ Use WebAuthn with Device Biometrics as the first authentication factor
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateSettingsResponseContent]
+ Prompts settings successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "prompts",
+ method="PATCH",
+ json={
+ "universal_login_experience": universal_login_experience,
+ "identifier_first": identifier_first,
+ "webauthn_platform_first_factor": webauthn_platform_first_factor,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawPromptsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get_settings(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetSettingsResponseContent]:
+ """
+ Retrieve details of the Universal Login configuration of your tenant. This includes the Identifier First Authentication and WebAuthn with Device Biometrics for MFA features.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetSettingsResponseContent]
+ Prompt settings successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "prompts",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSettingsResponseContent,
+ parse_obj_as(
+ type_=GetSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update_settings(
+ self,
+ *,
+ universal_login_experience: typing.Optional[UniversalLoginExperienceEnum] = OMIT,
+ identifier_first: typing.Optional[bool] = OMIT,
+ webauthn_platform_first_factor: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateSettingsResponseContent]:
+ """
+ Update the Universal Login configuration of your tenant. This includes the Identifier First Authentication and WebAuthn with Device Biometrics for MFA features.
+
+ Parameters
+ ----------
+ universal_login_experience : typing.Optional[UniversalLoginExperienceEnum]
+
+ identifier_first : typing.Optional[bool]
+ Whether identifier first is enabled or not
+
+ webauthn_platform_first_factor : typing.Optional[bool]
+ Use WebAuthn with Device Biometrics as the first authentication factor
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateSettingsResponseContent]
+ Prompts settings successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "prompts",
+ method="PATCH",
+ json={
+ "universal_login_experience": universal_login_experience,
+ "identifier_first": identifier_first,
+ "webauthn_platform_first_factor": webauthn_platform_first_factor,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/prompts/rendering/__init__.py b/src/auth0/management/prompts/rendering/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/prompts/rendering/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/prompts/rendering/client.py b/src/auth0/management/prompts/rendering/client.py
new file mode 100644
index 00000000..0427c322
--- /dev/null
+++ b/src/auth0/management/prompts/rendering/client.py
@@ -0,0 +1,558 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.acul_configs import AculConfigs
+from ...types.acul_context_configuration import AculContextConfiguration
+from ...types.acul_filters import AculFilters
+from ...types.acul_head_tag import AculHeadTag
+from ...types.acul_rendering_mode_enum import AculRenderingModeEnum
+from ...types.acul_response_content import AculResponseContent
+from ...types.bulk_update_acul_response_content import BulkUpdateAculResponseContent
+from ...types.get_acul_response_content import GetAculResponseContent
+from ...types.list_aculs_offset_paginated_response_content import ListAculsOffsetPaginatedResponseContent
+from ...types.prompt_group_name_enum import PromptGroupNameEnum
+from ...types.screen_group_name_enum import ScreenGroupNameEnum
+from ...types.update_acul_response_content import UpdateAculResponseContent
+from .raw_client import AsyncRawRenderingClient, RawRenderingClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RenderingClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawRenderingClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawRenderingClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawRenderingClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ prompt: typing.Optional[str] = None,
+ screen: typing.Optional[str] = None,
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[AculResponseContent, ListAculsOffsetPaginatedResponseContent]:
+ """
+ Get render setting configurations for all screens.
+
+ Parameters
+ ----------
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (default: true) or excluded (false).
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Maximum value is 100, default value is 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total configuration count (true) or as a direct array of results (false, default).
+
+ prompt : typing.Optional[str]
+ Name of the prompt to filter by
+
+ screen : typing.Optional[str]
+ Name of the screen to filter by
+
+ rendering_mode : typing.Optional[AculRenderingModeEnum]
+ Rendering mode to filter by
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[AculResponseContent, ListAculsOffsetPaginatedResponseContent]
+ ACUL settings successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.prompts.rendering.list(
+ fields="fields",
+ include_fields=True,
+ page=1,
+ per_page=1,
+ include_totals=True,
+ prompt="prompt",
+ screen="screen",
+ rendering_mode="advanced",
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ fields=fields,
+ include_fields=include_fields,
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ prompt=prompt,
+ screen=screen,
+ rendering_mode=rendering_mode,
+ request_options=request_options,
+ )
+
+ def bulk_update(
+ self, *, configs: AculConfigs, request_options: typing.Optional[RequestOptions] = None
+ ) -> BulkUpdateAculResponseContent:
+ """
+ Learn more about configuring render settings for advanced customization.
+
+ Parameters
+ ----------
+ configs : AculConfigs
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ BulkUpdateAculResponseContent
+ ACUL settings successfully updated.
+
+ Examples
+ --------
+ from auth0 import AculConfigsItem, Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.prompts.rendering.bulk_update(
+ configs=[
+ AculConfigsItem(
+ prompt="login",
+ screen="login",
+ )
+ ],
+ )
+ """
+ _response = self._raw_client.bulk_update(configs=configs, request_options=request_options)
+ return _response.data
+
+ def get(
+ self,
+ prompt: PromptGroupNameEnum,
+ screen: ScreenGroupNameEnum,
+ *,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetAculResponseContent:
+ """
+ Get render settings for a screen.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt
+
+ screen : ScreenGroupNameEnum
+ Name of the screen
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetAculResponseContent
+ ACUL settings successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.prompts.rendering.get(
+ prompt="login",
+ screen="login",
+ )
+ """
+ _response = self._raw_client.get(prompt, screen, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ prompt: PromptGroupNameEnum,
+ screen: ScreenGroupNameEnum,
+ *,
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = OMIT,
+ context_configuration: typing.Optional[AculContextConfiguration] = OMIT,
+ default_head_tags_disabled: typing.Optional[bool] = False,
+ use_page_template: typing.Optional[bool] = False,
+ head_tags: typing.Optional[typing.Sequence[AculHeadTag]] = OMIT,
+ filters: typing.Optional[AculFilters] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateAculResponseContent:
+ """
+ Learn more about configuring render settings for advanced customization.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt
+
+ screen : ScreenGroupNameEnum
+ Name of the screen
+
+ rendering_mode : typing.Optional[AculRenderingModeEnum]
+
+ context_configuration : typing.Optional[AculContextConfiguration]
+
+ default_head_tags_disabled : typing.Optional[bool]
+ Override Universal Login default head tags
+
+ use_page_template : typing.Optional[bool]
+ Use page template with ACUL
+
+ head_tags : typing.Optional[typing.Sequence[AculHeadTag]]
+ An array of head tags
+
+ filters : typing.Optional[AculFilters]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateAculResponseContent
+ ACUL settings successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.prompts.rendering.update(
+ prompt="login",
+ screen="login",
+ )
+ """
+ _response = self._raw_client.update(
+ prompt,
+ screen,
+ rendering_mode=rendering_mode,
+ context_configuration=context_configuration,
+ default_head_tags_disabled=default_head_tags_disabled,
+ use_page_template=use_page_template,
+ head_tags=head_tags,
+ filters=filters,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncRenderingClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawRenderingClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawRenderingClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawRenderingClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ prompt: typing.Optional[str] = None,
+ screen: typing.Optional[str] = None,
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[AculResponseContent, ListAculsOffsetPaginatedResponseContent]:
+ """
+ Get render setting configurations for all screens.
+
+ Parameters
+ ----------
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (default: true) or excluded (false).
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Maximum value is 100, default value is 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total configuration count (true) or as a direct array of results (false, default).
+
+ prompt : typing.Optional[str]
+ Name of the prompt to filter by
+
+ screen : typing.Optional[str]
+ Name of the screen to filter by
+
+ rendering_mode : typing.Optional[AculRenderingModeEnum]
+ Rendering mode to filter by
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[AculResponseContent, ListAculsOffsetPaginatedResponseContent]
+ ACUL settings successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.prompts.rendering.list(
+ fields="fields",
+ include_fields=True,
+ page=1,
+ per_page=1,
+ include_totals=True,
+ prompt="prompt",
+ screen="screen",
+ rendering_mode="advanced",
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ fields=fields,
+ include_fields=include_fields,
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ prompt=prompt,
+ screen=screen,
+ rendering_mode=rendering_mode,
+ request_options=request_options,
+ )
+
+ async def bulk_update(
+ self, *, configs: AculConfigs, request_options: typing.Optional[RequestOptions] = None
+ ) -> BulkUpdateAculResponseContent:
+ """
+ Learn more about configuring render settings for advanced customization.
+
+ Parameters
+ ----------
+ configs : AculConfigs
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ BulkUpdateAculResponseContent
+ ACUL settings successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AculConfigsItem, AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.prompts.rendering.bulk_update(
+ configs=[
+ AculConfigsItem(
+ prompt="login",
+ screen="login",
+ )
+ ],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.bulk_update(configs=configs, request_options=request_options)
+ return _response.data
+
+ async def get(
+ self,
+ prompt: PromptGroupNameEnum,
+ screen: ScreenGroupNameEnum,
+ *,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetAculResponseContent:
+ """
+ Get render settings for a screen.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt
+
+ screen : ScreenGroupNameEnum
+ Name of the screen
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetAculResponseContent
+ ACUL settings successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.prompts.rendering.get(
+ prompt="login",
+ screen="login",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(prompt, screen, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ prompt: PromptGroupNameEnum,
+ screen: ScreenGroupNameEnum,
+ *,
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = OMIT,
+ context_configuration: typing.Optional[AculContextConfiguration] = OMIT,
+ default_head_tags_disabled: typing.Optional[bool] = False,
+ use_page_template: typing.Optional[bool] = False,
+ head_tags: typing.Optional[typing.Sequence[AculHeadTag]] = OMIT,
+ filters: typing.Optional[AculFilters] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateAculResponseContent:
+ """
+ Learn more about configuring render settings for advanced customization.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt
+
+ screen : ScreenGroupNameEnum
+ Name of the screen
+
+ rendering_mode : typing.Optional[AculRenderingModeEnum]
+
+ context_configuration : typing.Optional[AculContextConfiguration]
+
+ default_head_tags_disabled : typing.Optional[bool]
+ Override Universal Login default head tags
+
+ use_page_template : typing.Optional[bool]
+ Use page template with ACUL
+
+ head_tags : typing.Optional[typing.Sequence[AculHeadTag]]
+ An array of head tags
+
+ filters : typing.Optional[AculFilters]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateAculResponseContent
+ ACUL settings successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.prompts.rendering.update(
+ prompt="login",
+ screen="login",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ prompt,
+ screen,
+ rendering_mode=rendering_mode,
+ context_configuration=context_configuration,
+ default_head_tags_disabled=default_head_tags_disabled,
+ use_page_template=use_page_template,
+ head_tags=head_tags,
+ filters=filters,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/prompts/rendering/raw_client.py b/src/auth0/management/prompts/rendering/raw_client.py
new file mode 100644
index 00000000..73a6bad8
--- /dev/null
+++ b/src/auth0/management/prompts/rendering/raw_client.py
@@ -0,0 +1,1055 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.payment_required_error import PaymentRequiredError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.acul_configs import AculConfigs
+from ...types.acul_context_configuration import AculContextConfiguration
+from ...types.acul_filters import AculFilters
+from ...types.acul_head_tag import AculHeadTag
+from ...types.acul_rendering_mode_enum import AculRenderingModeEnum
+from ...types.acul_response_content import AculResponseContent
+from ...types.bulk_update_acul_response_content import BulkUpdateAculResponseContent
+from ...types.get_acul_response_content import GetAculResponseContent
+from ...types.list_aculs_offset_paginated_response_content import ListAculsOffsetPaginatedResponseContent
+from ...types.prompt_group_name_enum import PromptGroupNameEnum
+from ...types.screen_group_name_enum import ScreenGroupNameEnum
+from ...types.update_acul_response_content import UpdateAculResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawRenderingClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ prompt: typing.Optional[str] = None,
+ screen: typing.Optional[str] = None,
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[AculResponseContent, ListAculsOffsetPaginatedResponseContent]:
+ """
+ Get render setting configurations for all screens.
+
+ Parameters
+ ----------
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (default: true) or excluded (false).
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Maximum value is 100, default value is 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total configuration count (true) or as a direct array of results (false, default).
+
+ prompt : typing.Optional[str]
+ Name of the prompt to filter by
+
+ screen : typing.Optional[str]
+ Name of the screen to filter by
+
+ rendering_mode : typing.Optional[AculRenderingModeEnum]
+ Rendering mode to filter by
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[AculResponseContent, ListAculsOffsetPaginatedResponseContent]
+ ACUL settings successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "prompts/rendering",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "prompt": prompt,
+ "screen": screen,
+ "rendering_mode": rendering_mode,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListAculsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListAculsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.configs
+ _has_next = True
+ _get_next = lambda: self.list(
+ fields=fields,
+ include_fields=include_fields,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ prompt=prompt,
+ screen=screen,
+ rendering_mode=rendering_mode,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def bulk_update(
+ self, *, configs: AculConfigs, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[BulkUpdateAculResponseContent]:
+ """
+ Learn more about configuring render settings for advanced customization.
+
+ Parameters
+ ----------
+ configs : AculConfigs
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[BulkUpdateAculResponseContent]
+ ACUL settings successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "prompts/rendering",
+ method="PATCH",
+ json={
+ "configs": convert_and_respect_annotation_metadata(
+ object_=configs, annotation=AculConfigs, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ BulkUpdateAculResponseContent,
+ parse_obj_as(
+ type_=BulkUpdateAculResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self,
+ prompt: PromptGroupNameEnum,
+ screen: ScreenGroupNameEnum,
+ *,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[GetAculResponseContent]:
+ """
+ Get render settings for a screen.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt
+
+ screen : ScreenGroupNameEnum
+ Name of the screen
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetAculResponseContent]
+ ACUL settings successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/screen/{jsonable_encoder(screen)}/rendering",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetAculResponseContent,
+ parse_obj_as(
+ type_=GetAculResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ prompt: PromptGroupNameEnum,
+ screen: ScreenGroupNameEnum,
+ *,
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = OMIT,
+ context_configuration: typing.Optional[AculContextConfiguration] = OMIT,
+ default_head_tags_disabled: typing.Optional[bool] = False,
+ use_page_template: typing.Optional[bool] = False,
+ head_tags: typing.Optional[typing.Sequence[AculHeadTag]] = OMIT,
+ filters: typing.Optional[AculFilters] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateAculResponseContent]:
+ """
+ Learn more about configuring render settings for advanced customization.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt
+
+ screen : ScreenGroupNameEnum
+ Name of the screen
+
+ rendering_mode : typing.Optional[AculRenderingModeEnum]
+
+ context_configuration : typing.Optional[AculContextConfiguration]
+
+ default_head_tags_disabled : typing.Optional[bool]
+ Override Universal Login default head tags
+
+ use_page_template : typing.Optional[bool]
+ Use page template with ACUL
+
+ head_tags : typing.Optional[typing.Sequence[AculHeadTag]]
+ An array of head tags
+
+ filters : typing.Optional[AculFilters]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateAculResponseContent]
+ ACUL settings successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/screen/{jsonable_encoder(screen)}/rendering",
+ method="PATCH",
+ json={
+ "rendering_mode": rendering_mode,
+ "context_configuration": convert_and_respect_annotation_metadata(
+ object_=context_configuration, annotation=AculContextConfiguration, direction="write"
+ ),
+ "default_head_tags_disabled": default_head_tags_disabled,
+ "use_page_template": use_page_template,
+ "head_tags": convert_and_respect_annotation_metadata(
+ object_=head_tags, annotation=typing.Sequence[AculHeadTag], direction="write"
+ ),
+ "filters": convert_and_respect_annotation_metadata(
+ object_=filters, annotation=typing.Optional[AculFilters], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateAculResponseContent,
+ parse_obj_as(
+ type_=UpdateAculResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawRenderingClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ prompt: typing.Optional[str] = None,
+ screen: typing.Optional[str] = None,
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[AculResponseContent, ListAculsOffsetPaginatedResponseContent]:
+ """
+ Get render setting configurations for all screens.
+
+ Parameters
+ ----------
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (default: true) or excluded (false).
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Maximum value is 100, default value is 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total configuration count (true) or as a direct array of results (false, default).
+
+ prompt : typing.Optional[str]
+ Name of the prompt to filter by
+
+ screen : typing.Optional[str]
+ Name of the screen to filter by
+
+ rendering_mode : typing.Optional[AculRenderingModeEnum]
+ Rendering mode to filter by
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[AculResponseContent, ListAculsOffsetPaginatedResponseContent]
+ ACUL settings successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "prompts/rendering",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "prompt": prompt,
+ "screen": screen,
+ "rendering_mode": rendering_mode,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListAculsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListAculsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.configs
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ fields=fields,
+ include_fields=include_fields,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ prompt=prompt,
+ screen=screen,
+ rendering_mode=rendering_mode,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def bulk_update(
+ self, *, configs: AculConfigs, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[BulkUpdateAculResponseContent]:
+ """
+ Learn more about configuring render settings for advanced customization.
+
+ Parameters
+ ----------
+ configs : AculConfigs
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[BulkUpdateAculResponseContent]
+ ACUL settings successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "prompts/rendering",
+ method="PATCH",
+ json={
+ "configs": convert_and_respect_annotation_metadata(
+ object_=configs, annotation=AculConfigs, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ BulkUpdateAculResponseContent,
+ parse_obj_as(
+ type_=BulkUpdateAculResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self,
+ prompt: PromptGroupNameEnum,
+ screen: ScreenGroupNameEnum,
+ *,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[GetAculResponseContent]:
+ """
+ Get render settings for a screen.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt
+
+ screen : ScreenGroupNameEnum
+ Name of the screen
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetAculResponseContent]
+ ACUL settings successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/screen/{jsonable_encoder(screen)}/rendering",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetAculResponseContent,
+ parse_obj_as(
+ type_=GetAculResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ prompt: PromptGroupNameEnum,
+ screen: ScreenGroupNameEnum,
+ *,
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = OMIT,
+ context_configuration: typing.Optional[AculContextConfiguration] = OMIT,
+ default_head_tags_disabled: typing.Optional[bool] = False,
+ use_page_template: typing.Optional[bool] = False,
+ head_tags: typing.Optional[typing.Sequence[AculHeadTag]] = OMIT,
+ filters: typing.Optional[AculFilters] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateAculResponseContent]:
+ """
+ Learn more about configuring render settings for advanced customization.
+
+ Parameters
+ ----------
+ prompt : PromptGroupNameEnum
+ Name of the prompt
+
+ screen : ScreenGroupNameEnum
+ Name of the screen
+
+ rendering_mode : typing.Optional[AculRenderingModeEnum]
+
+ context_configuration : typing.Optional[AculContextConfiguration]
+
+ default_head_tags_disabled : typing.Optional[bool]
+ Override Universal Login default head tags
+
+ use_page_template : typing.Optional[bool]
+ Use page template with ACUL
+
+ head_tags : typing.Optional[typing.Sequence[AculHeadTag]]
+ An array of head tags
+
+ filters : typing.Optional[AculFilters]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateAculResponseContent]
+ ACUL settings successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"prompts/{jsonable_encoder(prompt)}/screen/{jsonable_encoder(screen)}/rendering",
+ method="PATCH",
+ json={
+ "rendering_mode": rendering_mode,
+ "context_configuration": convert_and_respect_annotation_metadata(
+ object_=context_configuration, annotation=AculContextConfiguration, direction="write"
+ ),
+ "default_head_tags_disabled": default_head_tags_disabled,
+ "use_page_template": use_page_template,
+ "head_tags": convert_and_respect_annotation_metadata(
+ object_=head_tags, annotation=typing.Sequence[AculHeadTag], direction="write"
+ ),
+ "filters": convert_and_respect_annotation_metadata(
+ object_=filters, annotation=typing.Optional[AculFilters], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateAculResponseContent,
+ parse_obj_as(
+ type_=UpdateAculResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 402:
+ raise PaymentRequiredError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/auth0/test/__init__.py b/src/auth0/management/py.typed
similarity index 100%
rename from auth0/test/__init__.py
rename to src/auth0/management/py.typed
diff --git a/src/auth0/management/refresh_tokens/__init__.py b/src/auth0/management/refresh_tokens/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/refresh_tokens/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/refresh_tokens/client.py b/src/auth0/management/refresh_tokens/client.py
new file mode 100644
index 00000000..bf6db6d3
--- /dev/null
+++ b/src/auth0/management/refresh_tokens/client.py
@@ -0,0 +1,182 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.get_refresh_token_response_content import GetRefreshTokenResponseContent
+from .raw_client import AsyncRawRefreshTokensClient, RawRefreshTokensClient
+
+
+class RefreshTokensClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawRefreshTokensClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawRefreshTokensClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawRefreshTokensClient
+ """
+ return self._raw_client
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetRefreshTokenResponseContent:
+ """
+ Retrieve refresh token information.
+
+ Parameters
+ ----------
+ id : str
+ ID refresh token to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetRefreshTokenResponseContent
+ The refresh token was retrieved
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.refresh_tokens.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a refresh token by its ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the refresh token to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.refresh_tokens.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncRefreshTokensClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawRefreshTokensClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawRefreshTokensClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawRefreshTokensClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetRefreshTokenResponseContent:
+ """
+ Retrieve refresh token information.
+
+ Parameters
+ ----------
+ id : str
+ ID refresh token to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetRefreshTokenResponseContent
+ The refresh token was retrieved
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.refresh_tokens.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a refresh token by its ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the refresh token to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.refresh_tokens.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/refresh_tokens/raw_client.py b/src/auth0/management/refresh_tokens/raw_client.py
new file mode 100644
index 00000000..0a4df9af
--- /dev/null
+++ b/src/auth0/management/refresh_tokens/raw_client.py
@@ -0,0 +1,341 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.get_refresh_token_response_content import GetRefreshTokenResponseContent
+
+
+class RawRefreshTokensClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetRefreshTokenResponseContent]:
+ """
+ Retrieve refresh token information.
+
+ Parameters
+ ----------
+ id : str
+ ID refresh token to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetRefreshTokenResponseContent]
+ The refresh token was retrieved
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"refresh-tokens/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetRefreshTokenResponseContent,
+ parse_obj_as(
+ type_=GetRefreshTokenResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a refresh token by its ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the refresh token to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"refresh-tokens/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawRefreshTokensClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetRefreshTokenResponseContent]:
+ """
+ Retrieve refresh token information.
+
+ Parameters
+ ----------
+ id : str
+ ID refresh token to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetRefreshTokenResponseContent]
+ The refresh token was retrieved
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"refresh-tokens/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetRefreshTokenResponseContent,
+ parse_obj_as(
+ type_=GetRefreshTokenResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a refresh token by its ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the refresh token to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"refresh-tokens/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/resource_servers/__init__.py b/src/auth0/management/resource_servers/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/resource_servers/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/resource_servers/client.py b/src/auth0/management/resource_servers/client.py
new file mode 100644
index 00000000..7603efd3
--- /dev/null
+++ b/src/auth0/management/resource_servers/client.py
@@ -0,0 +1,780 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.create_resource_server_response_content import CreateResourceServerResponseContent
+from ..types.get_resource_server_response_content import GetResourceServerResponseContent
+from ..types.list_resource_server_offset_paginated_response_content import (
+ ListResourceServerOffsetPaginatedResponseContent,
+)
+from ..types.resource_server import ResourceServer
+from ..types.resource_server_consent_policy_enum import ResourceServerConsentPolicyEnum
+from ..types.resource_server_proof_of_possession import ResourceServerProofOfPossession
+from ..types.resource_server_scope import ResourceServerScope
+from ..types.resource_server_subject_type_authorization import ResourceServerSubjectTypeAuthorization
+from ..types.resource_server_token_dialect_schema_enum import ResourceServerTokenDialectSchemaEnum
+from ..types.resource_server_token_encryption import ResourceServerTokenEncryption
+from ..types.signing_algorithm_enum import SigningAlgorithmEnum
+from ..types.update_resource_server_response_content import UpdateResourceServerResponseContent
+from .raw_client import AsyncRawResourceServersClient, RawResourceServersClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class ResourceServersClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawResourceServersClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawResourceServersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawResourceServersClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ identifiers: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ResourceServer, ListResourceServerOffsetPaginatedResponseContent]:
+ """
+ Retrieve details of all APIs associated with your tenant.
+
+ Parameters
+ ----------
+ identifiers : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ An optional filter on the resource server identifier. Must be URL encoded and may be specified multiple times (max 10).from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ id : str
+ ID of the role to retrieve a list of users associated with.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[RoleUser, ListRoleUsersPaginatedResponseContent]
+ Role users successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.roles.users.list(
+ id="id",
+ from_="from",
+ take=1,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(id, from_=from_, take=take, request_options=request_options)
+
+ def assign(
+ self, id: str, *, users: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Assign one or more users to an existing user role. To learn more, review Role-Based Access Control.
+
+ Note: New roles cannot be created through this action.
+
+ Parameters
+ ----------
+ id : str
+ ID of the role to assign users to.
+
+ users : typing.Sequence[str]
+ user_id's of the users to assign the role to.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.roles.users.assign(
+ id="id",
+ users=["users"],
+ )
+ """
+ _response = self._raw_client.assign(id, users=users, request_options=request_options)
+ return _response.data
+
+
+class AsyncUsersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawUsersClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawUsersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawUsersClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[RoleUser, ListRoleUsersPaginatedResponseContent]:
+ """
+ Retrieve list of users associated with a specific role. For Dashboard instructions, review View Users Assigned to Roles.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ id : str
+ ID of the role to retrieve a list of users associated with.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[RoleUser, ListRoleUsersPaginatedResponseContent]
+ Role users successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.roles.users.list(
+ id="id",
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(id, from_=from_, take=take, request_options=request_options)
+
+ async def assign(
+ self, id: str, *, users: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Assign one or more users to an existing user role. To learn more, review Role-Based Access Control.
+
+ Note: New roles cannot be created through this action.
+
+ Parameters
+ ----------
+ id : str
+ ID of the role to assign users to.
+
+ users : typing.Sequence[str]
+ user_id's of the users to assign the role to.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.roles.users.assign(
+ id="id",
+ users=["users"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.assign(id, users=users, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/roles/users/raw_client.py b/src/auth0/management/roles/users/raw_client.py
new file mode 100644
index 00000000..e2b45a80
--- /dev/null
+++ b/src/auth0/management/roles/users/raw_client.py
@@ -0,0 +1,503 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.list_role_users_paginated_response_content import ListRoleUsersPaginatedResponseContent
+from ...types.role_user import RoleUser
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawUsersClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[RoleUser, ListRoleUsersPaginatedResponseContent]:
+ """
+ Retrieve list of users associated with a specific role. For Dashboard instructions, review View Users Assigned to Roles.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ id : str
+ ID of the role to retrieve a list of users associated with.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[RoleUser, ListRoleUsersPaginatedResponseContent]
+ Role users successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"roles/{jsonable_encoder(id)}/users",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListRoleUsersPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListRoleUsersPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.users
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def assign(
+ self, id: str, *, users: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Assign one or more users to an existing user role. To learn more, review Role-Based Access Control.
+
+ Note: New roles cannot be created through this action.
+
+ Parameters
+ ----------
+ id : str
+ ID of the role to assign users to.
+
+ users : typing.Sequence[str]
+ user_id's of the users to assign the role to.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"roles/{jsonable_encoder(id)}/users",
+ method="POST",
+ json={
+ "users": users,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawUsersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[RoleUser, ListRoleUsersPaginatedResponseContent]:
+ """
+ Retrieve list of users associated with a specific role. For Dashboard instructions, review View Users Assigned to Roles.
+
+ This endpoint supports two types of pagination:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ id : str
+ ID of the role to retrieve a list of users associated with.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[RoleUser, ListRoleUsersPaginatedResponseContent]
+ Role users successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"roles/{jsonable_encoder(id)}/users",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListRoleUsersPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListRoleUsersPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.users
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def assign(
+ self, id: str, *, users: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Assign one or more users to an existing user role. To learn more, review Role-Based Access Control.
+
+ Note: New roles cannot be created through this action.
+
+ Parameters
+ ----------
+ id : str
+ ID of the role to assign users to.
+
+ users : typing.Sequence[str]
+ user_id's of the users to assign the role to.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"roles/{jsonable_encoder(id)}/users",
+ method="POST",
+ json={
+ "users": users,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/rules/__init__.py b/src/auth0/management/rules/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/rules/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/rules/client.py b/src/auth0/management/rules/client.py
new file mode 100644
index 00000000..03ead716
--- /dev/null
+++ b/src/auth0/management/rules/client.py
@@ -0,0 +1,605 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.create_rule_response_content import CreateRuleResponseContent
+from ..types.get_rule_response_content import GetRuleResponseContent
+from ..types.list_rules_offset_paginated_response_content import ListRulesOffsetPaginatedResponseContent
+from ..types.rule import Rule
+from ..types.update_rule_response_content import UpdateRuleResponseContent
+from .raw_client import AsyncRawRulesClient, RawRulesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RulesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawRulesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawRulesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawRulesClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ enabled: typing.Optional[bool] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Rule, ListRulesOffsetPaginatedResponseContent]:
+ """
+ Retrieve a filtered list of rules. Accepts a list of fields to include or exclude.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ enabled : typing.Optional[bool]
+ Optional filter on whether a rule is enabled (true) or disabled (false).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Rule, ListRulesOffsetPaginatedResponseContent]
+ Rules successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.rules.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ enabled=True,
+ fields="fields",
+ include_fields=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ enabled=enabled,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+
+ def create(
+ self,
+ *,
+ name: str = "my-rule",
+ script: str = "function (user, context, callback) {\n callback(null, user, context);\n}",
+ order: typing.Optional[float] = 2.0,
+ enabled: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateRuleResponseContent:
+ """
+ Create a new rule.
+
+ Note: Changing a rule's stage of execution from the default login_success can change the rule's function signature to have user omitted.
+
+ Parameters
+ ----------
+ name : str
+ Name of this rule.
+
+ script : str
+ Code to be executed when this rule runs.
+
+ order : typing.Optional[float]
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+
+ enabled : typing.Optional[bool]
+ Whether the rule is enabled (true), or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateRuleResponseContent
+ Rule successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.rules.create(
+ name="name",
+ script="script",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name, script=script, order=order, enabled=enabled, request_options=request_options
+ )
+ return _response.data
+
+ def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetRuleResponseContent:
+ """
+ Retrieve rule details. Accepts a list of fields to include or exclude in the result.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetRuleResponseContent
+ Rule successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.rules.get(
+ id="id",
+ fields="fields",
+ include_fields=True,
+ )
+ """
+ _response = self._raw_client.get(
+ id, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a rule.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.rules.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ script: typing.Optional[str] = "function (user, context, callback) {\n callback(null, user, context);\n}",
+ name: typing.Optional[str] = "my-rule",
+ order: typing.Optional[float] = 2.0,
+ enabled: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateRuleResponseContent:
+ """
+ Update an existing rule.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to retrieve.
+
+ script : typing.Optional[str]
+ Code to be executed when this rule runs.
+
+ name : typing.Optional[str]
+ Name of this rule.
+
+ order : typing.Optional[float]
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+
+ enabled : typing.Optional[bool]
+ Whether the rule is enabled (true), or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateRuleResponseContent
+ Rule successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.rules.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id, script=script, name=name, order=order, enabled=enabled, request_options=request_options
+ )
+ return _response.data
+
+
+class AsyncRulesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawRulesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawRulesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawRulesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ enabled: typing.Optional[bool] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Rule, ListRulesOffsetPaginatedResponseContent]:
+ """
+ Retrieve a filtered list of rules. Accepts a list of fields to include or exclude.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ enabled : typing.Optional[bool]
+ Optional filter on whether a rule is enabled (true) or disabled (false).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Rule, ListRulesOffsetPaginatedResponseContent]
+ Rules successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.rules.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ enabled=True,
+ fields="fields",
+ include_fields=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ enabled=enabled,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+
+ async def create(
+ self,
+ *,
+ name: str = "my-rule",
+ script: str = "function (user, context, callback) {\n callback(null, user, context);\n}",
+ order: typing.Optional[float] = 2.0,
+ enabled: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateRuleResponseContent:
+ """
+ Create a new rule.
+
+ Note: Changing a rule's stage of execution from the default login_success can change the rule's function signature to have user omitted.
+
+ Parameters
+ ----------
+ name : str
+ Name of this rule.
+
+ script : str
+ Code to be executed when this rule runs.
+
+ order : typing.Optional[float]
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+
+ enabled : typing.Optional[bool]
+ Whether the rule is enabled (true), or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateRuleResponseContent
+ Rule successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.rules.create(
+ name="name",
+ script="script",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name, script=script, order=order, enabled=enabled, request_options=request_options
+ )
+ return _response.data
+
+ async def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetRuleResponseContent:
+ """
+ Retrieve rule details. Accepts a list of fields to include or exclude in the result.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetRuleResponseContent
+ Rule successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.rules.get(
+ id="id",
+ fields="fields",
+ include_fields=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(
+ id, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a rule.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.rules.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ script: typing.Optional[str] = "function (user, context, callback) {\n callback(null, user, context);\n}",
+ name: typing.Optional[str] = "my-rule",
+ order: typing.Optional[float] = 2.0,
+ enabled: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateRuleResponseContent:
+ """
+ Update an existing rule.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to retrieve.
+
+ script : typing.Optional[str]
+ Code to be executed when this rule runs.
+
+ name : typing.Optional[str]
+ Name of this rule.
+
+ order : typing.Optional[float]
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+
+ enabled : typing.Optional[bool]
+ Whether the rule is enabled (true), or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateRuleResponseContent
+ Rule successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.rules.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id, script=script, name=name, order=order, enabled=enabled, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/rules/raw_client.py b/src/auth0/management/rules/raw_client.py
new file mode 100644
index 00000000..199217e7
--- /dev/null
+++ b/src/auth0/management/rules/raw_client.py
@@ -0,0 +1,1191 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.create_rule_response_content import CreateRuleResponseContent
+from ..types.get_rule_response_content import GetRuleResponseContent
+from ..types.list_rules_offset_paginated_response_content import ListRulesOffsetPaginatedResponseContent
+from ..types.rule import Rule
+from ..types.update_rule_response_content import UpdateRuleResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawRulesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ enabled: typing.Optional[bool] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Rule, ListRulesOffsetPaginatedResponseContent]:
+ """
+ Retrieve a filtered list of rules. Accepts a list of fields to include or exclude.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ enabled : typing.Optional[bool]
+ Optional filter on whether a rule is enabled (true) or disabled (false).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Rule, ListRulesOffsetPaginatedResponseContent]
+ Rules successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "rules",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "enabled": enabled,
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListRulesOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListRulesOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.rules
+ _has_next = True
+ _get_next = lambda: self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ enabled=enabled,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: str = "my-rule",
+ script: str = "function (user, context, callback) {\n callback(null, user, context);\n}",
+ order: typing.Optional[float] = 2.0,
+ enabled: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateRuleResponseContent]:
+ """
+ Create a new rule.
+
+ Note: Changing a rule's stage of execution from the default login_success can change the rule's function signature to have user omitted.
+
+ Parameters
+ ----------
+ name : str
+ Name of this rule.
+
+ script : str
+ Code to be executed when this rule runs.
+
+ order : typing.Optional[float]
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+
+ enabled : typing.Optional[bool]
+ Whether the rule is enabled (true), or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateRuleResponseContent]
+ Rule successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "rules",
+ method="POST",
+ json={
+ "name": name,
+ "script": script,
+ "order": order,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateRuleResponseContent,
+ parse_obj_as(
+ type_=CreateRuleResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[GetRuleResponseContent]:
+ """
+ Retrieve rule details. Accepts a list of fields to include or exclude in the result.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetRuleResponseContent]
+ Rule successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"rules/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetRuleResponseContent,
+ parse_obj_as(
+ type_=GetRuleResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a rule.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"rules/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ script: typing.Optional[str] = "function (user, context, callback) {\n callback(null, user, context);\n}",
+ name: typing.Optional[str] = "my-rule",
+ order: typing.Optional[float] = 2.0,
+ enabled: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateRuleResponseContent]:
+ """
+ Update an existing rule.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to retrieve.
+
+ script : typing.Optional[str]
+ Code to be executed when this rule runs.
+
+ name : typing.Optional[str]
+ Name of this rule.
+
+ order : typing.Optional[float]
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+
+ enabled : typing.Optional[bool]
+ Whether the rule is enabled (true), or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateRuleResponseContent]
+ Rule successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"rules/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "script": script,
+ "name": name,
+ "order": order,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateRuleResponseContent,
+ parse_obj_as(
+ type_=UpdateRuleResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawRulesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ enabled: typing.Optional[bool] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Rule, ListRulesOffsetPaginatedResponseContent]:
+ """
+ Retrieve a filtered list of rules. Accepts a list of fields to include or exclude.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ enabled : typing.Optional[bool]
+ Optional filter on whether a rule is enabled (true) or disabled (false).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Rule, ListRulesOffsetPaginatedResponseContent]
+ Rules successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "rules",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "enabled": enabled,
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListRulesOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListRulesOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.rules
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ enabled=enabled,
+ fields=fields,
+ include_fields=include_fields,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: str = "my-rule",
+ script: str = "function (user, context, callback) {\n callback(null, user, context);\n}",
+ order: typing.Optional[float] = 2.0,
+ enabled: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateRuleResponseContent]:
+ """
+ Create a new rule.
+
+ Note: Changing a rule's stage of execution from the default login_success can change the rule's function signature to have user omitted.
+
+ Parameters
+ ----------
+ name : str
+ Name of this rule.
+
+ script : str
+ Code to be executed when this rule runs.
+
+ order : typing.Optional[float]
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+
+ enabled : typing.Optional[bool]
+ Whether the rule is enabled (true), or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateRuleResponseContent]
+ Rule successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "rules",
+ method="POST",
+ json={
+ "name": name,
+ "script": script,
+ "order": order,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateRuleResponseContent,
+ parse_obj_as(
+ type_=CreateRuleResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[GetRuleResponseContent]:
+ """
+ Retrieve rule details. Accepts a list of fields to include or exclude in the result.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetRuleResponseContent]
+ Rule successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"rules/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetRuleResponseContent,
+ parse_obj_as(
+ type_=GetRuleResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a rule.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"rules/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ script: typing.Optional[str] = "function (user, context, callback) {\n callback(null, user, context);\n}",
+ name: typing.Optional[str] = "my-rule",
+ order: typing.Optional[float] = 2.0,
+ enabled: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateRuleResponseContent]:
+ """
+ Update an existing rule.
+
+ Parameters
+ ----------
+ id : str
+ ID of the rule to retrieve.
+
+ script : typing.Optional[str]
+ Code to be executed when this rule runs.
+
+ name : typing.Optional[str]
+ Name of this rule.
+
+ order : typing.Optional[float]
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+
+ enabled : typing.Optional[bool]
+ Whether the rule is enabled (true), or disabled (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateRuleResponseContent]
+ Rule successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"rules/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "script": script,
+ "name": name,
+ "order": order,
+ "enabled": enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateRuleResponseContent,
+ parse_obj_as(
+ type_=UpdateRuleResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/rules_configs/__init__.py b/src/auth0/management/rules_configs/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/rules_configs/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/rules_configs/client.py b/src/auth0/management/rules_configs/client.py
new file mode 100644
index 00000000..0a53e9c4
--- /dev/null
+++ b/src/auth0/management/rules_configs/client.py
@@ -0,0 +1,258 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.rules_config import RulesConfig
+from ..types.set_rules_config_response_content import SetRulesConfigResponseContent
+from .raw_client import AsyncRawRulesConfigsClient, RawRulesConfigsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RulesConfigsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawRulesConfigsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawRulesConfigsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawRulesConfigsClient
+ """
+ return self._raw_client
+
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[RulesConfig]:
+ """
+ Retrieve rules config variable keys.
+
+ Note: For security, config variable values cannot be retrieved outside rule execution.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[RulesConfig]
+ Rules config keys successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.rules_configs.list()
+ """
+ _response = self._raw_client.list(request_options=request_options)
+ return _response.data
+
+ def set(
+ self, key: str, *, value: str = "MY_RULES_CONFIG_VALUE", request_options: typing.Optional[RequestOptions] = None
+ ) -> SetRulesConfigResponseContent:
+ """
+ Sets a rules config variable.
+
+ Parameters
+ ----------
+ key : str
+ Key of the rules config variable to set (max length: 127 characters).
+
+ value : str
+ Value for a rules config variable.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetRulesConfigResponseContent
+ Rules config variable successfully set.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.rules_configs.set(
+ key="key",
+ value="value",
+ )
+ """
+ _response = self._raw_client.set(key, value=value, request_options=request_options)
+ return _response.data
+
+ def delete(self, key: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a rules config variable identified by its key.
+
+ Parameters
+ ----------
+ key : str
+ Key of the rules config variable to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.rules_configs.delete(
+ key="key",
+ )
+ """
+ _response = self._raw_client.delete(key, request_options=request_options)
+ return _response.data
+
+
+class AsyncRulesConfigsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawRulesConfigsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawRulesConfigsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawRulesConfigsClient
+ """
+ return self._raw_client
+
+ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[RulesConfig]:
+ """
+ Retrieve rules config variable keys.
+
+ Note: For security, config variable values cannot be retrieved outside rule execution.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[RulesConfig]
+ Rules config keys successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.rules_configs.list()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(request_options=request_options)
+ return _response.data
+
+ async def set(
+ self, key: str, *, value: str = "MY_RULES_CONFIG_VALUE", request_options: typing.Optional[RequestOptions] = None
+ ) -> SetRulesConfigResponseContent:
+ """
+ Sets a rules config variable.
+
+ Parameters
+ ----------
+ key : str
+ Key of the rules config variable to set (max length: 127 characters).
+
+ value : str
+ Value for a rules config variable.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetRulesConfigResponseContent
+ Rules config variable successfully set.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.rules_configs.set(
+ key="key",
+ value="value",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.set(key, value=value, request_options=request_options)
+ return _response.data
+
+ async def delete(self, key: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a rules config variable identified by its key.
+
+ Parameters
+ ----------
+ key : str
+ Key of the rules config variable to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.rules_configs.delete(
+ key="key",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(key, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/rules_configs/raw_client.py b/src/auth0/management/rules_configs/raw_client.py
new file mode 100644
index 00000000..038d95a9
--- /dev/null
+++ b/src/auth0/management/rules_configs/raw_client.py
@@ -0,0 +1,461 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.rules_config import RulesConfig
+from ..types.set_rules_config_response_content import SetRulesConfigResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawRulesConfigsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[typing.List[RulesConfig]]:
+ """
+ Retrieve rules config variable keys.
+
+ Note: For security, config variable values cannot be retrieved outside rule execution.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[RulesConfig]]
+ Rules config keys successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "rules-configs",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[RulesConfig],
+ parse_obj_as(
+ type_=typing.List[RulesConfig], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def set(
+ self, key: str, *, value: str = "MY_RULES_CONFIG_VALUE", request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[SetRulesConfigResponseContent]:
+ """
+ Sets a rules config variable.
+
+ Parameters
+ ----------
+ key : str
+ Key of the rules config variable to set (max length: 127 characters).
+
+ value : str
+ Value for a rules config variable.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[SetRulesConfigResponseContent]
+ Rules config variable successfully set.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"rules-configs/{jsonable_encoder(key)}",
+ method="PUT",
+ json={
+ "value": value,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetRulesConfigResponseContent,
+ parse_obj_as(
+ type_=SetRulesConfigResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, key: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a rules config variable identified by its key.
+
+ Parameters
+ ----------
+ key : str
+ Key of the rules config variable to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"rules-configs/{jsonable_encoder(key)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawRulesConfigsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[typing.List[RulesConfig]]:
+ """
+ Retrieve rules config variable keys.
+
+ Note: For security, config variable values cannot be retrieved outside rule execution.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[RulesConfig]]
+ Rules config keys successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "rules-configs",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[RulesConfig],
+ parse_obj_as(
+ type_=typing.List[RulesConfig], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def set(
+ self, key: str, *, value: str = "MY_RULES_CONFIG_VALUE", request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[SetRulesConfigResponseContent]:
+ """
+ Sets a rules config variable.
+
+ Parameters
+ ----------
+ key : str
+ Key of the rules config variable to set (max length: 127 characters).
+
+ value : str
+ Value for a rules config variable.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[SetRulesConfigResponseContent]
+ Rules config variable successfully set.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"rules-configs/{jsonable_encoder(key)}",
+ method="PUT",
+ json={
+ "value": value,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetRulesConfigResponseContent,
+ parse_obj_as(
+ type_=SetRulesConfigResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, key: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a rules config variable identified by its key.
+
+ Parameters
+ ----------
+ key : str
+ Key of the rules config variable to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"rules-configs/{jsonable_encoder(key)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/self_service_profiles/__init__.py b/src/auth0/management/self_service_profiles/__init__.py
new file mode 100644
index 00000000..17b6e008
--- /dev/null
+++ b/src/auth0/management/self_service_profiles/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import custom_text, sso_ticket
+_dynamic_imports: typing.Dict[str, str] = {"custom_text": ".custom_text", "sso_ticket": ".sso_ticket"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["custom_text", "sso_ticket"]
diff --git a/src/auth0/management/self_service_profiles/client.py b/src/auth0/management/self_service_profiles/client.py
new file mode 100644
index 00000000..f3dd0145
--- /dev/null
+++ b/src/auth0/management/self_service_profiles/client.py
@@ -0,0 +1,628 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.create_self_service_profile_response_content import CreateSelfServiceProfileResponseContent
+from ..types.get_self_service_profile_response_content import GetSelfServiceProfileResponseContent
+from ..types.list_self_service_profiles_paginated_response_content import (
+ ListSelfServiceProfilesPaginatedResponseContent,
+)
+from ..types.self_service_profile import SelfServiceProfile
+from ..types.self_service_profile_allowed_strategy_enum import SelfServiceProfileAllowedStrategyEnum
+from ..types.self_service_profile_branding import SelfServiceProfileBranding
+from ..types.self_service_profile_branding_properties import SelfServiceProfileBrandingProperties
+from ..types.self_service_profile_description import SelfServiceProfileDescription
+from ..types.self_service_profile_user_attribute import SelfServiceProfileUserAttribute
+from ..types.self_service_profile_user_attributes import SelfServiceProfileUserAttributes
+from ..types.update_self_service_profile_response_content import UpdateSelfServiceProfileResponseContent
+from .raw_client import AsyncRawSelfServiceProfilesClient, RawSelfServiceProfilesClient
+
+if typing.TYPE_CHECKING:
+ from .custom_text.client import AsyncCustomTextClient, CustomTextClient
+ from .sso_ticket.client import AsyncSsoTicketClient, SsoTicketClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class SelfServiceProfilesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSelfServiceProfilesClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._custom_text: typing.Optional[CustomTextClient] = None
+ self._sso_ticket: typing.Optional[SsoTicketClient] = None
+
+ @property
+ def with_raw_response(self) -> RawSelfServiceProfilesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSelfServiceProfilesClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[SelfServiceProfile, ListSelfServiceProfilesPaginatedResponseContent]:
+ """
+ Retrieves self-service profiles.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[SelfServiceProfile, ListSelfServiceProfilesPaginatedResponseContent]
+ List of existing profiles.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.self_service_profiles.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ def create(
+ self,
+ *,
+ name: str,
+ description: typing.Optional[str] = OMIT,
+ branding: typing.Optional[SelfServiceProfileBrandingProperties] = OMIT,
+ allowed_strategies: typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]] = OMIT,
+ user_attributes: typing.Optional[typing.Sequence[SelfServiceProfileUserAttribute]] = OMIT,
+ user_attribute_profile_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateSelfServiceProfileResponseContent:
+ """
+ Creates a self-service profile.
+
+ Parameters
+ ----------
+ name : str
+ The name of the self-service Profile.
+
+ description : typing.Optional[str]
+ The description of the self-service Profile.
+
+ branding : typing.Optional[SelfServiceProfileBrandingProperties]
+
+ allowed_strategies : typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]]
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+
+ user_attributes : typing.Optional[typing.Sequence[SelfServiceProfileUserAttribute]]
+ List of attributes to be mapped that will be shown to the user during the SS-SSO flow.
+
+ user_attribute_profile_id : typing.Optional[str]
+ ID of the user-attribute-profile to associate with this self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateSelfServiceProfileResponseContent
+ Self-service profile successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.self_service_profiles.create(
+ name="name",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name,
+ description=description,
+ branding=branding,
+ allowed_strategies=allowed_strategies,
+ user_attributes=user_attributes,
+ user_attribute_profile_id=user_attribute_profile_id,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetSelfServiceProfileResponseContent:
+ """
+ Retrieves a self-service profile by Id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSelfServiceProfileResponseContent
+ Record for existing self-service profile.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.self_service_profiles.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Deletes a self-service profile by Id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.self_service_profiles.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ description: typing.Optional[SelfServiceProfileDescription] = OMIT,
+ branding: typing.Optional[SelfServiceProfileBranding] = OMIT,
+ allowed_strategies: typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]] = OMIT,
+ user_attributes: typing.Optional[SelfServiceProfileUserAttributes] = OMIT,
+ user_attribute_profile_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateSelfServiceProfileResponseContent:
+ """
+ Updates a self-service profile.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to update
+
+ name : typing.Optional[str]
+ The name of the self-service Profile.
+
+ description : typing.Optional[SelfServiceProfileDescription]
+
+ branding : typing.Optional[SelfServiceProfileBranding]
+
+ allowed_strategies : typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]]
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+
+ user_attributes : typing.Optional[SelfServiceProfileUserAttributes]
+
+ user_attribute_profile_id : typing.Optional[str]
+ ID of the user-attribute-profile to associate with this self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateSelfServiceProfileResponseContent
+ Self-service profile successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.self_service_profiles.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ name=name,
+ description=description,
+ branding=branding,
+ allowed_strategies=allowed_strategies,
+ user_attributes=user_attributes,
+ user_attribute_profile_id=user_attribute_profile_id,
+ request_options=request_options,
+ )
+ return _response.data
+
+ @property
+ def custom_text(self):
+ if self._custom_text is None:
+ from .custom_text.client import CustomTextClient # noqa: E402
+
+ self._custom_text = CustomTextClient(client_wrapper=self._client_wrapper)
+ return self._custom_text
+
+ @property
+ def sso_ticket(self):
+ if self._sso_ticket is None:
+ from .sso_ticket.client import SsoTicketClient # noqa: E402
+
+ self._sso_ticket = SsoTicketClient(client_wrapper=self._client_wrapper)
+ return self._sso_ticket
+
+
+class AsyncSelfServiceProfilesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSelfServiceProfilesClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._custom_text: typing.Optional[AsyncCustomTextClient] = None
+ self._sso_ticket: typing.Optional[AsyncSsoTicketClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawSelfServiceProfilesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSelfServiceProfilesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[SelfServiceProfile, ListSelfServiceProfilesPaginatedResponseContent]:
+ """
+ Retrieves self-service profiles.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[SelfServiceProfile, ListSelfServiceProfilesPaginatedResponseContent]
+ List of existing profiles.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.self_service_profiles.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ async def create(
+ self,
+ *,
+ name: str,
+ description: typing.Optional[str] = OMIT,
+ branding: typing.Optional[SelfServiceProfileBrandingProperties] = OMIT,
+ allowed_strategies: typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]] = OMIT,
+ user_attributes: typing.Optional[typing.Sequence[SelfServiceProfileUserAttribute]] = OMIT,
+ user_attribute_profile_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateSelfServiceProfileResponseContent:
+ """
+ Creates a self-service profile.
+
+ Parameters
+ ----------
+ name : str
+ The name of the self-service Profile.
+
+ description : typing.Optional[str]
+ The description of the self-service Profile.
+
+ branding : typing.Optional[SelfServiceProfileBrandingProperties]
+
+ allowed_strategies : typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]]
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+
+ user_attributes : typing.Optional[typing.Sequence[SelfServiceProfileUserAttribute]]
+ List of attributes to be mapped that will be shown to the user during the SS-SSO flow.
+
+ user_attribute_profile_id : typing.Optional[str]
+ ID of the user-attribute-profile to associate with this self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateSelfServiceProfileResponseContent
+ Self-service profile successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.self_service_profiles.create(
+ name="name",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name,
+ description=description,
+ branding=branding,
+ allowed_strategies=allowed_strategies,
+ user_attributes=user_attributes,
+ user_attribute_profile_id=user_attribute_profile_id,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetSelfServiceProfileResponseContent:
+ """
+ Retrieves a self-service profile by Id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSelfServiceProfileResponseContent
+ Record for existing self-service profile.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.self_service_profiles.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Deletes a self-service profile by Id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.self_service_profiles.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ description: typing.Optional[SelfServiceProfileDescription] = OMIT,
+ branding: typing.Optional[SelfServiceProfileBranding] = OMIT,
+ allowed_strategies: typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]] = OMIT,
+ user_attributes: typing.Optional[SelfServiceProfileUserAttributes] = OMIT,
+ user_attribute_profile_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateSelfServiceProfileResponseContent:
+ """
+ Updates a self-service profile.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to update
+
+ name : typing.Optional[str]
+ The name of the self-service Profile.
+
+ description : typing.Optional[SelfServiceProfileDescription]
+
+ branding : typing.Optional[SelfServiceProfileBranding]
+
+ allowed_strategies : typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]]
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+
+ user_attributes : typing.Optional[SelfServiceProfileUserAttributes]
+
+ user_attribute_profile_id : typing.Optional[str]
+ ID of the user-attribute-profile to associate with this self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateSelfServiceProfileResponseContent
+ Self-service profile successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.self_service_profiles.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ name=name,
+ description=description,
+ branding=branding,
+ allowed_strategies=allowed_strategies,
+ user_attributes=user_attributes,
+ user_attribute_profile_id=user_attribute_profile_id,
+ request_options=request_options,
+ )
+ return _response.data
+
+ @property
+ def custom_text(self):
+ if self._custom_text is None:
+ from .custom_text.client import AsyncCustomTextClient # noqa: E402
+
+ self._custom_text = AsyncCustomTextClient(client_wrapper=self._client_wrapper)
+ return self._custom_text
+
+ @property
+ def sso_ticket(self):
+ if self._sso_ticket is None:
+ from .sso_ticket.client import AsyncSsoTicketClient # noqa: E402
+
+ self._sso_ticket = AsyncSsoTicketClient(client_wrapper=self._client_wrapper)
+ return self._sso_ticket
diff --git a/src/auth0/management/self_service_profiles/custom_text/__init__.py b/src/auth0/management/self_service_profiles/custom_text/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/self_service_profiles/custom_text/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/self_service_profiles/custom_text/client.py b/src/auth0/management/self_service_profiles/custom_text/client.py
new file mode 100644
index 00000000..38fd96ca
--- /dev/null
+++ b/src/auth0/management/self_service_profiles/custom_text/client.py
@@ -0,0 +1,211 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.list_self_service_profile_custom_text_response_content import (
+ ListSelfServiceProfileCustomTextResponseContent,
+)
+from ...types.set_self_service_profile_custom_text_request_content import SetSelfServiceProfileCustomTextRequestContent
+from ...types.set_self_service_profile_custom_text_response_content import (
+ SetSelfServiceProfileCustomTextResponseContent,
+)
+from .raw_client import AsyncRawCustomTextClient, RawCustomTextClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class CustomTextClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawCustomTextClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawCustomTextClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawCustomTextClient
+ """
+ return self._raw_client
+
+ def list(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListSelfServiceProfileCustomTextResponseContent:
+ """
+ Retrieves text customizations for a given self-service profile, language and Self Service SSO Flow page.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListSelfServiceProfileCustomTextResponseContent
+ Retrieved custom text.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.self_service_profiles.custom_text.list(
+ id="id",
+ )
+ """
+ _response = self._raw_client.list(id, request_options=request_options)
+ return _response.data
+
+ def set(
+ self,
+ id: str,
+ *,
+ request: SetSelfServiceProfileCustomTextRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SetSelfServiceProfileCustomTextResponseContent:
+ """
+ Updates text customizations for a given self-service profile, language and Self Service SSO Flow page.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile.
+
+ request : SetSelfServiceProfileCustomTextRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetSelfServiceProfileCustomTextResponseContent
+ Updated custom text.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.self_service_profiles.custom_text.set(
+ id="id",
+ request={"key": "value"},
+ )
+ """
+ _response = self._raw_client.set(id, request=request, request_options=request_options)
+ return _response.data
+
+
+class AsyncCustomTextClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawCustomTextClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawCustomTextClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawCustomTextClient
+ """
+ return self._raw_client
+
+ async def list(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListSelfServiceProfileCustomTextResponseContent:
+ """
+ Retrieves text customizations for a given self-service profile, language and Self Service SSO Flow page.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListSelfServiceProfileCustomTextResponseContent
+ Retrieved custom text.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.self_service_profiles.custom_text.list(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(id, request_options=request_options)
+ return _response.data
+
+ async def set(
+ self,
+ id: str,
+ *,
+ request: SetSelfServiceProfileCustomTextRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SetSelfServiceProfileCustomTextResponseContent:
+ """
+ Updates text customizations for a given self-service profile, language and Self Service SSO Flow page.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile.
+
+ request : SetSelfServiceProfileCustomTextRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SetSelfServiceProfileCustomTextResponseContent
+ Updated custom text.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.self_service_profiles.custom_text.set(
+ id="id",
+ request={"key": "value"},
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.set(id, request=request, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/self_service_profiles/custom_text/raw_client.py b/src/auth0/management/self_service_profiles/custom_text/raw_client.py
new file mode 100644
index 00000000..033c72de
--- /dev/null
+++ b/src/auth0/management/self_service_profiles/custom_text/raw_client.py
@@ -0,0 +1,389 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.list_self_service_profile_custom_text_response_content import (
+ ListSelfServiceProfileCustomTextResponseContent,
+)
+from ...types.set_self_service_profile_custom_text_request_content import SetSelfServiceProfileCustomTextRequestContent
+from ...types.set_self_service_profile_custom_text_response_content import (
+ SetSelfServiceProfileCustomTextResponseContent,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawCustomTextClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[ListSelfServiceProfileCustomTextResponseContent]:
+ """
+ Retrieves text customizations for a given self-service profile, language and Self Service SSO Flow page.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListSelfServiceProfileCustomTextResponseContent]
+ Retrieved custom text.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}/custom-text/en/get-started",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListSelfServiceProfileCustomTextResponseContent,
+ parse_obj_as(
+ type_=ListSelfServiceProfileCustomTextResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def set(
+ self,
+ id: str,
+ *,
+ request: SetSelfServiceProfileCustomTextRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[SetSelfServiceProfileCustomTextResponseContent]:
+ """
+ Updates text customizations for a given self-service profile, language and Self Service SSO Flow page.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile.
+
+ request : SetSelfServiceProfileCustomTextRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[SetSelfServiceProfileCustomTextResponseContent]
+ Updated custom text.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}/custom-text/en/get-started",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetSelfServiceProfileCustomTextResponseContent,
+ parse_obj_as(
+ type_=SetSelfServiceProfileCustomTextResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawCustomTextClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[ListSelfServiceProfileCustomTextResponseContent]:
+ """
+ Retrieves text customizations for a given self-service profile, language and Self Service SSO Flow page.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListSelfServiceProfileCustomTextResponseContent]
+ Retrieved custom text.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}/custom-text/en/get-started",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListSelfServiceProfileCustomTextResponseContent,
+ parse_obj_as(
+ type_=ListSelfServiceProfileCustomTextResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def set(
+ self,
+ id: str,
+ *,
+ request: SetSelfServiceProfileCustomTextRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[SetSelfServiceProfileCustomTextResponseContent]:
+ """
+ Updates text customizations for a given self-service profile, language and Self Service SSO Flow page.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile.
+
+ request : SetSelfServiceProfileCustomTextRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[SetSelfServiceProfileCustomTextResponseContent]
+ Updated custom text.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}/custom-text/en/get-started",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SetSelfServiceProfileCustomTextResponseContent,
+ parse_obj_as(
+ type_=SetSelfServiceProfileCustomTextResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/self_service_profiles/raw_client.py b/src/auth0/management/self_service_profiles/raw_client.py
new file mode 100644
index 00000000..df566fe1
--- /dev/null
+++ b/src/auth0/management/self_service_profiles/raw_client.py
@@ -0,0 +1,1231 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.internal_server_error import InternalServerError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.create_self_service_profile_response_content import CreateSelfServiceProfileResponseContent
+from ..types.get_self_service_profile_response_content import GetSelfServiceProfileResponseContent
+from ..types.list_self_service_profiles_paginated_response_content import (
+ ListSelfServiceProfilesPaginatedResponseContent,
+)
+from ..types.self_service_profile import SelfServiceProfile
+from ..types.self_service_profile_allowed_strategy_enum import SelfServiceProfileAllowedStrategyEnum
+from ..types.self_service_profile_branding import SelfServiceProfileBranding
+from ..types.self_service_profile_branding_properties import SelfServiceProfileBrandingProperties
+from ..types.self_service_profile_description import SelfServiceProfileDescription
+from ..types.self_service_profile_user_attribute import SelfServiceProfileUserAttribute
+from ..types.self_service_profile_user_attributes import SelfServiceProfileUserAttributes
+from ..types.update_self_service_profile_response_content import UpdateSelfServiceProfileResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawSelfServiceProfilesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[SelfServiceProfile, ListSelfServiceProfilesPaginatedResponseContent]:
+ """
+ Retrieves self-service profiles.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[SelfServiceProfile, ListSelfServiceProfilesPaginatedResponseContent]
+ List of existing profiles.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "self-service-profiles",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListSelfServiceProfilesPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListSelfServiceProfilesPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.self_service_profiles
+ _has_next = True
+ _get_next = lambda: self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: str,
+ description: typing.Optional[str] = OMIT,
+ branding: typing.Optional[SelfServiceProfileBrandingProperties] = OMIT,
+ allowed_strategies: typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]] = OMIT,
+ user_attributes: typing.Optional[typing.Sequence[SelfServiceProfileUserAttribute]] = OMIT,
+ user_attribute_profile_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateSelfServiceProfileResponseContent]:
+ """
+ Creates a self-service profile.
+
+ Parameters
+ ----------
+ name : str
+ The name of the self-service Profile.
+
+ description : typing.Optional[str]
+ The description of the self-service Profile.
+
+ branding : typing.Optional[SelfServiceProfileBrandingProperties]
+
+ allowed_strategies : typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]]
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+
+ user_attributes : typing.Optional[typing.Sequence[SelfServiceProfileUserAttribute]]
+ List of attributes to be mapped that will be shown to the user during the SS-SSO flow.
+
+ user_attribute_profile_id : typing.Optional[str]
+ ID of the user-attribute-profile to associate with this self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateSelfServiceProfileResponseContent]
+ Self-service profile successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "self-service-profiles",
+ method="POST",
+ json={
+ "name": name,
+ "description": description,
+ "branding": convert_and_respect_annotation_metadata(
+ object_=branding, annotation=SelfServiceProfileBrandingProperties, direction="write"
+ ),
+ "allowed_strategies": allowed_strategies,
+ "user_attributes": convert_and_respect_annotation_metadata(
+ object_=user_attributes,
+ annotation=typing.Sequence[SelfServiceProfileUserAttribute],
+ direction="write",
+ ),
+ "user_attribute_profile_id": user_attribute_profile_id,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateSelfServiceProfileResponseContent,
+ parse_obj_as(
+ type_=CreateSelfServiceProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetSelfServiceProfileResponseContent]:
+ """
+ Retrieves a self-service profile by Id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetSelfServiceProfileResponseContent]
+ Record for existing self-service profile.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSelfServiceProfileResponseContent,
+ parse_obj_as(
+ type_=GetSelfServiceProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Deletes a self-service profile by Id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ description: typing.Optional[SelfServiceProfileDescription] = OMIT,
+ branding: typing.Optional[SelfServiceProfileBranding] = OMIT,
+ allowed_strategies: typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]] = OMIT,
+ user_attributes: typing.Optional[SelfServiceProfileUserAttributes] = OMIT,
+ user_attribute_profile_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateSelfServiceProfileResponseContent]:
+ """
+ Updates a self-service profile.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to update
+
+ name : typing.Optional[str]
+ The name of the self-service Profile.
+
+ description : typing.Optional[SelfServiceProfileDescription]
+
+ branding : typing.Optional[SelfServiceProfileBranding]
+
+ allowed_strategies : typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]]
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+
+ user_attributes : typing.Optional[SelfServiceProfileUserAttributes]
+
+ user_attribute_profile_id : typing.Optional[str]
+ ID of the user-attribute-profile to associate with this self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateSelfServiceProfileResponseContent]
+ Self-service profile successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "description": description,
+ "branding": convert_and_respect_annotation_metadata(
+ object_=branding, annotation=SelfServiceProfileBranding, direction="write"
+ ),
+ "allowed_strategies": allowed_strategies,
+ "user_attributes": convert_and_respect_annotation_metadata(
+ object_=user_attributes,
+ annotation=typing.Optional[SelfServiceProfileUserAttributes],
+ direction="write",
+ ),
+ "user_attribute_profile_id": user_attribute_profile_id,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateSelfServiceProfileResponseContent,
+ parse_obj_as(
+ type_=UpdateSelfServiceProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSelfServiceProfilesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[SelfServiceProfile, ListSelfServiceProfilesPaginatedResponseContent]:
+ """
+ Retrieves self-service profiles.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[SelfServiceProfile, ListSelfServiceProfilesPaginatedResponseContent]
+ List of existing profiles.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "self-service-profiles",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListSelfServiceProfilesPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListSelfServiceProfilesPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.self_service_profiles
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: str,
+ description: typing.Optional[str] = OMIT,
+ branding: typing.Optional[SelfServiceProfileBrandingProperties] = OMIT,
+ allowed_strategies: typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]] = OMIT,
+ user_attributes: typing.Optional[typing.Sequence[SelfServiceProfileUserAttribute]] = OMIT,
+ user_attribute_profile_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateSelfServiceProfileResponseContent]:
+ """
+ Creates a self-service profile.
+
+ Parameters
+ ----------
+ name : str
+ The name of the self-service Profile.
+
+ description : typing.Optional[str]
+ The description of the self-service Profile.
+
+ branding : typing.Optional[SelfServiceProfileBrandingProperties]
+
+ allowed_strategies : typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]]
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+
+ user_attributes : typing.Optional[typing.Sequence[SelfServiceProfileUserAttribute]]
+ List of attributes to be mapped that will be shown to the user during the SS-SSO flow.
+
+ user_attribute_profile_id : typing.Optional[str]
+ ID of the user-attribute-profile to associate with this self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateSelfServiceProfileResponseContent]
+ Self-service profile successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "self-service-profiles",
+ method="POST",
+ json={
+ "name": name,
+ "description": description,
+ "branding": convert_and_respect_annotation_metadata(
+ object_=branding, annotation=SelfServiceProfileBrandingProperties, direction="write"
+ ),
+ "allowed_strategies": allowed_strategies,
+ "user_attributes": convert_and_respect_annotation_metadata(
+ object_=user_attributes,
+ annotation=typing.Sequence[SelfServiceProfileUserAttribute],
+ direction="write",
+ ),
+ "user_attribute_profile_id": user_attribute_profile_id,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateSelfServiceProfileResponseContent,
+ parse_obj_as(
+ type_=CreateSelfServiceProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetSelfServiceProfileResponseContent]:
+ """
+ Retrieves a self-service profile by Id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetSelfServiceProfileResponseContent]
+ Record for existing self-service profile.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSelfServiceProfileResponseContent,
+ parse_obj_as(
+ type_=GetSelfServiceProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Deletes a self-service profile by Id.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to delete
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ description: typing.Optional[SelfServiceProfileDescription] = OMIT,
+ branding: typing.Optional[SelfServiceProfileBranding] = OMIT,
+ allowed_strategies: typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]] = OMIT,
+ user_attributes: typing.Optional[SelfServiceProfileUserAttributes] = OMIT,
+ user_attribute_profile_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateSelfServiceProfileResponseContent]:
+ """
+ Updates a self-service profile.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to update
+
+ name : typing.Optional[str]
+ The name of the self-service Profile.
+
+ description : typing.Optional[SelfServiceProfileDescription]
+
+ branding : typing.Optional[SelfServiceProfileBranding]
+
+ allowed_strategies : typing.Optional[typing.Sequence[SelfServiceProfileAllowedStrategyEnum]]
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+
+ user_attributes : typing.Optional[SelfServiceProfileUserAttributes]
+
+ user_attribute_profile_id : typing.Optional[str]
+ ID of the user-attribute-profile to associate with this self-service profile.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateSelfServiceProfileResponseContent]
+ Self-service profile successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "description": description,
+ "branding": convert_and_respect_annotation_metadata(
+ object_=branding, annotation=SelfServiceProfileBranding, direction="write"
+ ),
+ "allowed_strategies": allowed_strategies,
+ "user_attributes": convert_and_respect_annotation_metadata(
+ object_=user_attributes,
+ annotation=typing.Optional[SelfServiceProfileUserAttributes],
+ direction="write",
+ ),
+ "user_attribute_profile_id": user_attribute_profile_id,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateSelfServiceProfileResponseContent,
+ parse_obj_as(
+ type_=UpdateSelfServiceProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/self_service_profiles/sso_ticket/__init__.py b/src/auth0/management/self_service_profiles/sso_ticket/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/self_service_profiles/sso_ticket/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/self_service_profiles/sso_ticket/client.py b/src/auth0/management/self_service_profiles/sso_ticket/client.py
new file mode 100644
index 00000000..82aa8951
--- /dev/null
+++ b/src/auth0/management/self_service_profiles/sso_ticket/client.py
@@ -0,0 +1,281 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.create_self_service_profile_sso_ticket_response_content import (
+ CreateSelfServiceProfileSsoTicketResponseContent,
+)
+from ...types.self_service_profile_sso_ticket_connection_config import SelfServiceProfileSsoTicketConnectionConfig
+from ...types.self_service_profile_sso_ticket_domain_aliases_config import (
+ SelfServiceProfileSsoTicketDomainAliasesConfig,
+)
+from ...types.self_service_profile_sso_ticket_enabled_organization import SelfServiceProfileSsoTicketEnabledOrganization
+from ...types.self_service_profile_sso_ticket_provisioning_config import SelfServiceProfileSsoTicketProvisioningConfig
+from .raw_client import AsyncRawSsoTicketClient, RawSsoTicketClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class SsoTicketClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSsoTicketClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawSsoTicketClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSsoTicketClient
+ """
+ return self._raw_client
+
+ def create(
+ self,
+ id: str,
+ *,
+ connection_id: typing.Optional[str] = OMIT,
+ connection_config: typing.Optional[SelfServiceProfileSsoTicketConnectionConfig] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ enabled_organizations: typing.Optional[typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization]] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ domain_aliases_config: typing.Optional[SelfServiceProfileSsoTicketDomainAliasesConfig] = OMIT,
+ provisioning_config: typing.Optional[SelfServiceProfileSsoTicketProvisioningConfig] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateSelfServiceProfileSsoTicketResponseContent:
+ """
+ Creates an SSO access ticket to initiate the Self Service SSO Flow using a self-service profile.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to retrieve
+
+ connection_id : typing.Optional[str]
+ If provided, this will allow editing of the provided connection during the SSO Flow
+
+ connection_config : typing.Optional[SelfServiceProfileSsoTicketConnectionConfig]
+
+ enabled_clients : typing.Optional[typing.Sequence[str]]
+ List of client_ids that the connection will be enabled for.
+
+ enabled_organizations : typing.Optional[typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization]]
+ List of organizations that the connection will be enabled for.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ domain_aliases_config : typing.Optional[SelfServiceProfileSsoTicketDomainAliasesConfig]
+
+ provisioning_config : typing.Optional[SelfServiceProfileSsoTicketProvisioningConfig]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateSelfServiceProfileSsoTicketResponseContent
+ SSO Access Ticket successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.self_service_profiles.sso_ticket.create(
+ id="id",
+ )
+ """
+ _response = self._raw_client.create(
+ id,
+ connection_id=connection_id,
+ connection_config=connection_config,
+ enabled_clients=enabled_clients,
+ enabled_organizations=enabled_organizations,
+ ttl_sec=ttl_sec,
+ domain_aliases_config=domain_aliases_config,
+ provisioning_config=provisioning_config,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def revoke(self, profile_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Revokes an SSO access ticket and invalidates associated sessions. The ticket will no longer be accepted to initiate a Self-Service SSO session. If any users have already started a session through this ticket, their session will be terminated. Clients should expect a `202 Accepted` response upon successful processing, indicating that the request has been acknowledged and that the revocation is underway but may not be fully completed at the time of response. If the specified ticket does not exist, a `202 Accepted` response is also returned, signaling that no further action is required.
+ Clients should treat these `202` responses as an acknowledgment that the request has been accepted and is in progress, even if the ticket was not found.
+
+ Parameters
+ ----------
+ profile_id : str
+ The id of the self-service profile
+
+ id : str
+ The id of the ticket to revoke
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.self_service_profiles.sso_ticket.revoke(
+ profile_id="profileId",
+ id="id",
+ )
+ """
+ _response = self._raw_client.revoke(profile_id, id, request_options=request_options)
+ return _response.data
+
+
+class AsyncSsoTicketClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSsoTicketClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawSsoTicketClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSsoTicketClient
+ """
+ return self._raw_client
+
+ async def create(
+ self,
+ id: str,
+ *,
+ connection_id: typing.Optional[str] = OMIT,
+ connection_config: typing.Optional[SelfServiceProfileSsoTicketConnectionConfig] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ enabled_organizations: typing.Optional[typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization]] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ domain_aliases_config: typing.Optional[SelfServiceProfileSsoTicketDomainAliasesConfig] = OMIT,
+ provisioning_config: typing.Optional[SelfServiceProfileSsoTicketProvisioningConfig] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateSelfServiceProfileSsoTicketResponseContent:
+ """
+ Creates an SSO access ticket to initiate the Self Service SSO Flow using a self-service profile.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to retrieve
+
+ connection_id : typing.Optional[str]
+ If provided, this will allow editing of the provided connection during the SSO Flow
+
+ connection_config : typing.Optional[SelfServiceProfileSsoTicketConnectionConfig]
+
+ enabled_clients : typing.Optional[typing.Sequence[str]]
+ List of client_ids that the connection will be enabled for.
+
+ enabled_organizations : typing.Optional[typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization]]
+ List of organizations that the connection will be enabled for.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ domain_aliases_config : typing.Optional[SelfServiceProfileSsoTicketDomainAliasesConfig]
+
+ provisioning_config : typing.Optional[SelfServiceProfileSsoTicketProvisioningConfig]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateSelfServiceProfileSsoTicketResponseContent
+ SSO Access Ticket successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.self_service_profiles.sso_ticket.create(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ id,
+ connection_id=connection_id,
+ connection_config=connection_config,
+ enabled_clients=enabled_clients,
+ enabled_organizations=enabled_organizations,
+ ttl_sec=ttl_sec,
+ domain_aliases_config=domain_aliases_config,
+ provisioning_config=provisioning_config,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def revoke(
+ self, profile_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Revokes an SSO access ticket and invalidates associated sessions. The ticket will no longer be accepted to initiate a Self-Service SSO session. If any users have already started a session through this ticket, their session will be terminated. Clients should expect a `202 Accepted` response upon successful processing, indicating that the request has been acknowledged and that the revocation is underway but may not be fully completed at the time of response. If the specified ticket does not exist, a `202 Accepted` response is also returned, signaling that no further action is required.
+ Clients should treat these `202` responses as an acknowledgment that the request has been accepted and is in progress, even if the ticket was not found.
+
+ Parameters
+ ----------
+ profile_id : str
+ The id of the self-service profile
+
+ id : str
+ The id of the ticket to revoke
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.self_service_profiles.sso_ticket.revoke(
+ profile_id="profileId",
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.revoke(profile_id, id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/self_service_profiles/sso_ticket/raw_client.py b/src/auth0/management/self_service_profiles/sso_ticket/raw_client.py
new file mode 100644
index 00000000..8b57c400
--- /dev/null
+++ b/src/auth0/management/self_service_profiles/sso_ticket/raw_client.py
@@ -0,0 +1,450 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.create_self_service_profile_sso_ticket_response_content import (
+ CreateSelfServiceProfileSsoTicketResponseContent,
+)
+from ...types.self_service_profile_sso_ticket_connection_config import SelfServiceProfileSsoTicketConnectionConfig
+from ...types.self_service_profile_sso_ticket_domain_aliases_config import (
+ SelfServiceProfileSsoTicketDomainAliasesConfig,
+)
+from ...types.self_service_profile_sso_ticket_enabled_organization import SelfServiceProfileSsoTicketEnabledOrganization
+from ...types.self_service_profile_sso_ticket_provisioning_config import SelfServiceProfileSsoTicketProvisioningConfig
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawSsoTicketClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def create(
+ self,
+ id: str,
+ *,
+ connection_id: typing.Optional[str] = OMIT,
+ connection_config: typing.Optional[SelfServiceProfileSsoTicketConnectionConfig] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ enabled_organizations: typing.Optional[typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization]] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ domain_aliases_config: typing.Optional[SelfServiceProfileSsoTicketDomainAliasesConfig] = OMIT,
+ provisioning_config: typing.Optional[SelfServiceProfileSsoTicketProvisioningConfig] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateSelfServiceProfileSsoTicketResponseContent]:
+ """
+ Creates an SSO access ticket to initiate the Self Service SSO Flow using a self-service profile.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to retrieve
+
+ connection_id : typing.Optional[str]
+ If provided, this will allow editing of the provided connection during the SSO Flow
+
+ connection_config : typing.Optional[SelfServiceProfileSsoTicketConnectionConfig]
+
+ enabled_clients : typing.Optional[typing.Sequence[str]]
+ List of client_ids that the connection will be enabled for.
+
+ enabled_organizations : typing.Optional[typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization]]
+ List of organizations that the connection will be enabled for.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ domain_aliases_config : typing.Optional[SelfServiceProfileSsoTicketDomainAliasesConfig]
+
+ provisioning_config : typing.Optional[SelfServiceProfileSsoTicketProvisioningConfig]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateSelfServiceProfileSsoTicketResponseContent]
+ SSO Access Ticket successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}/sso-ticket",
+ method="POST",
+ json={
+ "connection_id": connection_id,
+ "connection_config": convert_and_respect_annotation_metadata(
+ object_=connection_config, annotation=SelfServiceProfileSsoTicketConnectionConfig, direction="write"
+ ),
+ "enabled_clients": enabled_clients,
+ "enabled_organizations": convert_and_respect_annotation_metadata(
+ object_=enabled_organizations,
+ annotation=typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization],
+ direction="write",
+ ),
+ "ttl_sec": ttl_sec,
+ "domain_aliases_config": convert_and_respect_annotation_metadata(
+ object_=domain_aliases_config,
+ annotation=SelfServiceProfileSsoTicketDomainAliasesConfig,
+ direction="write",
+ ),
+ "provisioning_config": convert_and_respect_annotation_metadata(
+ object_=provisioning_config,
+ annotation=SelfServiceProfileSsoTicketProvisioningConfig,
+ direction="write",
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateSelfServiceProfileSsoTicketResponseContent,
+ parse_obj_as(
+ type_=CreateSelfServiceProfileSsoTicketResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def revoke(
+ self, profile_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Revokes an SSO access ticket and invalidates associated sessions. The ticket will no longer be accepted to initiate a Self-Service SSO session. If any users have already started a session through this ticket, their session will be terminated. Clients should expect a `202 Accepted` response upon successful processing, indicating that the request has been acknowledged and that the revocation is underway but may not be fully completed at the time of response. If the specified ticket does not exist, a `202 Accepted` response is also returned, signaling that no further action is required.
+ Clients should treat these `202` responses as an acknowledgment that the request has been accepted and is in progress, even if the ticket was not found.
+
+ Parameters
+ ----------
+ profile_id : str
+ The id of the self-service profile
+
+ id : str
+ The id of the ticket to revoke
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(profile_id)}/sso-ticket/{jsonable_encoder(id)}/revoke",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSsoTicketClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def create(
+ self,
+ id: str,
+ *,
+ connection_id: typing.Optional[str] = OMIT,
+ connection_config: typing.Optional[SelfServiceProfileSsoTicketConnectionConfig] = OMIT,
+ enabled_clients: typing.Optional[typing.Sequence[str]] = OMIT,
+ enabled_organizations: typing.Optional[typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization]] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ domain_aliases_config: typing.Optional[SelfServiceProfileSsoTicketDomainAliasesConfig] = OMIT,
+ provisioning_config: typing.Optional[SelfServiceProfileSsoTicketProvisioningConfig] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateSelfServiceProfileSsoTicketResponseContent]:
+ """
+ Creates an SSO access ticket to initiate the Self Service SSO Flow using a self-service profile.
+
+ Parameters
+ ----------
+ id : str
+ The id of the self-service profile to retrieve
+
+ connection_id : typing.Optional[str]
+ If provided, this will allow editing of the provided connection during the SSO Flow
+
+ connection_config : typing.Optional[SelfServiceProfileSsoTicketConnectionConfig]
+
+ enabled_clients : typing.Optional[typing.Sequence[str]]
+ List of client_ids that the connection will be enabled for.
+
+ enabled_organizations : typing.Optional[typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization]]
+ List of organizations that the connection will be enabled for.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ domain_aliases_config : typing.Optional[SelfServiceProfileSsoTicketDomainAliasesConfig]
+
+ provisioning_config : typing.Optional[SelfServiceProfileSsoTicketProvisioningConfig]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateSelfServiceProfileSsoTicketResponseContent]
+ SSO Access Ticket successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(id)}/sso-ticket",
+ method="POST",
+ json={
+ "connection_id": connection_id,
+ "connection_config": convert_and_respect_annotation_metadata(
+ object_=connection_config, annotation=SelfServiceProfileSsoTicketConnectionConfig, direction="write"
+ ),
+ "enabled_clients": enabled_clients,
+ "enabled_organizations": convert_and_respect_annotation_metadata(
+ object_=enabled_organizations,
+ annotation=typing.Sequence[SelfServiceProfileSsoTicketEnabledOrganization],
+ direction="write",
+ ),
+ "ttl_sec": ttl_sec,
+ "domain_aliases_config": convert_and_respect_annotation_metadata(
+ object_=domain_aliases_config,
+ annotation=SelfServiceProfileSsoTicketDomainAliasesConfig,
+ direction="write",
+ ),
+ "provisioning_config": convert_and_respect_annotation_metadata(
+ object_=provisioning_config,
+ annotation=SelfServiceProfileSsoTicketProvisioningConfig,
+ direction="write",
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateSelfServiceProfileSsoTicketResponseContent,
+ parse_obj_as(
+ type_=CreateSelfServiceProfileSsoTicketResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def revoke(
+ self, profile_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Revokes an SSO access ticket and invalidates associated sessions. The ticket will no longer be accepted to initiate a Self-Service SSO session. If any users have already started a session through this ticket, their session will be terminated. Clients should expect a `202 Accepted` response upon successful processing, indicating that the request has been acknowledged and that the revocation is underway but may not be fully completed at the time of response. If the specified ticket does not exist, a `202 Accepted` response is also returned, signaling that no further action is required.
+ Clients should treat these `202` responses as an acknowledgment that the request has been accepted and is in progress, even if the ticket was not found.
+
+ Parameters
+ ----------
+ profile_id : str
+ The id of the self-service profile
+
+ id : str
+ The id of the ticket to revoke
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"self-service-profiles/{jsonable_encoder(profile_id)}/sso-ticket/{jsonable_encoder(id)}/revoke",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/sessions/__init__.py b/src/auth0/management/sessions/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/sessions/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/sessions/client.py b/src/auth0/management/sessions/client.py
new file mode 100644
index 00000000..4d1abf10
--- /dev/null
+++ b/src/auth0/management/sessions/client.py
@@ -0,0 +1,341 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.get_session_response_content import GetSessionResponseContent
+from ..types.session_metadata import SessionMetadata
+from ..types.update_session_response_content import UpdateSessionResponseContent
+from .raw_client import AsyncRawSessionsClient, RawSessionsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class SessionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSessionsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawSessionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSessionsClient
+ """
+ return self._raw_client
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetSessionResponseContent:
+ """
+ Retrieve session information.
+
+ Parameters
+ ----------
+ id : str
+ ID of session to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSessionResponseContent
+ The session was retrieved
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.sessions.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a session by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.sessions.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ session_metadata: typing.Optional[SessionMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateSessionResponseContent:
+ """
+ Update session information.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to update.
+
+ session_metadata : typing.Optional[SessionMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateSessionResponseContent
+ Session successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.sessions.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(id, session_metadata=session_metadata, request_options=request_options)
+ return _response.data
+
+ def revoke(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Revokes a session by ID and all associated refresh tokens.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to revoke.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.sessions.revoke(
+ id="id",
+ )
+ """
+ _response = self._raw_client.revoke(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncSessionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSessionsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawSessionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSessionsClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetSessionResponseContent:
+ """
+ Retrieve session information.
+
+ Parameters
+ ----------
+ id : str
+ ID of session to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSessionResponseContent
+ The session was retrieved
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.sessions.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a session by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.sessions.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ session_metadata: typing.Optional[SessionMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateSessionResponseContent:
+ """
+ Update session information.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to update.
+
+ session_metadata : typing.Optional[SessionMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateSessionResponseContent
+ Session successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.sessions.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id, session_metadata=session_metadata, request_options=request_options
+ )
+ return _response.data
+
+ async def revoke(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Revokes a session by ID and all associated refresh tokens.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to revoke.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.sessions.revoke(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.revoke(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/sessions/raw_client.py b/src/auth0/management/sessions/raw_client.py
new file mode 100644
index 00000000..1b8fd2dc
--- /dev/null
+++ b/src/auth0/management/sessions/raw_client.py
@@ -0,0 +1,730 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.get_session_response_content import GetSessionResponseContent
+from ..types.session_metadata import SessionMetadata
+from ..types.update_session_response_content import UpdateSessionResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawSessionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetSessionResponseContent]:
+ """
+ Retrieve session information.
+
+ Parameters
+ ----------
+ id : str
+ ID of session to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetSessionResponseContent]
+ The session was retrieved
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"sessions/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSessionResponseContent,
+ parse_obj_as(
+ type_=GetSessionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a session by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"sessions/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ session_metadata: typing.Optional[SessionMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateSessionResponseContent]:
+ """
+ Update session information.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to update.
+
+ session_metadata : typing.Optional[SessionMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateSessionResponseContent]
+ Session successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"sessions/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "session_metadata": session_metadata,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateSessionResponseContent,
+ parse_obj_as(
+ type_=UpdateSessionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def revoke(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Revokes a session by ID and all associated refresh tokens.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to revoke.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"sessions/{jsonable_encoder(id)}/revoke",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSessionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetSessionResponseContent]:
+ """
+ Retrieve session information.
+
+ Parameters
+ ----------
+ id : str
+ ID of session to retrieve
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetSessionResponseContent]
+ The session was retrieved
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"sessions/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSessionResponseContent,
+ parse_obj_as(
+ type_=GetSessionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a session by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"sessions/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ session_metadata: typing.Optional[SessionMetadata] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateSessionResponseContent]:
+ """
+ Update session information.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to update.
+
+ session_metadata : typing.Optional[SessionMetadata]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateSessionResponseContent]
+ Session successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"sessions/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "session_metadata": session_metadata,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateSessionResponseContent,
+ parse_obj_as(
+ type_=UpdateSessionResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def revoke(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Revokes a session by ID and all associated refresh tokens.
+
+ Parameters
+ ----------
+ id : str
+ ID of the session to revoke.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"sessions/{jsonable_encoder(id)}/revoke",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/stats/__init__.py b/src/auth0/management/stats/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/stats/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/stats/client.py b/src/auth0/management/stats/client.py
new file mode 100644
index 00000000..5400785c
--- /dev/null
+++ b/src/auth0/management/stats/client.py
@@ -0,0 +1,195 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.daily_stats import DailyStats
+from ..types.get_active_users_count_stats_response_content import GetActiveUsersCountStatsResponseContent
+from .raw_client import AsyncRawStatsClient, RawStatsClient
+
+
+class StatsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawStatsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawStatsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawStatsClient
+ """
+ return self._raw_client
+
+ def get_active_users_count(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetActiveUsersCountStatsResponseContent:
+ """
+ Retrieve the number of active users that logged in during the last 30 days.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetActiveUsersCountStatsResponseContent
+ Number of active users successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.stats.get_active_users_count()
+ """
+ _response = self._raw_client.get_active_users_count(request_options=request_options)
+ return _response.data
+
+ def get_daily(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ to: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> typing.List[DailyStats]:
+ """
+ Retrieve the number of logins, signups and breached-password detections (subscription required) that occurred each day within a specified date range.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional first day of the date range (inclusive) in YYYYMMDD format.
+
+ to : typing.Optional[str]
+ Optional last day of the date range (inclusive) in YYYYMMDD format.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[DailyStats]
+ Daily stats successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.stats.get_daily(
+ from_="from",
+ to="to",
+ )
+ """
+ _response = self._raw_client.get_daily(from_=from_, to=to, request_options=request_options)
+ return _response.data
+
+
+class AsyncStatsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawStatsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawStatsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawStatsClient
+ """
+ return self._raw_client
+
+ async def get_active_users_count(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetActiveUsersCountStatsResponseContent:
+ """
+ Retrieve the number of active users that logged in during the last 30 days.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetActiveUsersCountStatsResponseContent
+ Number of active users successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.stats.get_active_users_count()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_active_users_count(request_options=request_options)
+ return _response.data
+
+ async def get_daily(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ to: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> typing.List[DailyStats]:
+ """
+ Retrieve the number of logins, signups and breached-password detections (subscription required) that occurred each day within a specified date range.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional first day of the date range (inclusive) in YYYYMMDD format.
+
+ to : typing.Optional[str]
+ Optional last day of the date range (inclusive) in YYYYMMDD format.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[DailyStats]
+ Daily stats successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.stats.get_daily(
+ from_="from",
+ to="to",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_daily(from_=from_, to=to, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/stats/raw_client.py b/src/auth0/management/stats/raw_client.py
new file mode 100644
index 00000000..bfa31b21
--- /dev/null
+++ b/src/auth0/management/stats/raw_client.py
@@ -0,0 +1,352 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.daily_stats import DailyStats
+from ..types.get_active_users_count_stats_response_content import GetActiveUsersCountStatsResponseContent
+
+
+class RawStatsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get_active_users_count(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetActiveUsersCountStatsResponseContent]:
+ """
+ Retrieve the number of active users that logged in during the last 30 days.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetActiveUsersCountStatsResponseContent]
+ Number of active users successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "stats/active-users",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetActiveUsersCountStatsResponseContent,
+ parse_obj_as(
+ type_=GetActiveUsersCountStatsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get_daily(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ to: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[typing.List[DailyStats]]:
+ """
+ Retrieve the number of logins, signups and breached-password detections (subscription required) that occurred each day within a specified date range.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional first day of the date range (inclusive) in YYYYMMDD format.
+
+ to : typing.Optional[str]
+ Optional last day of the date range (inclusive) in YYYYMMDD format.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[DailyStats]]
+ Daily stats successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "stats/daily",
+ method="GET",
+ params={
+ "from": from_,
+ "to": to,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[DailyStats],
+ parse_obj_as(
+ type_=typing.List[DailyStats], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawStatsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get_active_users_count(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetActiveUsersCountStatsResponseContent]:
+ """
+ Retrieve the number of active users that logged in during the last 30 days.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetActiveUsersCountStatsResponseContent]
+ Number of active users successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "stats/active-users",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetActiveUsersCountStatsResponseContent,
+ parse_obj_as(
+ type_=GetActiveUsersCountStatsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get_daily(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ to: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[typing.List[DailyStats]]:
+ """
+ Retrieve the number of logins, signups and breached-password detections (subscription required) that occurred each day within a specified date range.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional first day of the date range (inclusive) in YYYYMMDD format.
+
+ to : typing.Optional[str]
+ Optional last day of the date range (inclusive) in YYYYMMDD format.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[DailyStats]]
+ Daily stats successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "stats/daily",
+ method="GET",
+ params={
+ "from": from_,
+ "to": to,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[DailyStats],
+ parse_obj_as(
+ type_=typing.List[DailyStats], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/supplemental_signals/__init__.py b/src/auth0/management/supplemental_signals/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/supplemental_signals/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/supplemental_signals/client.py b/src/auth0/management/supplemental_signals/client.py
new file mode 100644
index 00000000..f1418714
--- /dev/null
+++ b/src/auth0/management/supplemental_signals/client.py
@@ -0,0 +1,180 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.get_supplemental_signals_response_content import GetSupplementalSignalsResponseContent
+from ..types.patch_supplemental_signals_response_content import PatchSupplementalSignalsResponseContent
+from .raw_client import AsyncRawSupplementalSignalsClient, RawSupplementalSignalsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class SupplementalSignalsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSupplementalSignalsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawSupplementalSignalsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSupplementalSignalsClient
+ """
+ return self._raw_client
+
+ def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> GetSupplementalSignalsResponseContent:
+ """
+ Get the supplemental signals configuration for a tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSupplementalSignalsResponseContent
+ Supplemental Signals configuration successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.supplemental_signals.get()
+ """
+ _response = self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ def patch(
+ self, *, akamai_enabled: bool, request_options: typing.Optional[RequestOptions] = None
+ ) -> PatchSupplementalSignalsResponseContent:
+ """
+ Update the supplemental signals configuration for a tenant.
+
+ Parameters
+ ----------
+ akamai_enabled : bool
+ Indicates if incoming Akamai Headers should be processed
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ PatchSupplementalSignalsResponseContent
+ Supplemental Signals configuration successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.supplemental_signals.patch(
+ akamai_enabled=True,
+ )
+ """
+ _response = self._raw_client.patch(akamai_enabled=akamai_enabled, request_options=request_options)
+ return _response.data
+
+
+class AsyncSupplementalSignalsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSupplementalSignalsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawSupplementalSignalsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSupplementalSignalsClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetSupplementalSignalsResponseContent:
+ """
+ Get the supplemental signals configuration for a tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetSupplementalSignalsResponseContent
+ Supplemental Signals configuration successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.supplemental_signals.get()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(request_options=request_options)
+ return _response.data
+
+ async def patch(
+ self, *, akamai_enabled: bool, request_options: typing.Optional[RequestOptions] = None
+ ) -> PatchSupplementalSignalsResponseContent:
+ """
+ Update the supplemental signals configuration for a tenant.
+
+ Parameters
+ ----------
+ akamai_enabled : bool
+ Indicates if incoming Akamai Headers should be processed
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ PatchSupplementalSignalsResponseContent
+ Supplemental Signals configuration successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.supplemental_signals.patch(
+ akamai_enabled=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.patch(akamai_enabled=akamai_enabled, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/supplemental_signals/raw_client.py b/src/auth0/management/supplemental_signals/raw_client.py
new file mode 100644
index 00000000..431f9d66
--- /dev/null
+++ b/src/auth0/management/supplemental_signals/raw_client.py
@@ -0,0 +1,369 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.get_supplemental_signals_response_content import GetSupplementalSignalsResponseContent
+from ..types.patch_supplemental_signals_response_content import PatchSupplementalSignalsResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawSupplementalSignalsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetSupplementalSignalsResponseContent]:
+ """
+ Get the supplemental signals configuration for a tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetSupplementalSignalsResponseContent]
+ Supplemental Signals configuration successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "supplemental-signals",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSupplementalSignalsResponseContent,
+ parse_obj_as(
+ type_=GetSupplementalSignalsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def patch(
+ self, *, akamai_enabled: bool, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[PatchSupplementalSignalsResponseContent]:
+ """
+ Update the supplemental signals configuration for a tenant.
+
+ Parameters
+ ----------
+ akamai_enabled : bool
+ Indicates if incoming Akamai Headers should be processed
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[PatchSupplementalSignalsResponseContent]
+ Supplemental Signals configuration successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "supplemental-signals",
+ method="PATCH",
+ json={
+ "akamai_enabled": akamai_enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ PatchSupplementalSignalsResponseContent,
+ parse_obj_as(
+ type_=PatchSupplementalSignalsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSupplementalSignalsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetSupplementalSignalsResponseContent]:
+ """
+ Get the supplemental signals configuration for a tenant.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetSupplementalSignalsResponseContent]
+ Supplemental Signals configuration successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "supplemental-signals",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSupplementalSignalsResponseContent,
+ parse_obj_as(
+ type_=GetSupplementalSignalsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def patch(
+ self, *, akamai_enabled: bool, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[PatchSupplementalSignalsResponseContent]:
+ """
+ Update the supplemental signals configuration for a tenant.
+
+ Parameters
+ ----------
+ akamai_enabled : bool
+ Indicates if incoming Akamai Headers should be processed
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[PatchSupplementalSignalsResponseContent]
+ Supplemental Signals configuration successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "supplemental-signals",
+ method="PATCH",
+ json={
+ "akamai_enabled": akamai_enabled,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ PatchSupplementalSignalsResponseContent,
+ parse_obj_as(
+ type_=PatchSupplementalSignalsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/tenants/__init__.py b/src/auth0/management/tenants/__init__.py
new file mode 100644
index 00000000..e782d140
--- /dev/null
+++ b/src/auth0/management/tenants/__init__.py
@@ -0,0 +1,38 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import settings
+ from .settings import UpdateTenantSettingsRequestContentEnabledLocalesItem
+_dynamic_imports: typing.Dict[str, str] = {
+ "UpdateTenantSettingsRequestContentEnabledLocalesItem": ".settings",
+ "settings": ".settings",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["UpdateTenantSettingsRequestContentEnabledLocalesItem", "settings"]
diff --git a/src/auth0/management/tenants/client.py b/src/auth0/management/tenants/client.py
new file mode 100644
index 00000000..eb5f7d4f
--- /dev/null
+++ b/src/auth0/management/tenants/client.py
@@ -0,0 +1,63 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .raw_client import AsyncRawTenantsClient, RawTenantsClient
+
+if typing.TYPE_CHECKING:
+ from .settings.client import AsyncSettingsClient, SettingsClient
+
+
+class TenantsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawTenantsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._settings: typing.Optional[SettingsClient] = None
+
+ @property
+ def with_raw_response(self) -> RawTenantsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawTenantsClient
+ """
+ return self._raw_client
+
+ @property
+ def settings(self):
+ if self._settings is None:
+ from .settings.client import SettingsClient # noqa: E402
+
+ self._settings = SettingsClient(client_wrapper=self._client_wrapper)
+ return self._settings
+
+
+class AsyncTenantsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawTenantsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._settings: typing.Optional[AsyncSettingsClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawTenantsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawTenantsClient
+ """
+ return self._raw_client
+
+ @property
+ def settings(self):
+ if self._settings is None:
+ from .settings.client import AsyncSettingsClient # noqa: E402
+
+ self._settings = AsyncSettingsClient(client_wrapper=self._client_wrapper)
+ return self._settings
diff --git a/src/auth0/management/tenants/raw_client.py b/src/auth0/management/tenants/raw_client.py
new file mode 100644
index 00000000..d8e4fed5
--- /dev/null
+++ b/src/auth0/management/tenants/raw_client.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+
+
+class RawTenantsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+
+class AsyncRawTenantsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
diff --git a/src/auth0/management/tenants/settings/__init__.py b/src/auth0/management/tenants/settings/__init__.py
new file mode 100644
index 00000000..5d59698b
--- /dev/null
+++ b/src/auth0/management/tenants/settings/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from .types import UpdateTenantSettingsRequestContentEnabledLocalesItem
+_dynamic_imports: typing.Dict[str, str] = {"UpdateTenantSettingsRequestContentEnabledLocalesItem": ".types"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["UpdateTenantSettingsRequestContentEnabledLocalesItem"]
diff --git a/src/auth0/management/tenants/settings/client.py b/src/auth0/management/tenants/settings/client.py
new file mode 100644
index 00000000..59504a0a
--- /dev/null
+++ b/src/auth0/management/tenants/settings/client.py
@@ -0,0 +1,524 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.default_token_quota import DefaultTokenQuota
+from ...types.get_tenant_settings_response_content import GetTenantSettingsResponseContent
+from ...types.session_cookie_schema import SessionCookieSchema
+from ...types.tenant_oidc_logout_settings import TenantOidcLogoutSettings
+from ...types.tenant_settings_device_flow import TenantSettingsDeviceFlow
+from ...types.tenant_settings_error_page import TenantSettingsErrorPage
+from ...types.tenant_settings_flags import TenantSettingsFlags
+from ...types.tenant_settings_guardian_page import TenantSettingsGuardianPage
+from ...types.tenant_settings_mtls import TenantSettingsMtls
+from ...types.tenant_settings_password_page import TenantSettingsPasswordPage
+from ...types.tenant_settings_resource_parameter_profile import TenantSettingsResourceParameterProfile
+from ...types.tenant_settings_sessions import TenantSettingsSessions
+from ...types.update_tenant_settings_response_content import UpdateTenantSettingsResponseContent
+from .raw_client import AsyncRawSettingsClient, RawSettingsClient
+from .types.update_tenant_settings_request_content_enabled_locales_item import (
+ UpdateTenantSettingsRequestContentEnabledLocalesItem,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class SettingsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSettingsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawSettingsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSettingsClient
+ """
+ return self._raw_client
+
+ def get(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetTenantSettingsResponseContent:
+ """
+ Retrieve tenant settings. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetTenantSettingsResponseContent
+ Tenant settings successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.tenants.settings.get(
+ fields="fields",
+ include_fields=True,
+ )
+ """
+ _response = self._raw_client.get(fields=fields, include_fields=include_fields, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ *,
+ change_password: typing.Optional[TenantSettingsPasswordPage] = OMIT,
+ device_flow: typing.Optional[TenantSettingsDeviceFlow] = OMIT,
+ guardian_mfa_page: typing.Optional[TenantSettingsGuardianPage] = OMIT,
+ default_audience: typing.Optional[str] = "",
+ default_directory: typing.Optional[str] = "",
+ error_page: typing.Optional[TenantSettingsErrorPage] = OMIT,
+ default_token_quota: typing.Optional[DefaultTokenQuota] = OMIT,
+ flags: typing.Optional[TenantSettingsFlags] = OMIT,
+ friendly_name: typing.Optional[str] = "My Company",
+ picture_url: typing.Optional[str] = "https://mycompany.org/logo.png",
+ support_email: typing.Optional[str] = "support@mycompany.org",
+ support_url: typing.Optional[str] = "https://mycompany.org/support",
+ allowed_logout_urls: typing.Optional[typing.Sequence[str]] = OMIT,
+ session_lifetime: typing.Optional[int] = 168,
+ idle_session_lifetime: typing.Optional[int] = 72,
+ ephemeral_session_lifetime: typing.Optional[int] = 72,
+ idle_ephemeral_session_lifetime: typing.Optional[int] = 24,
+ sandbox_version: typing.Optional[str] = "22",
+ legacy_sandbox_version: typing.Optional[str] = OMIT,
+ default_redirection_uri: typing.Optional[str] = OMIT,
+ enabled_locales: typing.Optional[typing.Sequence[UpdateTenantSettingsRequestContentEnabledLocalesItem]] = OMIT,
+ session_cookie: typing.Optional[SessionCookieSchema] = OMIT,
+ sessions: typing.Optional[TenantSettingsSessions] = OMIT,
+ oidc_logout: typing.Optional[TenantOidcLogoutSettings] = OMIT,
+ customize_mfa_in_postlogin_action: typing.Optional[bool] = False,
+ allow_organization_name_in_authentication_api: typing.Optional[bool] = False,
+ acr_values_supported: typing.Optional[typing.Sequence[str]] = OMIT,
+ mtls: typing.Optional[TenantSettingsMtls] = OMIT,
+ pushed_authorization_requests_supported: typing.Optional[bool] = False,
+ authorization_response_iss_parameter_supported: typing.Optional[bool] = False,
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = OMIT,
+ resource_parameter_profile: typing.Optional[TenantSettingsResourceParameterProfile] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateTenantSettingsResponseContent:
+ """
+ Update settings for a tenant.
+
+ Parameters
+ ----------
+ change_password : typing.Optional[TenantSettingsPasswordPage]
+
+ device_flow : typing.Optional[TenantSettingsDeviceFlow]
+
+ guardian_mfa_page : typing.Optional[TenantSettingsGuardianPage]
+
+ default_audience : typing.Optional[str]
+ Default audience for API Authorization.
+
+ default_directory : typing.Optional[str]
+ Name of connection used for password grants at the `/token` endpoint. The following connection types are supported: LDAP, AD, Database Connections, Passwordless, Windows Azure Active Directory, ADFS.
+
+ error_page : typing.Optional[TenantSettingsErrorPage]
+
+ default_token_quota : typing.Optional[DefaultTokenQuota]
+
+ flags : typing.Optional[TenantSettingsFlags]
+
+ friendly_name : typing.Optional[str]
+ Friendly name for this tenant.
+
+ picture_url : typing.Optional[str]
+ URL of logo to be shown for this tenant (recommended size: 150x150)
+
+ support_email : typing.Optional[str]
+ End-user support email.
+
+ support_url : typing.Optional[str]
+ End-user support url.
+
+ allowed_logout_urls : typing.Optional[typing.Sequence[str]]
+ URLs that are valid to redirect to after logout from Auth0.
+
+ session_lifetime : typing.Optional[int]
+ Number of hours a session will stay valid.
+
+ idle_session_lifetime : typing.Optional[int]
+ Number of hours for which a session can be inactive before the user must log in again.
+
+ ephemeral_session_lifetime : typing.Optional[int]
+ Number of hours an ephemeral (non-persistent) session will stay valid.
+
+ idle_ephemeral_session_lifetime : typing.Optional[int]
+ Number of hours for which an ephemeral (non-persistent) session can be inactive before the user must log in again.
+
+ sandbox_version : typing.Optional[str]
+ Selected sandbox version for the extensibility environment
+
+ legacy_sandbox_version : typing.Optional[str]
+ Selected legacy sandbox version for the extensibility environment
+
+ default_redirection_uri : typing.Optional[str]
+ The default absolute redirection uri, must be https
+
+ enabled_locales : typing.Optional[typing.Sequence[UpdateTenantSettingsRequestContentEnabledLocalesItem]]
+ Supported locales for the user interface
+
+ session_cookie : typing.Optional[SessionCookieSchema]
+
+ sessions : typing.Optional[TenantSettingsSessions]
+
+ oidc_logout : typing.Optional[TenantOidcLogoutSettings]
+
+ customize_mfa_in_postlogin_action : typing.Optional[bool]
+ Whether to enable flexible factors for MFA in the PostLogin action
+
+ allow_organization_name_in_authentication_api : typing.Optional[bool]
+ Whether to accept an organization name instead of an ID on auth endpoints
+
+ acr_values_supported : typing.Optional[typing.Sequence[str]]
+ Supported ACR values
+
+ mtls : typing.Optional[TenantSettingsMtls]
+
+ pushed_authorization_requests_supported : typing.Optional[bool]
+ Enables the use of Pushed Authorization Requests
+
+ authorization_response_iss_parameter_supported : typing.Optional[bool]
+ Supports iss parameter in authorization responses
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ resource_parameter_profile : typing.Optional[TenantSettingsResourceParameterProfile]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateTenantSettingsResponseContent
+ Tenant settings successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.tenants.settings.update()
+ """
+ _response = self._raw_client.update(
+ change_password=change_password,
+ device_flow=device_flow,
+ guardian_mfa_page=guardian_mfa_page,
+ default_audience=default_audience,
+ default_directory=default_directory,
+ error_page=error_page,
+ default_token_quota=default_token_quota,
+ flags=flags,
+ friendly_name=friendly_name,
+ picture_url=picture_url,
+ support_email=support_email,
+ support_url=support_url,
+ allowed_logout_urls=allowed_logout_urls,
+ session_lifetime=session_lifetime,
+ idle_session_lifetime=idle_session_lifetime,
+ ephemeral_session_lifetime=ephemeral_session_lifetime,
+ idle_ephemeral_session_lifetime=idle_ephemeral_session_lifetime,
+ sandbox_version=sandbox_version,
+ legacy_sandbox_version=legacy_sandbox_version,
+ default_redirection_uri=default_redirection_uri,
+ enabled_locales=enabled_locales,
+ session_cookie=session_cookie,
+ sessions=sessions,
+ oidc_logout=oidc_logout,
+ customize_mfa_in_postlogin_action=customize_mfa_in_postlogin_action,
+ allow_organization_name_in_authentication_api=allow_organization_name_in_authentication_api,
+ acr_values_supported=acr_values_supported,
+ mtls=mtls,
+ pushed_authorization_requests_supported=pushed_authorization_requests_supported,
+ authorization_response_iss_parameter_supported=authorization_response_iss_parameter_supported,
+ skip_non_verifiable_callback_uri_confirmation_prompt=skip_non_verifiable_callback_uri_confirmation_prompt,
+ resource_parameter_profile=resource_parameter_profile,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncSettingsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSettingsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawSettingsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSettingsClient
+ """
+ return self._raw_client
+
+ async def get(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetTenantSettingsResponseContent:
+ """
+ Retrieve tenant settings. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetTenantSettingsResponseContent
+ Tenant settings successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.tenants.settings.get(
+ fields="fields",
+ include_fields=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(
+ fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ async def update(
+ self,
+ *,
+ change_password: typing.Optional[TenantSettingsPasswordPage] = OMIT,
+ device_flow: typing.Optional[TenantSettingsDeviceFlow] = OMIT,
+ guardian_mfa_page: typing.Optional[TenantSettingsGuardianPage] = OMIT,
+ default_audience: typing.Optional[str] = "",
+ default_directory: typing.Optional[str] = "",
+ error_page: typing.Optional[TenantSettingsErrorPage] = OMIT,
+ default_token_quota: typing.Optional[DefaultTokenQuota] = OMIT,
+ flags: typing.Optional[TenantSettingsFlags] = OMIT,
+ friendly_name: typing.Optional[str] = "My Company",
+ picture_url: typing.Optional[str] = "https://mycompany.org/logo.png",
+ support_email: typing.Optional[str] = "support@mycompany.org",
+ support_url: typing.Optional[str] = "https://mycompany.org/support",
+ allowed_logout_urls: typing.Optional[typing.Sequence[str]] = OMIT,
+ session_lifetime: typing.Optional[int] = 168,
+ idle_session_lifetime: typing.Optional[int] = 72,
+ ephemeral_session_lifetime: typing.Optional[int] = 72,
+ idle_ephemeral_session_lifetime: typing.Optional[int] = 24,
+ sandbox_version: typing.Optional[str] = "22",
+ legacy_sandbox_version: typing.Optional[str] = OMIT,
+ default_redirection_uri: typing.Optional[str] = OMIT,
+ enabled_locales: typing.Optional[typing.Sequence[UpdateTenantSettingsRequestContentEnabledLocalesItem]] = OMIT,
+ session_cookie: typing.Optional[SessionCookieSchema] = OMIT,
+ sessions: typing.Optional[TenantSettingsSessions] = OMIT,
+ oidc_logout: typing.Optional[TenantOidcLogoutSettings] = OMIT,
+ customize_mfa_in_postlogin_action: typing.Optional[bool] = False,
+ allow_organization_name_in_authentication_api: typing.Optional[bool] = False,
+ acr_values_supported: typing.Optional[typing.Sequence[str]] = OMIT,
+ mtls: typing.Optional[TenantSettingsMtls] = OMIT,
+ pushed_authorization_requests_supported: typing.Optional[bool] = False,
+ authorization_response_iss_parameter_supported: typing.Optional[bool] = False,
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = OMIT,
+ resource_parameter_profile: typing.Optional[TenantSettingsResourceParameterProfile] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateTenantSettingsResponseContent:
+ """
+ Update settings for a tenant.
+
+ Parameters
+ ----------
+ change_password : typing.Optional[TenantSettingsPasswordPage]
+
+ device_flow : typing.Optional[TenantSettingsDeviceFlow]
+
+ guardian_mfa_page : typing.Optional[TenantSettingsGuardianPage]
+
+ default_audience : typing.Optional[str]
+ Default audience for API Authorization.
+
+ default_directory : typing.Optional[str]
+ Name of connection used for password grants at the `/token` endpoint. The following connection types are supported: LDAP, AD, Database Connections, Passwordless, Windows Azure Active Directory, ADFS.
+
+ error_page : typing.Optional[TenantSettingsErrorPage]
+
+ default_token_quota : typing.Optional[DefaultTokenQuota]
+
+ flags : typing.Optional[TenantSettingsFlags]
+
+ friendly_name : typing.Optional[str]
+ Friendly name for this tenant.
+
+ picture_url : typing.Optional[str]
+ URL of logo to be shown for this tenant (recommended size: 150x150)
+
+ support_email : typing.Optional[str]
+ End-user support email.
+
+ support_url : typing.Optional[str]
+ End-user support url.
+
+ allowed_logout_urls : typing.Optional[typing.Sequence[str]]
+ URLs that are valid to redirect to after logout from Auth0.
+
+ session_lifetime : typing.Optional[int]
+ Number of hours a session will stay valid.
+
+ idle_session_lifetime : typing.Optional[int]
+ Number of hours for which a session can be inactive before the user must log in again.
+
+ ephemeral_session_lifetime : typing.Optional[int]
+ Number of hours an ephemeral (non-persistent) session will stay valid.
+
+ idle_ephemeral_session_lifetime : typing.Optional[int]
+ Number of hours for which an ephemeral (non-persistent) session can be inactive before the user must log in again.
+
+ sandbox_version : typing.Optional[str]
+ Selected sandbox version for the extensibility environment
+
+ legacy_sandbox_version : typing.Optional[str]
+ Selected legacy sandbox version for the extensibility environment
+
+ default_redirection_uri : typing.Optional[str]
+ The default absolute redirection uri, must be https
+
+ enabled_locales : typing.Optional[typing.Sequence[UpdateTenantSettingsRequestContentEnabledLocalesItem]]
+ Supported locales for the user interface
+
+ session_cookie : typing.Optional[SessionCookieSchema]
+
+ sessions : typing.Optional[TenantSettingsSessions]
+
+ oidc_logout : typing.Optional[TenantOidcLogoutSettings]
+
+ customize_mfa_in_postlogin_action : typing.Optional[bool]
+ Whether to enable flexible factors for MFA in the PostLogin action
+
+ allow_organization_name_in_authentication_api : typing.Optional[bool]
+ Whether to accept an organization name instead of an ID on auth endpoints
+
+ acr_values_supported : typing.Optional[typing.Sequence[str]]
+ Supported ACR values
+
+ mtls : typing.Optional[TenantSettingsMtls]
+
+ pushed_authorization_requests_supported : typing.Optional[bool]
+ Enables the use of Pushed Authorization Requests
+
+ authorization_response_iss_parameter_supported : typing.Optional[bool]
+ Supports iss parameter in authorization responses
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ resource_parameter_profile : typing.Optional[TenantSettingsResourceParameterProfile]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateTenantSettingsResponseContent
+ Tenant settings successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.tenants.settings.update()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ change_password=change_password,
+ device_flow=device_flow,
+ guardian_mfa_page=guardian_mfa_page,
+ default_audience=default_audience,
+ default_directory=default_directory,
+ error_page=error_page,
+ default_token_quota=default_token_quota,
+ flags=flags,
+ friendly_name=friendly_name,
+ picture_url=picture_url,
+ support_email=support_email,
+ support_url=support_url,
+ allowed_logout_urls=allowed_logout_urls,
+ session_lifetime=session_lifetime,
+ idle_session_lifetime=idle_session_lifetime,
+ ephemeral_session_lifetime=ephemeral_session_lifetime,
+ idle_ephemeral_session_lifetime=idle_ephemeral_session_lifetime,
+ sandbox_version=sandbox_version,
+ legacy_sandbox_version=legacy_sandbox_version,
+ default_redirection_uri=default_redirection_uri,
+ enabled_locales=enabled_locales,
+ session_cookie=session_cookie,
+ sessions=sessions,
+ oidc_logout=oidc_logout,
+ customize_mfa_in_postlogin_action=customize_mfa_in_postlogin_action,
+ allow_organization_name_in_authentication_api=allow_organization_name_in_authentication_api,
+ acr_values_supported=acr_values_supported,
+ mtls=mtls,
+ pushed_authorization_requests_supported=pushed_authorization_requests_supported,
+ authorization_response_iss_parameter_supported=authorization_response_iss_parameter_supported,
+ skip_non_verifiable_callback_uri_confirmation_prompt=skip_non_verifiable_callback_uri_confirmation_prompt,
+ resource_parameter_profile=resource_parameter_profile,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/tenants/settings/raw_client.py b/src/auth0/management/tenants/settings/raw_client.py
new file mode 100644
index 00000000..36247d92
--- /dev/null
+++ b/src/auth0/management/tenants/settings/raw_client.py
@@ -0,0 +1,750 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.default_token_quota import DefaultTokenQuota
+from ...types.get_tenant_settings_response_content import GetTenantSettingsResponseContent
+from ...types.session_cookie_schema import SessionCookieSchema
+from ...types.tenant_oidc_logout_settings import TenantOidcLogoutSettings
+from ...types.tenant_settings_device_flow import TenantSettingsDeviceFlow
+from ...types.tenant_settings_error_page import TenantSettingsErrorPage
+from ...types.tenant_settings_flags import TenantSettingsFlags
+from ...types.tenant_settings_guardian_page import TenantSettingsGuardianPage
+from ...types.tenant_settings_mtls import TenantSettingsMtls
+from ...types.tenant_settings_password_page import TenantSettingsPasswordPage
+from ...types.tenant_settings_resource_parameter_profile import TenantSettingsResourceParameterProfile
+from ...types.tenant_settings_sessions import TenantSettingsSessions
+from ...types.update_tenant_settings_response_content import UpdateTenantSettingsResponseContent
+from .types.update_tenant_settings_request_content_enabled_locales_item import (
+ UpdateTenantSettingsRequestContentEnabledLocalesItem,
+)
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawSettingsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[GetTenantSettingsResponseContent]:
+ """
+ Retrieve tenant settings. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetTenantSettingsResponseContent]
+ Tenant settings successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "tenants/settings",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetTenantSettingsResponseContent,
+ parse_obj_as(
+ type_=GetTenantSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ *,
+ change_password: typing.Optional[TenantSettingsPasswordPage] = OMIT,
+ device_flow: typing.Optional[TenantSettingsDeviceFlow] = OMIT,
+ guardian_mfa_page: typing.Optional[TenantSettingsGuardianPage] = OMIT,
+ default_audience: typing.Optional[str] = "",
+ default_directory: typing.Optional[str] = "",
+ error_page: typing.Optional[TenantSettingsErrorPage] = OMIT,
+ default_token_quota: typing.Optional[DefaultTokenQuota] = OMIT,
+ flags: typing.Optional[TenantSettingsFlags] = OMIT,
+ friendly_name: typing.Optional[str] = "My Company",
+ picture_url: typing.Optional[str] = "https://mycompany.org/logo.png",
+ support_email: typing.Optional[str] = "support@mycompany.org",
+ support_url: typing.Optional[str] = "https://mycompany.org/support",
+ allowed_logout_urls: typing.Optional[typing.Sequence[str]] = OMIT,
+ session_lifetime: typing.Optional[int] = 168,
+ idle_session_lifetime: typing.Optional[int] = 72,
+ ephemeral_session_lifetime: typing.Optional[int] = 72,
+ idle_ephemeral_session_lifetime: typing.Optional[int] = 24,
+ sandbox_version: typing.Optional[str] = "22",
+ legacy_sandbox_version: typing.Optional[str] = OMIT,
+ default_redirection_uri: typing.Optional[str] = OMIT,
+ enabled_locales: typing.Optional[typing.Sequence[UpdateTenantSettingsRequestContentEnabledLocalesItem]] = OMIT,
+ session_cookie: typing.Optional[SessionCookieSchema] = OMIT,
+ sessions: typing.Optional[TenantSettingsSessions] = OMIT,
+ oidc_logout: typing.Optional[TenantOidcLogoutSettings] = OMIT,
+ customize_mfa_in_postlogin_action: typing.Optional[bool] = False,
+ allow_organization_name_in_authentication_api: typing.Optional[bool] = False,
+ acr_values_supported: typing.Optional[typing.Sequence[str]] = OMIT,
+ mtls: typing.Optional[TenantSettingsMtls] = OMIT,
+ pushed_authorization_requests_supported: typing.Optional[bool] = False,
+ authorization_response_iss_parameter_supported: typing.Optional[bool] = False,
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = OMIT,
+ resource_parameter_profile: typing.Optional[TenantSettingsResourceParameterProfile] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateTenantSettingsResponseContent]:
+ """
+ Update settings for a tenant.
+
+ Parameters
+ ----------
+ change_password : typing.Optional[TenantSettingsPasswordPage]
+
+ device_flow : typing.Optional[TenantSettingsDeviceFlow]
+
+ guardian_mfa_page : typing.Optional[TenantSettingsGuardianPage]
+
+ default_audience : typing.Optional[str]
+ Default audience for API Authorization.
+
+ default_directory : typing.Optional[str]
+ Name of connection used for password grants at the `/token` endpoint. The following connection types are supported: LDAP, AD, Database Connections, Passwordless, Windows Azure Active Directory, ADFS.
+
+ error_page : typing.Optional[TenantSettingsErrorPage]
+
+ default_token_quota : typing.Optional[DefaultTokenQuota]
+
+ flags : typing.Optional[TenantSettingsFlags]
+
+ friendly_name : typing.Optional[str]
+ Friendly name for this tenant.
+
+ picture_url : typing.Optional[str]
+ URL of logo to be shown for this tenant (recommended size: 150x150)
+
+ support_email : typing.Optional[str]
+ End-user support email.
+
+ support_url : typing.Optional[str]
+ End-user support url.
+
+ allowed_logout_urls : typing.Optional[typing.Sequence[str]]
+ URLs that are valid to redirect to after logout from Auth0.
+
+ session_lifetime : typing.Optional[int]
+ Number of hours a session will stay valid.
+
+ idle_session_lifetime : typing.Optional[int]
+ Number of hours for which a session can be inactive before the user must log in again.
+
+ ephemeral_session_lifetime : typing.Optional[int]
+ Number of hours an ephemeral (non-persistent) session will stay valid.
+
+ idle_ephemeral_session_lifetime : typing.Optional[int]
+ Number of hours for which an ephemeral (non-persistent) session can be inactive before the user must log in again.
+
+ sandbox_version : typing.Optional[str]
+ Selected sandbox version for the extensibility environment
+
+ legacy_sandbox_version : typing.Optional[str]
+ Selected legacy sandbox version for the extensibility environment
+
+ default_redirection_uri : typing.Optional[str]
+ The default absolute redirection uri, must be https
+
+ enabled_locales : typing.Optional[typing.Sequence[UpdateTenantSettingsRequestContentEnabledLocalesItem]]
+ Supported locales for the user interface
+
+ session_cookie : typing.Optional[SessionCookieSchema]
+
+ sessions : typing.Optional[TenantSettingsSessions]
+
+ oidc_logout : typing.Optional[TenantOidcLogoutSettings]
+
+ customize_mfa_in_postlogin_action : typing.Optional[bool]
+ Whether to enable flexible factors for MFA in the PostLogin action
+
+ allow_organization_name_in_authentication_api : typing.Optional[bool]
+ Whether to accept an organization name instead of an ID on auth endpoints
+
+ acr_values_supported : typing.Optional[typing.Sequence[str]]
+ Supported ACR values
+
+ mtls : typing.Optional[TenantSettingsMtls]
+
+ pushed_authorization_requests_supported : typing.Optional[bool]
+ Enables the use of Pushed Authorization Requests
+
+ authorization_response_iss_parameter_supported : typing.Optional[bool]
+ Supports iss parameter in authorization responses
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ resource_parameter_profile : typing.Optional[TenantSettingsResourceParameterProfile]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateTenantSettingsResponseContent]
+ Tenant settings successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "tenants/settings",
+ method="PATCH",
+ json={
+ "change_password": convert_and_respect_annotation_metadata(
+ object_=change_password, annotation=typing.Optional[TenantSettingsPasswordPage], direction="write"
+ ),
+ "device_flow": convert_and_respect_annotation_metadata(
+ object_=device_flow, annotation=typing.Optional[TenantSettingsDeviceFlow], direction="write"
+ ),
+ "guardian_mfa_page": convert_and_respect_annotation_metadata(
+ object_=guardian_mfa_page, annotation=typing.Optional[TenantSettingsGuardianPage], direction="write"
+ ),
+ "default_audience": default_audience,
+ "default_directory": default_directory,
+ "error_page": convert_and_respect_annotation_metadata(
+ object_=error_page, annotation=typing.Optional[TenantSettingsErrorPage], direction="write"
+ ),
+ "default_token_quota": convert_and_respect_annotation_metadata(
+ object_=default_token_quota, annotation=typing.Optional[DefaultTokenQuota], direction="write"
+ ),
+ "flags": convert_and_respect_annotation_metadata(
+ object_=flags, annotation=TenantSettingsFlags, direction="write"
+ ),
+ "friendly_name": friendly_name,
+ "picture_url": picture_url,
+ "support_email": support_email,
+ "support_url": support_url,
+ "allowed_logout_urls": allowed_logout_urls,
+ "session_lifetime": session_lifetime,
+ "idle_session_lifetime": idle_session_lifetime,
+ "ephemeral_session_lifetime": ephemeral_session_lifetime,
+ "idle_ephemeral_session_lifetime": idle_ephemeral_session_lifetime,
+ "sandbox_version": sandbox_version,
+ "legacy_sandbox_version": legacy_sandbox_version,
+ "default_redirection_uri": default_redirection_uri,
+ "enabled_locales": enabled_locales,
+ "session_cookie": convert_and_respect_annotation_metadata(
+ object_=session_cookie, annotation=typing.Optional[SessionCookieSchema], direction="write"
+ ),
+ "sessions": convert_and_respect_annotation_metadata(
+ object_=sessions, annotation=typing.Optional[TenantSettingsSessions], direction="write"
+ ),
+ "oidc_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_logout, annotation=TenantOidcLogoutSettings, direction="write"
+ ),
+ "customize_mfa_in_postlogin_action": customize_mfa_in_postlogin_action,
+ "allow_organization_name_in_authentication_api": allow_organization_name_in_authentication_api,
+ "acr_values_supported": acr_values_supported,
+ "mtls": convert_and_respect_annotation_metadata(
+ object_=mtls, annotation=typing.Optional[TenantSettingsMtls], direction="write"
+ ),
+ "pushed_authorization_requests_supported": pushed_authorization_requests_supported,
+ "authorization_response_iss_parameter_supported": authorization_response_iss_parameter_supported,
+ "skip_non_verifiable_callback_uri_confirmation_prompt": skip_non_verifiable_callback_uri_confirmation_prompt,
+ "resource_parameter_profile": resource_parameter_profile,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateTenantSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateTenantSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSettingsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[GetTenantSettingsResponseContent]:
+ """
+ Retrieve tenant settings. A list of fields to include or exclude may also be specified.
+
+ Parameters
+ ----------
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetTenantSettingsResponseContent]
+ Tenant settings successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "tenants/settings",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetTenantSettingsResponseContent,
+ parse_obj_as(
+ type_=GetTenantSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ *,
+ change_password: typing.Optional[TenantSettingsPasswordPage] = OMIT,
+ device_flow: typing.Optional[TenantSettingsDeviceFlow] = OMIT,
+ guardian_mfa_page: typing.Optional[TenantSettingsGuardianPage] = OMIT,
+ default_audience: typing.Optional[str] = "",
+ default_directory: typing.Optional[str] = "",
+ error_page: typing.Optional[TenantSettingsErrorPage] = OMIT,
+ default_token_quota: typing.Optional[DefaultTokenQuota] = OMIT,
+ flags: typing.Optional[TenantSettingsFlags] = OMIT,
+ friendly_name: typing.Optional[str] = "My Company",
+ picture_url: typing.Optional[str] = "https://mycompany.org/logo.png",
+ support_email: typing.Optional[str] = "support@mycompany.org",
+ support_url: typing.Optional[str] = "https://mycompany.org/support",
+ allowed_logout_urls: typing.Optional[typing.Sequence[str]] = OMIT,
+ session_lifetime: typing.Optional[int] = 168,
+ idle_session_lifetime: typing.Optional[int] = 72,
+ ephemeral_session_lifetime: typing.Optional[int] = 72,
+ idle_ephemeral_session_lifetime: typing.Optional[int] = 24,
+ sandbox_version: typing.Optional[str] = "22",
+ legacy_sandbox_version: typing.Optional[str] = OMIT,
+ default_redirection_uri: typing.Optional[str] = OMIT,
+ enabled_locales: typing.Optional[typing.Sequence[UpdateTenantSettingsRequestContentEnabledLocalesItem]] = OMIT,
+ session_cookie: typing.Optional[SessionCookieSchema] = OMIT,
+ sessions: typing.Optional[TenantSettingsSessions] = OMIT,
+ oidc_logout: typing.Optional[TenantOidcLogoutSettings] = OMIT,
+ customize_mfa_in_postlogin_action: typing.Optional[bool] = False,
+ allow_organization_name_in_authentication_api: typing.Optional[bool] = False,
+ acr_values_supported: typing.Optional[typing.Sequence[str]] = OMIT,
+ mtls: typing.Optional[TenantSettingsMtls] = OMIT,
+ pushed_authorization_requests_supported: typing.Optional[bool] = False,
+ authorization_response_iss_parameter_supported: typing.Optional[bool] = False,
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = OMIT,
+ resource_parameter_profile: typing.Optional[TenantSettingsResourceParameterProfile] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateTenantSettingsResponseContent]:
+ """
+ Update settings for a tenant.
+
+ Parameters
+ ----------
+ change_password : typing.Optional[TenantSettingsPasswordPage]
+
+ device_flow : typing.Optional[TenantSettingsDeviceFlow]
+
+ guardian_mfa_page : typing.Optional[TenantSettingsGuardianPage]
+
+ default_audience : typing.Optional[str]
+ Default audience for API Authorization.
+
+ default_directory : typing.Optional[str]
+ Name of connection used for password grants at the `/token` endpoint. The following connection types are supported: LDAP, AD, Database Connections, Passwordless, Windows Azure Active Directory, ADFS.
+
+ error_page : typing.Optional[TenantSettingsErrorPage]
+
+ default_token_quota : typing.Optional[DefaultTokenQuota]
+
+ flags : typing.Optional[TenantSettingsFlags]
+
+ friendly_name : typing.Optional[str]
+ Friendly name for this tenant.
+
+ picture_url : typing.Optional[str]
+ URL of logo to be shown for this tenant (recommended size: 150x150)
+
+ support_email : typing.Optional[str]
+ End-user support email.
+
+ support_url : typing.Optional[str]
+ End-user support url.
+
+ allowed_logout_urls : typing.Optional[typing.Sequence[str]]
+ URLs that are valid to redirect to after logout from Auth0.
+
+ session_lifetime : typing.Optional[int]
+ Number of hours a session will stay valid.
+
+ idle_session_lifetime : typing.Optional[int]
+ Number of hours for which a session can be inactive before the user must log in again.
+
+ ephemeral_session_lifetime : typing.Optional[int]
+ Number of hours an ephemeral (non-persistent) session will stay valid.
+
+ idle_ephemeral_session_lifetime : typing.Optional[int]
+ Number of hours for which an ephemeral (non-persistent) session can be inactive before the user must log in again.
+
+ sandbox_version : typing.Optional[str]
+ Selected sandbox version for the extensibility environment
+
+ legacy_sandbox_version : typing.Optional[str]
+ Selected legacy sandbox version for the extensibility environment
+
+ default_redirection_uri : typing.Optional[str]
+ The default absolute redirection uri, must be https
+
+ enabled_locales : typing.Optional[typing.Sequence[UpdateTenantSettingsRequestContentEnabledLocalesItem]]
+ Supported locales for the user interface
+
+ session_cookie : typing.Optional[SessionCookieSchema]
+
+ sessions : typing.Optional[TenantSettingsSessions]
+
+ oidc_logout : typing.Optional[TenantOidcLogoutSettings]
+
+ customize_mfa_in_postlogin_action : typing.Optional[bool]
+ Whether to enable flexible factors for MFA in the PostLogin action
+
+ allow_organization_name_in_authentication_api : typing.Optional[bool]
+ Whether to accept an organization name instead of an ID on auth endpoints
+
+ acr_values_supported : typing.Optional[typing.Sequence[str]]
+ Supported ACR values
+
+ mtls : typing.Optional[TenantSettingsMtls]
+
+ pushed_authorization_requests_supported : typing.Optional[bool]
+ Enables the use of Pushed Authorization Requests
+
+ authorization_response_iss_parameter_supported : typing.Optional[bool]
+ Supports iss parameter in authorization responses
+
+ skip_non_verifiable_callback_uri_confirmation_prompt : typing.Optional[bool]
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+
+ resource_parameter_profile : typing.Optional[TenantSettingsResourceParameterProfile]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateTenantSettingsResponseContent]
+ Tenant settings successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "tenants/settings",
+ method="PATCH",
+ json={
+ "change_password": convert_and_respect_annotation_metadata(
+ object_=change_password, annotation=typing.Optional[TenantSettingsPasswordPage], direction="write"
+ ),
+ "device_flow": convert_and_respect_annotation_metadata(
+ object_=device_flow, annotation=typing.Optional[TenantSettingsDeviceFlow], direction="write"
+ ),
+ "guardian_mfa_page": convert_and_respect_annotation_metadata(
+ object_=guardian_mfa_page, annotation=typing.Optional[TenantSettingsGuardianPage], direction="write"
+ ),
+ "default_audience": default_audience,
+ "default_directory": default_directory,
+ "error_page": convert_and_respect_annotation_metadata(
+ object_=error_page, annotation=typing.Optional[TenantSettingsErrorPage], direction="write"
+ ),
+ "default_token_quota": convert_and_respect_annotation_metadata(
+ object_=default_token_quota, annotation=typing.Optional[DefaultTokenQuota], direction="write"
+ ),
+ "flags": convert_and_respect_annotation_metadata(
+ object_=flags, annotation=TenantSettingsFlags, direction="write"
+ ),
+ "friendly_name": friendly_name,
+ "picture_url": picture_url,
+ "support_email": support_email,
+ "support_url": support_url,
+ "allowed_logout_urls": allowed_logout_urls,
+ "session_lifetime": session_lifetime,
+ "idle_session_lifetime": idle_session_lifetime,
+ "ephemeral_session_lifetime": ephemeral_session_lifetime,
+ "idle_ephemeral_session_lifetime": idle_ephemeral_session_lifetime,
+ "sandbox_version": sandbox_version,
+ "legacy_sandbox_version": legacy_sandbox_version,
+ "default_redirection_uri": default_redirection_uri,
+ "enabled_locales": enabled_locales,
+ "session_cookie": convert_and_respect_annotation_metadata(
+ object_=session_cookie, annotation=typing.Optional[SessionCookieSchema], direction="write"
+ ),
+ "sessions": convert_and_respect_annotation_metadata(
+ object_=sessions, annotation=typing.Optional[TenantSettingsSessions], direction="write"
+ ),
+ "oidc_logout": convert_and_respect_annotation_metadata(
+ object_=oidc_logout, annotation=TenantOidcLogoutSettings, direction="write"
+ ),
+ "customize_mfa_in_postlogin_action": customize_mfa_in_postlogin_action,
+ "allow_organization_name_in_authentication_api": allow_organization_name_in_authentication_api,
+ "acr_values_supported": acr_values_supported,
+ "mtls": convert_and_respect_annotation_metadata(
+ object_=mtls, annotation=typing.Optional[TenantSettingsMtls], direction="write"
+ ),
+ "pushed_authorization_requests_supported": pushed_authorization_requests_supported,
+ "authorization_response_iss_parameter_supported": authorization_response_iss_parameter_supported,
+ "skip_non_verifiable_callback_uri_confirmation_prompt": skip_non_verifiable_callback_uri_confirmation_prompt,
+ "resource_parameter_profile": resource_parameter_profile,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateTenantSettingsResponseContent,
+ parse_obj_as(
+ type_=UpdateTenantSettingsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/tenants/settings/types/__init__.py b/src/auth0/management/tenants/settings/types/__init__.py
new file mode 100644
index 00000000..2a53429a
--- /dev/null
+++ b/src/auth0/management/tenants/settings/types/__init__.py
@@ -0,0 +1,38 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from .update_tenant_settings_request_content_enabled_locales_item import (
+ UpdateTenantSettingsRequestContentEnabledLocalesItem,
+ )
+_dynamic_imports: typing.Dict[str, str] = {
+ "UpdateTenantSettingsRequestContentEnabledLocalesItem": ".update_tenant_settings_request_content_enabled_locales_item"
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["UpdateTenantSettingsRequestContentEnabledLocalesItem"]
diff --git a/src/auth0/management/tenants/settings/types/update_tenant_settings_request_content_enabled_locales_item.py b/src/auth0/management/tenants/settings/types/update_tenant_settings_request_content_enabled_locales_item.py
new file mode 100644
index 00000000..f5122da3
--- /dev/null
+++ b/src/auth0/management/tenants/settings/types/update_tenant_settings_request_content_enabled_locales_item.py
@@ -0,0 +1,90 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UpdateTenantSettingsRequestContentEnabledLocalesItem = typing.Union[
+ typing.Literal[
+ "am",
+ "ar",
+ "ar-EG",
+ "ar-SA",
+ "az",
+ "bg",
+ "bn",
+ "bs",
+ "ca-ES",
+ "cnr",
+ "cs",
+ "cy",
+ "da",
+ "de",
+ "el",
+ "en",
+ "en-CA",
+ "es",
+ "es-419",
+ "es-AR",
+ "es-MX",
+ "et",
+ "eu-ES",
+ "fa",
+ "fi",
+ "fr",
+ "fr-CA",
+ "fr-FR",
+ "gl-ES",
+ "gu",
+ "he",
+ "hi",
+ "hr",
+ "hu",
+ "hy",
+ "id",
+ "is",
+ "it",
+ "ja",
+ "ka",
+ "kk",
+ "kn",
+ "ko",
+ "lt",
+ "lv",
+ "mk",
+ "ml",
+ "mn",
+ "mr",
+ "ms",
+ "my",
+ "nb",
+ "nl",
+ "nn",
+ "no",
+ "pa",
+ "pl",
+ "pt",
+ "pt-BR",
+ "pt-PT",
+ "ro",
+ "ru",
+ "sk",
+ "sl",
+ "so",
+ "sq",
+ "sr",
+ "sv",
+ "sw",
+ "ta",
+ "te",
+ "th",
+ "tl",
+ "tr",
+ "uk",
+ "ur",
+ "vi",
+ "zgh",
+ "zh-CN",
+ "zh-HK",
+ "zh-TW",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/tickets/__init__.py b/src/auth0/management/tickets/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/tickets/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/tickets/client.py b/src/auth0/management/tickets/client.py
new file mode 100644
index 00000000..b60e4fcc
--- /dev/null
+++ b/src/auth0/management/tickets/client.py
@@ -0,0 +1,364 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.change_password_ticket_identity import ChangePasswordTicketIdentity
+from ..types.change_password_ticket_response_content import ChangePasswordTicketResponseContent
+from ..types.identity import Identity
+from ..types.verify_email_ticket_response_content import VerifyEmailTicketResponseContent
+from .raw_client import AsyncRawTicketsClient, RawTicketsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class TicketsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawTicketsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawTicketsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawTicketsClient
+ """
+ return self._raw_client
+
+ def verify_email(
+ self,
+ *,
+ user_id: str,
+ result_url: typing.Optional[str] = "http://myapp.com/callback",
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ ttl_sec: typing.Optional[int] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ identity: typing.Optional[Identity] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> VerifyEmailTicketResponseContent:
+ """
+ Create an email verification ticket for a given user. An email verification ticket is a generated URL that the user can consume to verify their email address.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of for whom the ticket should be created.
+
+ result_url : typing.Optional[str]
+ URL the user will be redirected to in the classic Universal Login experience once the ticket is used. Cannot be specified when using client_id or organization_id.
+
+ client_id : typing.Optional[str]
+ ID of the client (application). If provided for tenants using the New Universal Login experience, the email template and UI displays application details, and the user is prompted to redirect to the application's default login route after the ticket is used. client_id is required to use the Password Reset Post Challenge trigger.
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether to include the email address as part of the returnUrl in the reset_email (true), or not (false).
+
+ identity : typing.Optional[Identity]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ VerifyEmailTicketResponseContent
+ Ticket successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.tickets.verify_email(
+ user_id="user_id",
+ )
+ """
+ _response = self._raw_client.verify_email(
+ user_id=user_id,
+ result_url=result_url,
+ client_id=client_id,
+ organization_id=organization_id,
+ ttl_sec=ttl_sec,
+ include_email_in_redirect=include_email_in_redirect,
+ identity=identity,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def change_password(
+ self,
+ *,
+ result_url: typing.Optional[str] = "http://myapp.com/callback",
+ user_id: typing.Optional[str] = OMIT,
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ email: typing.Optional[str] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ mark_email_as_verified: typing.Optional[bool] = False,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ identity: typing.Optional[ChangePasswordTicketIdentity] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ChangePasswordTicketResponseContent:
+ """
+ Create a password change ticket for a given user. A password change ticket is a generated URL that the user can consume to start a reset password flow.
+
+ Note: This endpoint does not verify the given user’s identity. If you call this endpoint within your application, you must design your application to verify the user’s identity.
+
+ Parameters
+ ----------
+ result_url : typing.Optional[str]
+ URL the user will be redirected to in the classic Universal Login experience once the ticket is used. Cannot be specified when using client_id or organization_id.
+
+ user_id : typing.Optional[str]
+ user_id of for whom the ticket should be created.
+
+ client_id : typing.Optional[str]
+ ID of the client (application). If provided for tenants using the New Universal Login experience, the email template and UI displays application details, and the user is prompted to redirect to the application's default login route after the ticket is used. client_id is required to use the Password Reset Post Challenge trigger.
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ connection_id : typing.Optional[str]
+ ID of the connection. If provided, allows the user to be specified using email instead of user_id. If you set this value, you must also send the email parameter. You cannot send user_id when specifying a connection_id.
+
+ email : typing.Optional[str]
+ Email address of the user for whom the tickets should be created. Requires the connection_id parameter. Cannot be specified when using user_id.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ mark_email_as_verified : typing.Optional[bool]
+ Whether to set the email_verified attribute to true (true) or whether it should not be updated (false).
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether to include the email address as part of the returnUrl in the reset_email (true), or not (false).
+
+ identity : typing.Optional[ChangePasswordTicketIdentity]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ChangePasswordTicketResponseContent
+ Ticket successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.tickets.change_password()
+ """
+ _response = self._raw_client.change_password(
+ result_url=result_url,
+ user_id=user_id,
+ client_id=client_id,
+ organization_id=organization_id,
+ connection_id=connection_id,
+ email=email,
+ ttl_sec=ttl_sec,
+ mark_email_as_verified=mark_email_as_verified,
+ include_email_in_redirect=include_email_in_redirect,
+ identity=identity,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncTicketsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawTicketsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawTicketsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawTicketsClient
+ """
+ return self._raw_client
+
+ async def verify_email(
+ self,
+ *,
+ user_id: str,
+ result_url: typing.Optional[str] = "http://myapp.com/callback",
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ ttl_sec: typing.Optional[int] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ identity: typing.Optional[Identity] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> VerifyEmailTicketResponseContent:
+ """
+ Create an email verification ticket for a given user. An email verification ticket is a generated URL that the user can consume to verify their email address.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of for whom the ticket should be created.
+
+ result_url : typing.Optional[str]
+ URL the user will be redirected to in the classic Universal Login experience once the ticket is used. Cannot be specified when using client_id or organization_id.
+
+ client_id : typing.Optional[str]
+ ID of the client (application). If provided for tenants using the New Universal Login experience, the email template and UI displays application details, and the user is prompted to redirect to the application's default login route after the ticket is used. client_id is required to use the Password Reset Post Challenge trigger.
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether to include the email address as part of the returnUrl in the reset_email (true), or not (false).
+
+ identity : typing.Optional[Identity]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ VerifyEmailTicketResponseContent
+ Ticket successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.tickets.verify_email(
+ user_id="user_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.verify_email(
+ user_id=user_id,
+ result_url=result_url,
+ client_id=client_id,
+ organization_id=organization_id,
+ ttl_sec=ttl_sec,
+ include_email_in_redirect=include_email_in_redirect,
+ identity=identity,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def change_password(
+ self,
+ *,
+ result_url: typing.Optional[str] = "http://myapp.com/callback",
+ user_id: typing.Optional[str] = OMIT,
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ email: typing.Optional[str] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ mark_email_as_verified: typing.Optional[bool] = False,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ identity: typing.Optional[ChangePasswordTicketIdentity] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ChangePasswordTicketResponseContent:
+ """
+ Create a password change ticket for a given user. A password change ticket is a generated URL that the user can consume to start a reset password flow.
+
+ Note: This endpoint does not verify the given user’s identity. If you call this endpoint within your application, you must design your application to verify the user’s identity.
+
+ Parameters
+ ----------
+ result_url : typing.Optional[str]
+ URL the user will be redirected to in the classic Universal Login experience once the ticket is used. Cannot be specified when using client_id or organization_id.
+
+ user_id : typing.Optional[str]
+ user_id of for whom the ticket should be created.
+
+ client_id : typing.Optional[str]
+ ID of the client (application). If provided for tenants using the New Universal Login experience, the email template and UI displays application details, and the user is prompted to redirect to the application's default login route after the ticket is used. client_id is required to use the Password Reset Post Challenge trigger.
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ connection_id : typing.Optional[str]
+ ID of the connection. If provided, allows the user to be specified using email instead of user_id. If you set this value, you must also send the email parameter. You cannot send user_id when specifying a connection_id.
+
+ email : typing.Optional[str]
+ Email address of the user for whom the tickets should be created. Requires the connection_id parameter. Cannot be specified when using user_id.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ mark_email_as_verified : typing.Optional[bool]
+ Whether to set the email_verified attribute to true (true) or whether it should not be updated (false).
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether to include the email address as part of the returnUrl in the reset_email (true), or not (false).
+
+ identity : typing.Optional[ChangePasswordTicketIdentity]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ChangePasswordTicketResponseContent
+ Ticket successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.tickets.change_password()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.change_password(
+ result_url=result_url,
+ user_id=user_id,
+ client_id=client_id,
+ organization_id=organization_id,
+ connection_id=connection_id,
+ email=email,
+ ttl_sec=ttl_sec,
+ mark_email_as_verified=mark_email_as_verified,
+ include_email_in_redirect=include_email_in_redirect,
+ identity=identity,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/tickets/raw_client.py b/src/auth0/management/tickets/raw_client.py
new file mode 100644
index 00000000..abbf026f
--- /dev/null
+++ b/src/auth0/management/tickets/raw_client.py
@@ -0,0 +1,607 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.change_password_ticket_identity import ChangePasswordTicketIdentity
+from ..types.change_password_ticket_response_content import ChangePasswordTicketResponseContent
+from ..types.identity import Identity
+from ..types.verify_email_ticket_response_content import VerifyEmailTicketResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawTicketsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def verify_email(
+ self,
+ *,
+ user_id: str,
+ result_url: typing.Optional[str] = "http://myapp.com/callback",
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ ttl_sec: typing.Optional[int] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ identity: typing.Optional[Identity] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[VerifyEmailTicketResponseContent]:
+ """
+ Create an email verification ticket for a given user. An email verification ticket is a generated URL that the user can consume to verify their email address.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of for whom the ticket should be created.
+
+ result_url : typing.Optional[str]
+ URL the user will be redirected to in the classic Universal Login experience once the ticket is used. Cannot be specified when using client_id or organization_id.
+
+ client_id : typing.Optional[str]
+ ID of the client (application). If provided for tenants using the New Universal Login experience, the email template and UI displays application details, and the user is prompted to redirect to the application's default login route after the ticket is used. client_id is required to use the Password Reset Post Challenge trigger.
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether to include the email address as part of the returnUrl in the reset_email (true), or not (false).
+
+ identity : typing.Optional[Identity]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[VerifyEmailTicketResponseContent]
+ Ticket successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "tickets/email-verification",
+ method="POST",
+ json={
+ "result_url": result_url,
+ "user_id": user_id,
+ "client_id": client_id,
+ "organization_id": organization_id,
+ "ttl_sec": ttl_sec,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "identity": convert_and_respect_annotation_metadata(
+ object_=identity, annotation=Identity, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ VerifyEmailTicketResponseContent,
+ parse_obj_as(
+ type_=VerifyEmailTicketResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def change_password(
+ self,
+ *,
+ result_url: typing.Optional[str] = "http://myapp.com/callback",
+ user_id: typing.Optional[str] = OMIT,
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ email: typing.Optional[str] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ mark_email_as_verified: typing.Optional[bool] = False,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ identity: typing.Optional[ChangePasswordTicketIdentity] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[ChangePasswordTicketResponseContent]:
+ """
+ Create a password change ticket for a given user. A password change ticket is a generated URL that the user can consume to start a reset password flow.
+
+ Note: This endpoint does not verify the given user’s identity. If you call this endpoint within your application, you must design your application to verify the user’s identity.
+
+ Parameters
+ ----------
+ result_url : typing.Optional[str]
+ URL the user will be redirected to in the classic Universal Login experience once the ticket is used. Cannot be specified when using client_id or organization_id.
+
+ user_id : typing.Optional[str]
+ user_id of for whom the ticket should be created.
+
+ client_id : typing.Optional[str]
+ ID of the client (application). If provided for tenants using the New Universal Login experience, the email template and UI displays application details, and the user is prompted to redirect to the application's default login route after the ticket is used. client_id is required to use the Password Reset Post Challenge trigger.
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ connection_id : typing.Optional[str]
+ ID of the connection. If provided, allows the user to be specified using email instead of user_id. If you set this value, you must also send the email parameter. You cannot send user_id when specifying a connection_id.
+
+ email : typing.Optional[str]
+ Email address of the user for whom the tickets should be created. Requires the connection_id parameter. Cannot be specified when using user_id.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ mark_email_as_verified : typing.Optional[bool]
+ Whether to set the email_verified attribute to true (true) or whether it should not be updated (false).
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether to include the email address as part of the returnUrl in the reset_email (true), or not (false).
+
+ identity : typing.Optional[ChangePasswordTicketIdentity]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ChangePasswordTicketResponseContent]
+ Ticket successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "tickets/password-change",
+ method="POST",
+ json={
+ "result_url": result_url,
+ "user_id": user_id,
+ "client_id": client_id,
+ "organization_id": organization_id,
+ "connection_id": connection_id,
+ "email": email,
+ "ttl_sec": ttl_sec,
+ "mark_email_as_verified": mark_email_as_verified,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "identity": convert_and_respect_annotation_metadata(
+ object_=identity, annotation=ChangePasswordTicketIdentity, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ChangePasswordTicketResponseContent,
+ parse_obj_as(
+ type_=ChangePasswordTicketResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawTicketsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def verify_email(
+ self,
+ *,
+ user_id: str,
+ result_url: typing.Optional[str] = "http://myapp.com/callback",
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ ttl_sec: typing.Optional[int] = OMIT,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ identity: typing.Optional[Identity] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[VerifyEmailTicketResponseContent]:
+ """
+ Create an email verification ticket for a given user. An email verification ticket is a generated URL that the user can consume to verify their email address.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of for whom the ticket should be created.
+
+ result_url : typing.Optional[str]
+ URL the user will be redirected to in the classic Universal Login experience once the ticket is used. Cannot be specified when using client_id or organization_id.
+
+ client_id : typing.Optional[str]
+ ID of the client (application). If provided for tenants using the New Universal Login experience, the email template and UI displays application details, and the user is prompted to redirect to the application's default login route after the ticket is used. client_id is required to use the Password Reset Post Challenge trigger.
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether to include the email address as part of the returnUrl in the reset_email (true), or not (false).
+
+ identity : typing.Optional[Identity]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[VerifyEmailTicketResponseContent]
+ Ticket successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "tickets/email-verification",
+ method="POST",
+ json={
+ "result_url": result_url,
+ "user_id": user_id,
+ "client_id": client_id,
+ "organization_id": organization_id,
+ "ttl_sec": ttl_sec,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "identity": convert_and_respect_annotation_metadata(
+ object_=identity, annotation=Identity, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ VerifyEmailTicketResponseContent,
+ parse_obj_as(
+ type_=VerifyEmailTicketResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def change_password(
+ self,
+ *,
+ result_url: typing.Optional[str] = "http://myapp.com/callback",
+ user_id: typing.Optional[str] = OMIT,
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ organization_id: typing.Optional[str] = "org_2eondWoxcMIpaLQc",
+ connection_id: typing.Optional[str] = "con_0000000000000001",
+ email: typing.Optional[str] = OMIT,
+ ttl_sec: typing.Optional[int] = OMIT,
+ mark_email_as_verified: typing.Optional[bool] = False,
+ include_email_in_redirect: typing.Optional[bool] = OMIT,
+ identity: typing.Optional[ChangePasswordTicketIdentity] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[ChangePasswordTicketResponseContent]:
+ """
+ Create a password change ticket for a given user. A password change ticket is a generated URL that the user can consume to start a reset password flow.
+
+ Note: This endpoint does not verify the given user’s identity. If you call this endpoint within your application, you must design your application to verify the user’s identity.
+
+ Parameters
+ ----------
+ result_url : typing.Optional[str]
+ URL the user will be redirected to in the classic Universal Login experience once the ticket is used. Cannot be specified when using client_id or organization_id.
+
+ user_id : typing.Optional[str]
+ user_id of for whom the ticket should be created.
+
+ client_id : typing.Optional[str]
+ ID of the client (application). If provided for tenants using the New Universal Login experience, the email template and UI displays application details, and the user is prompted to redirect to the application's default login route after the ticket is used. client_id is required to use the Password Reset Post Challenge trigger.
+
+ organization_id : typing.Optional[str]
+ (Optional) Organization ID – the ID of the Organization. If provided, organization parameters will be made available to the email template and organization branding will be applied to the prompt. In addition, the redirect link in the prompt will include organization_id and organization_name query string parameters.
+
+ connection_id : typing.Optional[str]
+ ID of the connection. If provided, allows the user to be specified using email instead of user_id. If you set this value, you must also send the email parameter. You cannot send user_id when specifying a connection_id.
+
+ email : typing.Optional[str]
+ Email address of the user for whom the tickets should be created. Requires the connection_id parameter. Cannot be specified when using user_id.
+
+ ttl_sec : typing.Optional[int]
+ Number of seconds for which the ticket is valid before expiration. If unspecified or set to 0, this value defaults to 432000 seconds (5 days).
+
+ mark_email_as_verified : typing.Optional[bool]
+ Whether to set the email_verified attribute to true (true) or whether it should not be updated (false).
+
+ include_email_in_redirect : typing.Optional[bool]
+ Whether to include the email address as part of the returnUrl in the reset_email (true), or not (false).
+
+ identity : typing.Optional[ChangePasswordTicketIdentity]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ChangePasswordTicketResponseContent]
+ Ticket successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "tickets/password-change",
+ method="POST",
+ json={
+ "result_url": result_url,
+ "user_id": user_id,
+ "client_id": client_id,
+ "organization_id": organization_id,
+ "connection_id": connection_id,
+ "email": email,
+ "ttl_sec": ttl_sec,
+ "mark_email_as_verified": mark_email_as_verified,
+ "includeEmailInRedirect": include_email_in_redirect,
+ "identity": convert_and_respect_annotation_metadata(
+ object_=identity, annotation=ChangePasswordTicketIdentity, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ChangePasswordTicketResponseContent,
+ parse_obj_as(
+ type_=ChangePasswordTicketResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/token_exchange_profiles/__init__.py b/src/auth0/management/token_exchange_profiles/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/token_exchange_profiles/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/token_exchange_profiles/client.py b/src/auth0/management/token_exchange_profiles/client.py
new file mode 100644
index 00000000..8e43297b
--- /dev/null
+++ b/src/auth0/management/token_exchange_profiles/client.py
@@ -0,0 +1,526 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.create_token_exchange_profile_response_content import CreateTokenExchangeProfileResponseContent
+from ..types.get_token_exchange_profile_response_content import GetTokenExchangeProfileResponseContent
+from ..types.list_token_exchange_profile_response_content import ListTokenExchangeProfileResponseContent
+from ..types.token_exchange_profile_response_content import TokenExchangeProfileResponseContent
+from .raw_client import AsyncRawTokenExchangeProfilesClient, RawTokenExchangeProfilesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class TokenExchangeProfilesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawTokenExchangeProfilesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawTokenExchangeProfilesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawTokenExchangeProfilesClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[TokenExchangeProfileResponseContent, ListTokenExchangeProfileResponseContent]:
+ """
+ Retrieve a list of all Token Exchange Profiles available in your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ This endpoint supports Checkpoint pagination. To search by checkpoint, use the following parameters:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[TokenExchangeProfileResponseContent, ListTokenExchangeProfileResponseContent]
+ Token Exchange Profile successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.token_exchange_profiles.list(
+ from_="from",
+ take=1,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(from_=from_, take=take, request_options=request_options)
+
+ def create(
+ self,
+ *,
+ name: str = "Token Exchange Profile 1",
+ subject_token_type: str,
+ action_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateTokenExchangeProfileResponseContent:
+ """
+ Create a new Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ name : str
+ Friendly name of this profile.
+
+ subject_token_type : str
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+
+ action_id : str
+ The ID of the Custom Token Exchange action to execute for this profile, in order to validate the subject_token. The action must use the custom-token-exchange trigger.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateTokenExchangeProfileResponseContent
+ Token exchange profile successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.token_exchange_profiles.create(
+ name="name",
+ subject_token_type="subject_token_type",
+ action_id="action_id",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name, subject_token_type=subject_token_type, action_id=action_id, request_options=request_options
+ )
+ return _response.data
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetTokenExchangeProfileResponseContent:
+ """
+ Retrieve details about a single Token Exchange Profile specified by ID.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetTokenExchangeProfileResponseContent
+ Token Exchange Profile successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.token_exchange_profiles.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta's Master Subscription Agreement. It is your responsibility to securely validate the user's subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.token_exchange_profiles.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = "Token Exchange Profile 1",
+ subject_token_type: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Update a Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta's Master Subscription Agreement. It is your responsibility to securely validate the user's subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to update.
+
+ name : typing.Optional[str]
+ Friendly name of this profile.
+
+ subject_token_type : typing.Optional[str]
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.token_exchange_profiles.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id, name=name, subject_token_type=subject_token_type, request_options=request_options
+ )
+ return _response.data
+
+
+class AsyncTokenExchangeProfilesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawTokenExchangeProfilesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawTokenExchangeProfilesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawTokenExchangeProfilesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[TokenExchangeProfileResponseContent, ListTokenExchangeProfileResponseContent]:
+ """
+ Retrieve a list of all Token Exchange Profiles available in your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ This endpoint supports Checkpoint pagination. To search by checkpoint, use the following parameters:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[TokenExchangeProfileResponseContent, ListTokenExchangeProfileResponseContent]
+ Token Exchange Profile successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.token_exchange_profiles.list(
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(from_=from_, take=take, request_options=request_options)
+
+ async def create(
+ self,
+ *,
+ name: str = "Token Exchange Profile 1",
+ subject_token_type: str,
+ action_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateTokenExchangeProfileResponseContent:
+ """
+ Create a new Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ name : str
+ Friendly name of this profile.
+
+ subject_token_type : str
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+
+ action_id : str
+ The ID of the Custom Token Exchange action to execute for this profile, in order to validate the subject_token. The action must use the custom-token-exchange trigger.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateTokenExchangeProfileResponseContent
+ Token exchange profile successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.token_exchange_profiles.create(
+ name="name",
+ subject_token_type="subject_token_type",
+ action_id="action_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name, subject_token_type=subject_token_type, action_id=action_id, request_options=request_options
+ )
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetTokenExchangeProfileResponseContent:
+ """
+ Retrieve details about a single Token Exchange Profile specified by ID.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetTokenExchangeProfileResponseContent
+ Token Exchange Profile successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.token_exchange_profiles.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta's Master Subscription Agreement. It is your responsibility to securely validate the user's subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.token_exchange_profiles.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = "Token Exchange Profile 1",
+ subject_token_type: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Update a Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta's Master Subscription Agreement. It is your responsibility to securely validate the user's subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to update.
+
+ name : typing.Optional[str]
+ Friendly name of this profile.
+
+ subject_token_type : typing.Optional[str]
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.token_exchange_profiles.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id, name=name, subject_token_type=subject_token_type, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/token_exchange_profiles/raw_client.py b/src/auth0/management/token_exchange_profiles/raw_client.py
new file mode 100644
index 00000000..cda9c8d1
--- /dev/null
+++ b/src/auth0/management/token_exchange_profiles/raw_client.py
@@ -0,0 +1,1032 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.create_token_exchange_profile_response_content import CreateTokenExchangeProfileResponseContent
+from ..types.get_token_exchange_profile_response_content import GetTokenExchangeProfileResponseContent
+from ..types.list_token_exchange_profile_response_content import ListTokenExchangeProfileResponseContent
+from ..types.token_exchange_profile_response_content import TokenExchangeProfileResponseContent
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawTokenExchangeProfilesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[TokenExchangeProfileResponseContent, ListTokenExchangeProfileResponseContent]:
+ """
+ Retrieve a list of all Token Exchange Profiles available in your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ This endpoint supports Checkpoint pagination. To search by checkpoint, use the following parameters:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[TokenExchangeProfileResponseContent, ListTokenExchangeProfileResponseContent]
+ Token Exchange Profile successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "token-exchange-profiles",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListTokenExchangeProfileResponseContent,
+ parse_obj_as(
+ type_=ListTokenExchangeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.token_exchange_profiles
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: str = "Token Exchange Profile 1",
+ subject_token_type: str,
+ action_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateTokenExchangeProfileResponseContent]:
+ """
+ Create a new Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ name : str
+ Friendly name of this profile.
+
+ subject_token_type : str
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+
+ action_id : str
+ The ID of the Custom Token Exchange action to execute for this profile, in order to validate the subject_token. The action must use the custom-token-exchange trigger.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateTokenExchangeProfileResponseContent]
+ Token exchange profile successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "token-exchange-profiles",
+ method="POST",
+ json={
+ "name": name,
+ "subject_token_type": subject_token_type,
+ "action_id": action_id,
+ "type": "custom_authentication",
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateTokenExchangeProfileResponseContent,
+ parse_obj_as(
+ type_=CreateTokenExchangeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetTokenExchangeProfileResponseContent]:
+ """
+ Retrieve details about a single Token Exchange Profile specified by ID.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetTokenExchangeProfileResponseContent]
+ Token Exchange Profile successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"token-exchange-profiles/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetTokenExchangeProfileResponseContent,
+ parse_obj_as(
+ type_=GetTokenExchangeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta's Master Subscription Agreement. It is your responsibility to securely validate the user's subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"token-exchange-profiles/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = "Token Exchange Profile 1",
+ subject_token_type: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Update a Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta's Master Subscription Agreement. It is your responsibility to securely validate the user's subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to update.
+
+ name : typing.Optional[str]
+ Friendly name of this profile.
+
+ subject_token_type : typing.Optional[str]
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"token-exchange-profiles/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "subject_token_type": subject_token_type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawTokenExchangeProfilesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[TokenExchangeProfileResponseContent, ListTokenExchangeProfileResponseContent]:
+ """
+ Retrieve a list of all Token Exchange Profiles available in your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ This endpoint supports Checkpoint pagination. To search by checkpoint, use the following parameters:
+ from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[TokenExchangeProfileResponseContent, ListTokenExchangeProfileResponseContent]
+ Token Exchange Profile successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "token-exchange-profiles",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListTokenExchangeProfileResponseContent,
+ parse_obj_as(
+ type_=ListTokenExchangeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.token_exchange_profiles
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: str = "Token Exchange Profile 1",
+ subject_token_type: str,
+ action_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateTokenExchangeProfileResponseContent]:
+ """
+ Create a new Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ name : str
+ Friendly name of this profile.
+
+ subject_token_type : str
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+
+ action_id : str
+ The ID of the Custom Token Exchange action to execute for this profile, in order to validate the subject_token. The action must use the custom-token-exchange trigger.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateTokenExchangeProfileResponseContent]
+ Token exchange profile successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "token-exchange-profiles",
+ method="POST",
+ json={
+ "name": name,
+ "subject_token_type": subject_token_type,
+ "action_id": action_id,
+ "type": "custom_authentication",
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateTokenExchangeProfileResponseContent,
+ parse_obj_as(
+ type_=CreateTokenExchangeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetTokenExchangeProfileResponseContent]:
+ """
+ Retrieve details about a single Token Exchange Profile specified by ID.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta’s Master Subscription Agreement. It is your responsibility to securely validate the user’s subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetTokenExchangeProfileResponseContent]
+ Token Exchange Profile successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"token-exchange-profiles/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetTokenExchangeProfileResponseContent,
+ parse_obj_as(
+ type_=GetTokenExchangeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta's Master Subscription Agreement. It is your responsibility to securely validate the user's subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"token-exchange-profiles/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = "Token Exchange Profile 1",
+ subject_token_type: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Update a Token Exchange Profile within your tenant.
+
+ By using this feature, you agree to the applicable Free Trial terms in Okta's Master Subscription Agreement. It is your responsibility to securely validate the user's subject_token. See User Guide for more details.
+
+ Parameters
+ ----------
+ id : str
+ ID of the Token Exchange Profile to update.
+
+ name : typing.Optional[str]
+ Friendly name of this profile.
+
+ subject_token_type : typing.Optional[str]
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"token-exchange-profiles/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "subject_token_type": subject_token_type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/token_provider.py b/src/auth0/management/token_provider.py
new file mode 100644
index 00000000..55c8c497
--- /dev/null
+++ b/src/auth0/management/token_provider.py
@@ -0,0 +1,142 @@
+import asyncio
+import threading
+import time
+from typing import Optional
+
+import httpx
+
+LEEWAY_SECONDS = 10
+
+
+class TokenProvider:
+ """
+ Sync token provider with caching and automatic refresh.
+
+ Fetches tokens via OAuth 2.0 client credentials grant and caches them
+ until they expire (with a 10-second leeway for safety).
+
+ Thread-safe: uses a lock to prevent concurrent token fetches.
+ """
+
+ def __init__(
+ self,
+ *,
+ domain: str,
+ client_id: str,
+ client_secret: str,
+ audience: Optional[str] = None,
+ ):
+ self._domain = domain
+ self._client_id = client_id
+ self._client_secret = client_secret
+ self._audience = audience or f"https://{domain}/api/v2/"
+
+ self._access_token: Optional[str] = None
+ self._expires_at: float = 0
+ self._lock = threading.Lock()
+
+ def get_token(self) -> str:
+ """
+ Get a valid access token, fetching a new one if expired.
+
+ Returns
+ -------
+ str
+ A valid access token.
+ """
+ # Fast path: return cached token if still valid
+ if self._access_token and time.time() < (self._expires_at - LEEWAY_SECONDS):
+ return self._access_token
+
+ with self._lock:
+ # Double-check after acquiring lock
+ if self._access_token and time.time() < (self._expires_at - LEEWAY_SECONDS):
+ return self._access_token
+ self._fetch_token()
+
+ return self._access_token # type: ignore[return-value]
+
+ def _fetch_token(self) -> None:
+ """Fetch a new token via client credentials grant."""
+ url = f"https://{self._domain}/oauth/token"
+ payload = {
+ "grant_type": "client_credentials",
+ "client_id": self._client_id,
+ "client_secret": self._client_secret,
+ "audience": self._audience,
+ }
+
+ with httpx.Client() as client:
+ response = client.post(url, data=payload)
+ response.raise_for_status()
+ data = response.json()
+
+ self._access_token = data["access_token"]
+ self._expires_at = time.time() + data["expires_in"]
+
+
+class AsyncTokenProvider:
+ """
+ Async token provider with caching and automatic refresh.
+
+ Fetches tokens via OAuth 2.0 client credentials grant and caches them
+ until they expire (with a 10-second leeway for safety).
+
+ Coroutine-safe: uses an async lock to prevent concurrent token fetches.
+ """
+
+ def __init__(
+ self,
+ *,
+ domain: str,
+ client_id: str,
+ client_secret: str,
+ audience: Optional[str] = None,
+ ):
+ self._domain = domain
+ self._client_id = client_id
+ self._client_secret = client_secret
+ self._audience = audience or f"https://{domain}/api/v2/"
+
+ self._access_token: Optional[str] = None
+ self._expires_at: float = 0
+ self._lock = asyncio.Lock()
+
+ async def get_token(self) -> str:
+ """
+ Get a valid access token, fetching a new one if expired.
+
+ Returns
+ -------
+ str
+ A valid access token.
+ """
+ # Fast path: return cached token if still valid
+ if self._access_token and time.time() < (self._expires_at - LEEWAY_SECONDS):
+ return self._access_token
+
+ async with self._lock:
+ # Double-check after acquiring lock
+ if self._access_token and time.time() < (self._expires_at - LEEWAY_SECONDS):
+ return self._access_token
+ await self._fetch_token()
+
+ return self._access_token # type: ignore[return-value]
+
+ async def _fetch_token(self) -> None:
+ """Fetch a new token via client credentials grant."""
+ url = f"https://{self._domain}/oauth/token"
+ payload = {
+ "grant_type": "client_credentials",
+ "client_id": self._client_id,
+ "client_secret": self._client_secret,
+ "audience": self._audience,
+ }
+
+ async with httpx.AsyncClient() as client:
+ response = await client.post(url, data=payload)
+ response.raise_for_status()
+ data = response.json()
+
+ self._access_token = data["access_token"]
+ self._expires_at = time.time() + data["expires_in"]
diff --git a/src/auth0/management/types/__init__.py b/src/auth0/management/types/__init__.py
new file mode 100644
index 00000000..e51f6e4b
--- /dev/null
+++ b/src/auth0/management/types/__init__.py
@@ -0,0 +1,5458 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from .action import Action
+ from .action_base import ActionBase
+ from .action_binding import ActionBinding
+ from .action_binding_ref import ActionBindingRef
+ from .action_binding_ref_type_enum import ActionBindingRefTypeEnum
+ from .action_binding_type_enum import ActionBindingTypeEnum
+ from .action_binding_with_ref import ActionBindingWithRef
+ from .action_build_status_enum import ActionBuildStatusEnum
+ from .action_deployed_version import ActionDeployedVersion
+ from .action_error import ActionError
+ from .action_execution_result import ActionExecutionResult
+ from .action_execution_status_enum import ActionExecutionStatusEnum
+ from .action_secret_request import ActionSecretRequest
+ from .action_secret_response import ActionSecretResponse
+ from .action_trigger import ActionTrigger
+ from .action_trigger_compatible_trigger import ActionTriggerCompatibleTrigger
+ from .action_trigger_type_enum import ActionTriggerTypeEnum
+ from .action_version import ActionVersion
+ from .action_version_build_status_enum import ActionVersionBuildStatusEnum
+ from .action_version_dependency import ActionVersionDependency
+ from .acul_client_filter import AculClientFilter
+ from .acul_client_filter_by_id import AculClientFilterById
+ from .acul_client_filter_by_metadata import AculClientFilterByMetadata
+ from .acul_client_metadata import AculClientMetadata
+ from .acul_configs import AculConfigs
+ from .acul_configs_item import AculConfigsItem
+ from .acul_context_configuration import AculContextConfiguration
+ from .acul_context_configuration_item import AculContextConfigurationItem
+ from .acul_context_enum import AculContextEnum
+ from .acul_default_head_tags_disabled import AculDefaultHeadTagsDisabled
+ from .acul_domain_filter import AculDomainFilter
+ from .acul_domain_filter_by_id import AculDomainFilterById
+ from .acul_domain_filter_by_metadata import AculDomainFilterByMetadata
+ from .acul_domain_metadata import AculDomainMetadata
+ from .acul_filters import AculFilters
+ from .acul_head_tag import AculHeadTag
+ from .acul_head_tag_attributes import AculHeadTagAttributes
+ from .acul_head_tag_content import AculHeadTagContent
+ from .acul_head_tags import AculHeadTags
+ from .acul_match_type_enum import AculMatchTypeEnum
+ from .acul_organization_filter import AculOrganizationFilter
+ from .acul_organization_filter_by_id import AculOrganizationFilterById
+ from .acul_organization_filter_by_metadata import AculOrganizationFilterByMetadata
+ from .acul_organization_metadata import AculOrganizationMetadata
+ from .acul_rendering_mode_enum import AculRenderingModeEnum
+ from .acul_response_content import AculResponseContent
+ from .acul_use_page_template import AculUsePageTemplate
+ from .add_organization_connection_response_content import AddOrganizationConnectionResponseContent
+ from .anomaly_ip_format import AnomalyIpFormat
+ from .app_metadata import AppMetadata
+ from .assessors_type_enum import AssessorsTypeEnum
+ from .associate_organization_client_grant_response_content import AssociateOrganizationClientGrantResponseContent
+ from .async_approval_notifications_channels_enum import AsyncApprovalNotificationsChannelsEnum
+ from .attack_protection_captcha_arkose_response_content import AttackProtectionCaptchaArkoseResponseContent
+ from .attack_protection_captcha_auth_challenge_request import AttackProtectionCaptchaAuthChallengeRequest
+ from .attack_protection_captcha_auth_challenge_response_content import (
+ AttackProtectionCaptchaAuthChallengeResponseContent,
+ )
+ from .attack_protection_captcha_friendly_captcha_response_content import (
+ AttackProtectionCaptchaFriendlyCaptchaResponseContent,
+ )
+ from .attack_protection_captcha_hcaptcha_response_content import AttackProtectionCaptchaHcaptchaResponseContent
+ from .attack_protection_captcha_provider_id import AttackProtectionCaptchaProviderId
+ from .attack_protection_captcha_recaptcha_enterprise_response_content import (
+ AttackProtectionCaptchaRecaptchaEnterpriseResponseContent,
+ )
+ from .attack_protection_captcha_recaptcha_v_2_response_content import (
+ AttackProtectionCaptchaRecaptchaV2ResponseContent,
+ )
+ from .attack_protection_captcha_simple_captcha_response_content import (
+ AttackProtectionCaptchaSimpleCaptchaResponseContent,
+ )
+ from .attack_protection_update_captcha_arkose import AttackProtectionUpdateCaptchaArkose
+ from .attack_protection_update_captcha_friendly_captcha import AttackProtectionUpdateCaptchaFriendlyCaptcha
+ from .attack_protection_update_captcha_hcaptcha import AttackProtectionUpdateCaptchaHcaptcha
+ from .attack_protection_update_captcha_recaptcha_enterprise import AttackProtectionUpdateCaptchaRecaptchaEnterprise
+ from .attack_protection_update_captcha_recaptcha_v_2 import AttackProtectionUpdateCaptchaRecaptchaV2
+ from .authentication_method_type_enum import AuthenticationMethodTypeEnum
+ from .authentication_type_enum import AuthenticationTypeEnum
+ from .bot_detection_allowlist import BotDetectionAllowlist
+ from .bot_detection_challenge_policy_password_flow_enum import BotDetectionChallengePolicyPasswordFlowEnum
+ from .bot_detection_challenge_policy_password_reset_flow_enum import (
+ BotDetectionChallengePolicyPasswordResetFlowEnum,
+ )
+ from .bot_detection_challenge_policy_passwordless_flow_enum import BotDetectionChallengePolicyPasswordlessFlowEnum
+ from .bot_detection_cidr_block import BotDetectionCidrBlock
+ from .bot_detection_i_pv_4 import BotDetectionIPv4
+ from .bot_detection_i_pv_6 import BotDetectionIPv6
+ from .bot_detection_i_pv_6_cidr_block import BotDetectionIPv6CidrBlock
+ from .bot_detection_ip_address_or_cidr_block import BotDetectionIpAddressOrCidrBlock
+ from .bot_detection_level_enum import BotDetectionLevelEnum
+ from .bot_detection_monitoring_mode_enabled import BotDetectionMonitoringModeEnabled
+ from .branding_colors import BrandingColors
+ from .branding_font import BrandingFont
+ from .branding_page_background import BrandingPageBackground
+ from .branding_theme_borders import BrandingThemeBorders
+ from .branding_theme_borders_buttons_style_enum import BrandingThemeBordersButtonsStyleEnum
+ from .branding_theme_borders_inputs_style_enum import BrandingThemeBordersInputsStyleEnum
+ from .branding_theme_colors import BrandingThemeColors
+ from .branding_theme_colors_captcha_widget_theme_enum import BrandingThemeColorsCaptchaWidgetThemeEnum
+ from .branding_theme_font_body_text import BrandingThemeFontBodyText
+ from .branding_theme_font_buttons_text import BrandingThemeFontButtonsText
+ from .branding_theme_font_input_labels import BrandingThemeFontInputLabels
+ from .branding_theme_font_links import BrandingThemeFontLinks
+ from .branding_theme_font_links_style_enum import BrandingThemeFontLinksStyleEnum
+ from .branding_theme_font_subtitle import BrandingThemeFontSubtitle
+ from .branding_theme_font_title import BrandingThemeFontTitle
+ from .branding_theme_fonts import BrandingThemeFonts
+ from .branding_theme_page_background import BrandingThemePageBackground
+ from .branding_theme_page_background_page_layout_enum import BrandingThemePageBackgroundPageLayoutEnum
+ from .branding_theme_widget import BrandingThemeWidget
+ from .branding_theme_widget_header_text_alignment_enum import BrandingThemeWidgetHeaderTextAlignmentEnum
+ from .branding_theme_widget_logo_position_enum import BrandingThemeWidgetLogoPositionEnum
+ from .branding_theme_widget_social_buttons_layout_enum import BrandingThemeWidgetSocialButtonsLayoutEnum
+ from .breached_password_detection_admin_notification_frequency_enum import (
+ BreachedPasswordDetectionAdminNotificationFrequencyEnum,
+ )
+ from .breached_password_detection_method_enum import BreachedPasswordDetectionMethodEnum
+ from .breached_password_detection_pre_change_password_shields_enum import (
+ BreachedPasswordDetectionPreChangePasswordShieldsEnum,
+ )
+ from .breached_password_detection_pre_change_password_stage import BreachedPasswordDetectionPreChangePasswordStage
+ from .breached_password_detection_pre_user_registration_shields_enum import (
+ BreachedPasswordDetectionPreUserRegistrationShieldsEnum,
+ )
+ from .breached_password_detection_pre_user_registration_stage import (
+ BreachedPasswordDetectionPreUserRegistrationStage,
+ )
+ from .breached_password_detection_shields_enum import BreachedPasswordDetectionShieldsEnum
+ from .breached_password_detection_stage import BreachedPasswordDetectionStage
+ from .bulk_update_acul_response_content import BulkUpdateAculResponseContent
+ from .change_password_ticket_identity import ChangePasswordTicketIdentity
+ from .change_password_ticket_response_content import ChangePasswordTicketResponseContent
+ from .client import Client
+ from .client_addon_aws import ClientAddonAws
+ from .client_addon_azure_blob import ClientAddonAzureBlob
+ from .client_addon_azure_sb import ClientAddonAzureSb
+ from .client_addon_box import ClientAddonBox
+ from .client_addon_cloud_bees import ClientAddonCloudBees
+ from .client_addon_concur import ClientAddonConcur
+ from .client_addon_dropbox import ClientAddonDropbox
+ from .client_addon_echo_sign import ClientAddonEchoSign
+ from .client_addon_egnyte import ClientAddonEgnyte
+ from .client_addon_firebase import ClientAddonFirebase
+ from .client_addon_layer import ClientAddonLayer
+ from .client_addon_mscrm import ClientAddonMscrm
+ from .client_addon_new_relic import ClientAddonNewRelic
+ from .client_addon_oag import ClientAddonOag
+ from .client_addon_office_365 import ClientAddonOffice365
+ from .client_addon_rms import ClientAddonRms
+ from .client_addon_salesforce import ClientAddonSalesforce
+ from .client_addon_salesforce_api import ClientAddonSalesforceApi
+ from .client_addon_salesforce_sandbox_api import ClientAddonSalesforceSandboxApi
+ from .client_addon_saml import ClientAddonSaml
+ from .client_addon_saml_mapping import ClientAddonSamlMapping
+ from .client_addon_sapapi import ClientAddonSapapi
+ from .client_addon_sentry import ClientAddonSentry
+ from .client_addon_share_point import ClientAddonSharePoint
+ from .client_addon_share_point_external_url import ClientAddonSharePointExternalUrl
+ from .client_addon_slack import ClientAddonSlack
+ from .client_addon_spring_cm import ClientAddonSpringCm
+ from .client_addon_sso_integration import ClientAddonSsoIntegration
+ from .client_addon_wams import ClientAddonWams
+ from .client_addon_ws_fed import ClientAddonWsFed
+ from .client_addon_zendesk import ClientAddonZendesk
+ from .client_addon_zoom import ClientAddonZoom
+ from .client_addons import ClientAddons
+ from .client_app_type_enum import ClientAppTypeEnum
+ from .client_async_approval_notifications_channels_api_patch_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration,
+ )
+ from .client_async_approval_notifications_channels_api_post_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration,
+ )
+ from .client_authentication_method import ClientAuthenticationMethod
+ from .client_authentication_method_self_signed_tls_client_auth import (
+ ClientAuthenticationMethodSelfSignedTlsClientAuth,
+ )
+ from .client_authentication_method_tls_client_auth import ClientAuthenticationMethodTlsClientAuth
+ from .client_compliance_level_enum import ClientComplianceLevelEnum
+ from .client_create_authentication_method import ClientCreateAuthenticationMethod
+ from .client_credential import ClientCredential
+ from .client_credential_algorithm_enum import ClientCredentialAlgorithmEnum
+ from .client_credential_type_enum import ClientCredentialTypeEnum
+ from .client_default_organization import ClientDefaultOrganization
+ from .client_default_organization_flows_enum import ClientDefaultOrganizationFlowsEnum
+ from .client_encryption_key import ClientEncryptionKey
+ from .client_grant_allow_any_organization_enum import ClientGrantAllowAnyOrganizationEnum
+ from .client_grant_organization_nullable_usage_enum import ClientGrantOrganizationNullableUsageEnum
+ from .client_grant_organization_usage_enum import ClientGrantOrganizationUsageEnum
+ from .client_grant_response_content import ClientGrantResponseContent
+ from .client_grant_subject_type_enum import ClientGrantSubjectTypeEnum
+ from .client_jwt_configuration import ClientJwtConfiguration
+ from .client_jwt_configuration_scopes import ClientJwtConfigurationScopes
+ from .client_metadata import ClientMetadata
+ from .client_mobile import ClientMobile
+ from .client_mobile_android import ClientMobileAndroid
+ from .client_mobilei_os import ClientMobileiOs
+ from .client_oidc_backchannel_logout_initiators import ClientOidcBackchannelLogoutInitiators
+ from .client_oidc_backchannel_logout_initiators_enum import ClientOidcBackchannelLogoutInitiatorsEnum
+ from .client_oidc_backchannel_logout_initiators_mode_enum import ClientOidcBackchannelLogoutInitiatorsModeEnum
+ from .client_oidc_backchannel_logout_session_metadata import ClientOidcBackchannelLogoutSessionMetadata
+ from .client_oidc_backchannel_logout_settings import ClientOidcBackchannelLogoutSettings
+ from .client_organization_discovery_enum import ClientOrganizationDiscoveryEnum
+ from .client_organization_require_behavior_enum import ClientOrganizationRequireBehaviorEnum
+ from .client_organization_require_behavior_patch_enum import ClientOrganizationRequireBehaviorPatchEnum
+ from .client_organization_usage_enum import ClientOrganizationUsageEnum
+ from .client_organization_usage_patch_enum import ClientOrganizationUsagePatchEnum
+ from .client_refresh_token_configuration import ClientRefreshTokenConfiguration
+ from .client_session_transfer_allowed_authentication_methods_enum import (
+ ClientSessionTransferAllowedAuthenticationMethodsEnum,
+ )
+ from .client_session_transfer_configuration import ClientSessionTransferConfiguration
+ from .client_session_transfer_device_binding_enum import ClientSessionTransferDeviceBindingEnum
+ from .client_signed_request_object_with_credential_id import ClientSignedRequestObjectWithCredentialId
+ from .client_signed_request_object_with_public_key import ClientSignedRequestObjectWithPublicKey
+ from .client_signing_key import ClientSigningKey
+ from .client_signing_keys import ClientSigningKeys
+ from .client_token_endpoint_auth_method_enum import ClientTokenEndpointAuthMethodEnum
+ from .client_token_endpoint_auth_method_or_null_enum import ClientTokenEndpointAuthMethodOrNullEnum
+ from .client_token_exchange_configuration import ClientTokenExchangeConfiguration
+ from .client_token_exchange_configuration_or_null import ClientTokenExchangeConfigurationOrNull
+ from .client_token_exchange_type_enum import ClientTokenExchangeTypeEnum
+ from .connected_account import ConnectedAccount
+ from .connected_account_access_type_enum import ConnectedAccountAccessTypeEnum
+ from .connection_acr_values_supported import ConnectionAcrValuesSupported
+ from .connection_allowed_audiences_google_o_auth_2 import ConnectionAllowedAudiencesGoogleOAuth2
+ from .connection_app_domain_azure_ad import ConnectionAppDomainAzureAd
+ from .connection_attribute_identifier import ConnectionAttributeIdentifier
+ from .connection_attribute_map_attributes import ConnectionAttributeMapAttributes
+ from .connection_attribute_map_oidc import ConnectionAttributeMapOidc
+ from .connection_attribute_map_okta import ConnectionAttributeMapOkta
+ from .connection_attribute_map_userinfo_scope import ConnectionAttributeMapUserinfoScope
+ from .connection_attributes import ConnectionAttributes
+ from .connection_auth_params_additional_properties_o_auth_2 import ConnectionAuthParamsAdditionalPropertiesOAuth2
+ from .connection_auth_params_map import ConnectionAuthParamsMap
+ from .connection_auth_params_o_auth_2 import ConnectionAuthParamsOAuth2
+ from .connection_authentication_methods import ConnectionAuthenticationMethods
+ from .connection_authentication_purpose import ConnectionAuthenticationPurpose
+ from .connection_authorization_endpoint import ConnectionAuthorizationEndpoint
+ from .connection_authorization_endpoint_o_auth_2 import ConnectionAuthorizationEndpointOAuth2
+ from .connection_brute_force_protection import ConnectionBruteForceProtection
+ from .connection_claim_types_supported import ConnectionClaimTypesSupported
+ from .connection_claims_locales_supported import ConnectionClaimsLocalesSupported
+ from .connection_claims_parameter_supported import ConnectionClaimsParameterSupported
+ from .connection_claims_supported import ConnectionClaimsSupported
+ from .connection_client_id import ConnectionClientId
+ from .connection_client_id_azure_ad import ConnectionClientIdAzureAd
+ from .connection_client_id_google_o_auth_2 import ConnectionClientIdGoogleOAuth2
+ from .connection_client_id_o_auth_2 import ConnectionClientIdOAuth2
+ from .connection_client_id_oidc import ConnectionClientIdOidc
+ from .connection_client_secret import ConnectionClientSecret
+ from .connection_client_secret_azure_ad import ConnectionClientSecretAzureAd
+ from .connection_client_secret_google_o_auth_2 import ConnectionClientSecretGoogleOAuth2
+ from .connection_client_secret_o_auth_2 import ConnectionClientSecretOAuth2
+ from .connection_client_secret_oidc import ConnectionClientSecretOidc
+ from .connection_common import ConnectionCommon
+ from .connection_configuration import ConnectionConfiguration
+ from .connection_connected_accounts_purpose import ConnectionConnectedAccountsPurpose
+ from .connection_connection_settings import ConnectionConnectionSettings
+ from .connection_connection_settings_pkce_enum import ConnectionConnectionSettingsPkceEnum
+ from .connection_custom_headers_o_auth_2 import ConnectionCustomHeadersOAuth2
+ from .connection_custom_scripts import ConnectionCustomScripts
+ from .connection_disable_self_service_change_password import ConnectionDisableSelfServiceChangePassword
+ from .connection_disable_signup import ConnectionDisableSignup
+ from .connection_discovery_url import ConnectionDiscoveryUrl
+ from .connection_display_name import ConnectionDisplayName
+ from .connection_display_values_supported import ConnectionDisplayValuesSupported
+ from .connection_domain_aliases_azure_ad import ConnectionDomainAliasesAzureAd
+ from .connection_domain_aliases_one import ConnectionDomainAliasesOne
+ from .connection_domain_okta import ConnectionDomainOkta
+ from .connection_enable_script_context import ConnectionEnableScriptContext
+ from .connection_enabled_client import ConnectionEnabledClient
+ from .connection_enabled_clients import ConnectionEnabledClients
+ from .connection_enabled_database_customization import ConnectionEnabledDatabaseCustomization
+ from .connection_end_session_endpoint import ConnectionEndSessionEndpoint
+ from .connection_end_session_endpoint_o_auth_2 import ConnectionEndSessionEndpointOAuth2
+ from .connection_ext_admin import ConnectionExtAdmin
+ from .connection_ext_agreed_terms import ConnectionExtAgreedTerms
+ from .connection_ext_assigned_plans import ConnectionExtAssignedPlans
+ from .connection_ext_groups import ConnectionExtGroups
+ from .connection_ext_is_suspended import ConnectionExtIsSuspended
+ from .connection_ext_profile import ConnectionExtProfile
+ from .connection_federated_connections_access_tokens import ConnectionFederatedConnectionsAccessTokens
+ from .connection_fields_map import ConnectionFieldsMap
+ from .connection_for_list import ConnectionForList
+ from .connection_for_organization import ConnectionForOrganization
+ from .connection_freeform_scopes_google_o_auth_2 import ConnectionFreeformScopesGoogleOAuth2
+ from .connection_gateway_authentication import ConnectionGatewayAuthentication
+ from .connection_grant_types_supported import ConnectionGrantTypesSupported
+ from .connection_https_url_with_http_fallback import ConnectionHttpsUrlWithHttpFallback
+ from .connection_icon_url import ConnectionIconUrl
+ from .connection_icon_url_azure_ad import ConnectionIconUrlAzureAd
+ from .connection_icon_url_google_o_auth_2 import ConnectionIconUrlGoogleOAuth2
+ from .connection_id import ConnectionId
+ from .connection_id_token_encryption_alg_values_supported import ConnectionIdTokenEncryptionAlgValuesSupported
+ from .connection_id_token_encryption_enc_values_supported import ConnectionIdTokenEncryptionEncValuesSupported
+ from .connection_id_token_signed_response_alg_enum import ConnectionIdTokenSignedResponseAlgEnum
+ from .connection_id_token_signed_response_algs import ConnectionIdTokenSignedResponseAlgs
+ from .connection_id_token_signing_alg_values_supported import ConnectionIdTokenSigningAlgValuesSupported
+ from .connection_identifier_precedence import ConnectionIdentifierPrecedence
+ from .connection_identifier_precedence_enum import ConnectionIdentifierPrecedenceEnum
+ from .connection_identity_api_azure_ad import ConnectionIdentityApiAzureAd
+ from .connection_identity_api_enum_azure_ad import ConnectionIdentityApiEnumAzureAd
+ from .connection_identity_provider_enum import ConnectionIdentityProviderEnum
+ from .connection_import_mode import ConnectionImportMode
+ from .connection_is_domain_connection import ConnectionIsDomainConnection
+ from .connection_issuer import ConnectionIssuer
+ from .connection_jwks_uri import ConnectionJwksUri
+ from .connection_key import ConnectionKey
+ from .connection_key_use_enum import ConnectionKeyUseEnum
+ from .connection_mapping_mode_enum_oidc import ConnectionMappingModeEnumOidc
+ from .connection_mapping_mode_enum_okta import ConnectionMappingModeEnumOkta
+ from .connection_max_groups_to_retrieve import ConnectionMaxGroupsToRetrieve
+ from .connection_mfa import ConnectionMfa
+ from .connection_name import ConnectionName
+ from .connection_name_prefix_template import ConnectionNamePrefixTemplate
+ from .connection_non_persistent_attrs import ConnectionNonPersistentAttrs
+ from .connection_op_policy_uri import ConnectionOpPolicyUri
+ from .connection_op_tos_uri import ConnectionOpTosUri
+ from .connection_options import ConnectionOptions
+ from .connection_options_ad import ConnectionOptionsAd
+ from .connection_options_adfs import ConnectionOptionsAdfs
+ from .connection_options_amazon import ConnectionOptionsAmazon
+ from .connection_options_aol import ConnectionOptionsAol
+ from .connection_options_apple import ConnectionOptionsApple
+ from .connection_options_auth_0 import ConnectionOptionsAuth0
+ from .connection_options_auth_0_oidc import ConnectionOptionsAuth0Oidc
+ from .connection_options_azure_ad import ConnectionOptionsAzureAd
+ from .connection_options_baidu import ConnectionOptionsBaidu
+ from .connection_options_bitbucket import ConnectionOptionsBitbucket
+ from .connection_options_bitly import ConnectionOptionsBitly
+ from .connection_options_box import ConnectionOptionsBox
+ from .connection_options_common import ConnectionOptionsCommon
+ from .connection_options_common_oidc import ConnectionOptionsCommonOidc
+ from .connection_options_custom import ConnectionOptionsCustom
+ from .connection_options_daccount import ConnectionOptionsDaccount
+ from .connection_options_dropbox import ConnectionOptionsDropbox
+ from .connection_options_dwolla import ConnectionOptionsDwolla
+ from .connection_options_email import ConnectionOptionsEmail
+ from .connection_options_evernote import ConnectionOptionsEvernote
+ from .connection_options_evernote_common import ConnectionOptionsEvernoteCommon
+ from .connection_options_evernote_sandbox import ConnectionOptionsEvernoteSandbox
+ from .connection_options_exact import ConnectionOptionsExact
+ from .connection_options_facebook import ConnectionOptionsFacebook
+ from .connection_options_fitbit import ConnectionOptionsFitbit
+ from .connection_options_flickr import ConnectionOptionsFlickr
+ from .connection_options_git_hub import ConnectionOptionsGitHub
+ from .connection_options_google_apps import ConnectionOptionsGoogleApps
+ from .connection_options_google_o_auth_2 import ConnectionOptionsGoogleOAuth2
+ from .connection_options_instagram import ConnectionOptionsInstagram
+ from .connection_options_ip import ConnectionOptionsIp
+ from .connection_options_line import ConnectionOptionsLine
+ from .connection_options_linkedin import ConnectionOptionsLinkedin
+ from .connection_options_miicard import ConnectionOptionsMiicard
+ from .connection_options_o_auth_1 import ConnectionOptionsOAuth1
+ from .connection_options_o_auth_2 import ConnectionOptionsOAuth2
+ from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+ from .connection_options_office_365 import ConnectionOptionsOffice365
+ from .connection_options_oidc import ConnectionOptionsOidc
+ from .connection_options_oidc_metadata import ConnectionOptionsOidcMetadata
+ from .connection_options_okta import ConnectionOptionsOkta
+ from .connection_options_paypal import ConnectionOptionsPaypal
+ from .connection_options_paypal_sandbox import ConnectionOptionsPaypalSandbox
+ from .connection_options_ping_federate import ConnectionOptionsPingFederate
+ from .connection_options_planning_center import ConnectionOptionsPlanningCenter
+ from .connection_options_renren import ConnectionOptionsRenren
+ from .connection_options_salesforce import ConnectionOptionsSalesforce
+ from .connection_options_salesforce_common import ConnectionOptionsSalesforceCommon
+ from .connection_options_salesforce_community import ConnectionOptionsSalesforceCommunity
+ from .connection_options_salesforce_sandbox import ConnectionOptionsSalesforceSandbox
+ from .connection_options_saml import ConnectionOptionsSaml
+ from .connection_options_sharepoint import ConnectionOptionsSharepoint
+ from .connection_options_shop import ConnectionOptionsShop
+ from .connection_options_shopify import ConnectionOptionsShopify
+ from .connection_options_sms import ConnectionOptionsSms
+ from .connection_options_soundcloud import ConnectionOptionsSoundcloud
+ from .connection_options_the_city import ConnectionOptionsTheCity
+ from .connection_options_the_city_sandbox import ConnectionOptionsTheCitySandbox
+ from .connection_options_thirty_seven_signals import ConnectionOptionsThirtySevenSignals
+ from .connection_options_twitter import ConnectionOptionsTwitter
+ from .connection_options_untappd import ConnectionOptionsUntappd
+ from .connection_options_vkontakte import ConnectionOptionsVkontakte
+ from .connection_options_weibo import ConnectionOptionsWeibo
+ from .connection_options_windows_live import ConnectionOptionsWindowsLive
+ from .connection_options_wordpress import ConnectionOptionsWordpress
+ from .connection_options_yahoo import ConnectionOptionsYahoo
+ from .connection_options_yammer import ConnectionOptionsYammer
+ from .connection_options_yandex import ConnectionOptionsYandex
+ from .connection_passkey_authentication_method import ConnectionPasskeyAuthenticationMethod
+ from .connection_passkey_challenge_ui_enum import ConnectionPasskeyChallengeUiEnum
+ from .connection_passkey_options import ConnectionPasskeyOptions
+ from .connection_password_authentication_method import ConnectionPasswordAuthenticationMethod
+ from .connection_password_complexity_options import ConnectionPasswordComplexityOptions
+ from .connection_password_dictionary_options import ConnectionPasswordDictionaryOptions
+ from .connection_password_history_options import ConnectionPasswordHistoryOptions
+ from .connection_password_no_personal_info_options import ConnectionPasswordNoPersonalInfoOptions
+ from .connection_password_policy_enum import ConnectionPasswordPolicyEnum
+ from .connection_profile import ConnectionProfile
+ from .connection_profile_config import ConnectionProfileConfig
+ from .connection_profile_enabled_features import ConnectionProfileEnabledFeatures
+ from .connection_profile_id import ConnectionProfileId
+ from .connection_profile_name import ConnectionProfileName
+ from .connection_profile_organization import ConnectionProfileOrganization
+ from .connection_profile_organization_assign_membership_on_login_enum import (
+ ConnectionProfileOrganizationAssignMembershipOnLoginEnum,
+ )
+ from .connection_profile_organization_show_as_button_enum import ConnectionProfileOrganizationShowAsButtonEnum
+ from .connection_profile_strategy_override import ConnectionProfileStrategyOverride
+ from .connection_profile_strategy_overrides import ConnectionProfileStrategyOverrides
+ from .connection_profile_strategy_overrides_connection_config import (
+ ConnectionProfileStrategyOverridesConnectionConfig,
+ )
+ from .connection_profile_strategy_overrides_enabled_features import (
+ ConnectionProfileStrategyOverridesEnabledFeatures,
+ )
+ from .connection_profile_template import ConnectionProfileTemplate
+ from .connection_profile_template_item import ConnectionProfileTemplateItem
+ from .connection_properties_options import ConnectionPropertiesOptions
+ from .connection_provisioning_ticket import ConnectionProvisioningTicket
+ from .connection_provisioning_ticket_url import ConnectionProvisioningTicketUrl
+ from .connection_realm_fallback import ConnectionRealmFallback
+ from .connection_realms import ConnectionRealms
+ from .connection_registration_endpoint import ConnectionRegistrationEndpoint
+ from .connection_request_object_encryption_alg_values_supported import (
+ ConnectionRequestObjectEncryptionAlgValuesSupported,
+ )
+ from .connection_request_object_encryption_enc_values_supported import (
+ ConnectionRequestObjectEncryptionEncValuesSupported,
+ )
+ from .connection_request_object_signing_alg_values_supported import ConnectionRequestObjectSigningAlgValuesSupported
+ from .connection_request_parameter_supported import ConnectionRequestParameterSupported
+ from .connection_request_uri_parameter_supported import ConnectionRequestUriParameterSupported
+ from .connection_require_request_uri_registration import ConnectionRequireRequestUriRegistration
+ from .connection_requires_username import ConnectionRequiresUsername
+ from .connection_response_common import ConnectionResponseCommon
+ from .connection_response_content_ad import ConnectionResponseContentAd
+ from .connection_response_content_adfs import ConnectionResponseContentAdfs
+ from .connection_response_content_amazon import ConnectionResponseContentAmazon
+ from .connection_response_content_aol import ConnectionResponseContentAol
+ from .connection_response_content_apple import ConnectionResponseContentApple
+ from .connection_response_content_auth_0 import ConnectionResponseContentAuth0
+ from .connection_response_content_auth_0_oidc import ConnectionResponseContentAuth0Oidc
+ from .connection_response_content_azure_ad import ConnectionResponseContentAzureAd
+ from .connection_response_content_baidu import ConnectionResponseContentBaidu
+ from .connection_response_content_bitbucket import ConnectionResponseContentBitbucket
+ from .connection_response_content_bitly import ConnectionResponseContentBitly
+ from .connection_response_content_box import ConnectionResponseContentBox
+ from .connection_response_content_custom import ConnectionResponseContentCustom
+ from .connection_response_content_daccount import ConnectionResponseContentDaccount
+ from .connection_response_content_dropbox import ConnectionResponseContentDropbox
+ from .connection_response_content_dwolla import ConnectionResponseContentDwolla
+ from .connection_response_content_email import ConnectionResponseContentEmail
+ from .connection_response_content_evernote import ConnectionResponseContentEvernote
+ from .connection_response_content_evernote_sandbox import ConnectionResponseContentEvernoteSandbox
+ from .connection_response_content_exact import ConnectionResponseContentExact
+ from .connection_response_content_facebook import ConnectionResponseContentFacebook
+ from .connection_response_content_fitbit import ConnectionResponseContentFitbit
+ from .connection_response_content_flickr import ConnectionResponseContentFlickr
+ from .connection_response_content_git_hub import ConnectionResponseContentGitHub
+ from .connection_response_content_google_apps import ConnectionResponseContentGoogleApps
+ from .connection_response_content_google_o_auth_2 import ConnectionResponseContentGoogleOAuth2
+ from .connection_response_content_instagram import ConnectionResponseContentInstagram
+ from .connection_response_content_ip import ConnectionResponseContentIp
+ from .connection_response_content_line import ConnectionResponseContentLine
+ from .connection_response_content_linkedin import ConnectionResponseContentLinkedin
+ from .connection_response_content_miicard import ConnectionResponseContentMiicard
+ from .connection_response_content_o_auth_1 import ConnectionResponseContentOAuth1
+ from .connection_response_content_o_auth_2 import ConnectionResponseContentOAuth2
+ from .connection_response_content_office_365 import ConnectionResponseContentOffice365
+ from .connection_response_content_oidc import ConnectionResponseContentOidc
+ from .connection_response_content_okta import ConnectionResponseContentOkta
+ from .connection_response_content_paypal import ConnectionResponseContentPaypal
+ from .connection_response_content_paypal_sandbox import ConnectionResponseContentPaypalSandbox
+ from .connection_response_content_ping_federate import ConnectionResponseContentPingFederate
+ from .connection_response_content_planning_center import ConnectionResponseContentPlanningCenter
+ from .connection_response_content_renren import ConnectionResponseContentRenren
+ from .connection_response_content_salesforce import ConnectionResponseContentSalesforce
+ from .connection_response_content_salesforce_community import ConnectionResponseContentSalesforceCommunity
+ from .connection_response_content_salesforce_sandbox import ConnectionResponseContentSalesforceSandbox
+ from .connection_response_content_saml import ConnectionResponseContentSaml
+ from .connection_response_content_sharepoint import ConnectionResponseContentSharepoint
+ from .connection_response_content_shop import ConnectionResponseContentShop
+ from .connection_response_content_shopify import ConnectionResponseContentShopify
+ from .connection_response_content_sms import ConnectionResponseContentSms
+ from .connection_response_content_soundcloud import ConnectionResponseContentSoundcloud
+ from .connection_response_content_the_city import ConnectionResponseContentTheCity
+ from .connection_response_content_the_city_sandbox import ConnectionResponseContentTheCitySandbox
+ from .connection_response_content_thirty_seven_signals import ConnectionResponseContentThirtySevenSignals
+ from .connection_response_content_twitter import ConnectionResponseContentTwitter
+ from .connection_response_content_untappd import ConnectionResponseContentUntappd
+ from .connection_response_content_vkontakte import ConnectionResponseContentVkontakte
+ from .connection_response_content_weibo import ConnectionResponseContentWeibo
+ from .connection_response_content_windows_live import ConnectionResponseContentWindowsLive
+ from .connection_response_content_wordpress import ConnectionResponseContentWordpress
+ from .connection_response_content_yahoo import ConnectionResponseContentYahoo
+ from .connection_response_content_yammer import ConnectionResponseContentYammer
+ from .connection_response_content_yandex import ConnectionResponseContentYandex
+ from .connection_response_modes_supported import ConnectionResponseModesSupported
+ from .connection_response_types_supported import ConnectionResponseTypesSupported
+ from .connection_scope_array import ConnectionScopeArray
+ from .connection_scope_azure_ad import ConnectionScopeAzureAd
+ from .connection_scope_google_o_auth_2 import ConnectionScopeGoogleOAuth2
+ from .connection_scope_item import ConnectionScopeItem
+ from .connection_scope_o_auth_2 import ConnectionScopeOAuth2
+ from .connection_scope_oidc import ConnectionScopeOidc
+ from .connection_scopes_supported import ConnectionScopesSupported
+ from .connection_scripts_o_auth_2 import ConnectionScriptsOAuth2
+ from .connection_send_back_channel_nonce import ConnectionSendBackChannelNonce
+ from .connection_service_documentation import ConnectionServiceDocumentation
+ from .connection_set_user_root_attributes_enum import ConnectionSetUserRootAttributesEnum
+ from .connection_should_trust_email_verified_connection_enum import ConnectionShouldTrustEmailVerifiedConnectionEnum
+ from .connection_show_as_button import ConnectionShowAsButton
+ from .connection_strategy_enum import ConnectionStrategyEnum
+ from .connection_strategy_version_enum_azure_ad import ConnectionStrategyVersionEnumAzureAd
+ from .connection_subject_types_supported import ConnectionSubjectTypesSupported
+ from .connection_tenant_domain import ConnectionTenantDomain
+ from .connection_tenant_domain_azure_ad_one import ConnectionTenantDomainAzureAdOne
+ from .connection_tenant_id_azure_ad import ConnectionTenantIdAzureAd
+ from .connection_thumbprints import ConnectionThumbprints
+ from .connection_token_endpoint import ConnectionTokenEndpoint
+ from .connection_token_endpoint_auth_method_enum import ConnectionTokenEndpointAuthMethodEnum
+ from .connection_token_endpoint_auth_methods_supported import ConnectionTokenEndpointAuthMethodsSupported
+ from .connection_token_endpoint_auth_signing_alg_enum import ConnectionTokenEndpointAuthSigningAlgEnum
+ from .connection_token_endpoint_auth_signing_alg_values_supported import (
+ ConnectionTokenEndpointAuthSigningAlgValuesSupported,
+ )
+ from .connection_token_endpoint_o_auth_2 import ConnectionTokenEndpointOAuth2
+ from .connection_token_endpoint_oidc import ConnectionTokenEndpointOidc
+ from .connection_type_enum_oidc import ConnectionTypeEnumOidc
+ from .connection_type_enum_okta import ConnectionTypeEnumOkta
+ from .connection_ui_locales_supported import ConnectionUiLocalesSupported
+ from .connection_upstream_additional_properties import ConnectionUpstreamAdditionalProperties
+ from .connection_upstream_alias import ConnectionUpstreamAlias
+ from .connection_upstream_alias_enum import ConnectionUpstreamAliasEnum
+ from .connection_upstream_params import ConnectionUpstreamParams
+ from .connection_upstream_params_azure_ad import ConnectionUpstreamParamsAzureAd
+ from .connection_upstream_params_oidc import ConnectionUpstreamParamsOidc
+ from .connection_upstream_value import ConnectionUpstreamValue
+ from .connection_use_common_endpoint_azure_ad import ConnectionUseCommonEndpointAzureAd
+ from .connection_userid_attribute_azure_ad import ConnectionUseridAttributeAzureAd
+ from .connection_userid_attribute_enum_azure_ad import ConnectionUseridAttributeEnumAzureAd
+ from .connection_userinfo_encryption_alg_values_supported import ConnectionUserinfoEncryptionAlgValuesSupported
+ from .connection_userinfo_encryption_enc_values_supported import ConnectionUserinfoEncryptionEncValuesSupported
+ from .connection_userinfo_endpoint import ConnectionUserinfoEndpoint
+ from .connection_userinfo_endpoint_oidc import ConnectionUserinfoEndpointOidc
+ from .connection_userinfo_signing_alg_values_supported import ConnectionUserinfoSigningAlgValuesSupported
+ from .connection_username_validation_options import ConnectionUsernameValidationOptions
+ from .connection_validation_options import ConnectionValidationOptions
+ from .connection_waad_protocol import ConnectionWaadProtocol
+ from .connection_waad_protocol_enum_azure_ad import ConnectionWaadProtocolEnumAzureAd
+ from .connections_metadata import ConnectionsMetadata
+ from .create_action_response_content import CreateActionResponseContent
+ from .create_branding_phone_provider_response_content import CreateBrandingPhoneProviderResponseContent
+ from .create_branding_theme_response_content import CreateBrandingThemeResponseContent
+ from .create_client_grant_response_content import CreateClientGrantResponseContent
+ from .create_client_response_content import CreateClientResponseContent
+ from .create_connection_common import CreateConnectionCommon
+ from .create_connection_profile_response_content import CreateConnectionProfileResponseContent
+ from .create_connection_request_content_ad import CreateConnectionRequestContentAd
+ from .create_connection_request_content_adfs import CreateConnectionRequestContentAdfs
+ from .create_connection_request_content_amazon import CreateConnectionRequestContentAmazon
+ from .create_connection_request_content_aol import CreateConnectionRequestContentAol
+ from .create_connection_request_content_apple import CreateConnectionRequestContentApple
+ from .create_connection_request_content_auth_0 import CreateConnectionRequestContentAuth0
+ from .create_connection_request_content_auth_0_oidc import CreateConnectionRequestContentAuth0Oidc
+ from .create_connection_request_content_azure_ad import CreateConnectionRequestContentAzureAd
+ from .create_connection_request_content_baidu import CreateConnectionRequestContentBaidu
+ from .create_connection_request_content_bitbucket import CreateConnectionRequestContentBitbucket
+ from .create_connection_request_content_bitly import CreateConnectionRequestContentBitly
+ from .create_connection_request_content_box import CreateConnectionRequestContentBox
+ from .create_connection_request_content_custom import CreateConnectionRequestContentCustom
+ from .create_connection_request_content_daccount import CreateConnectionRequestContentDaccount
+ from .create_connection_request_content_dropbox import CreateConnectionRequestContentDropbox
+ from .create_connection_request_content_dwolla import CreateConnectionRequestContentDwolla
+ from .create_connection_request_content_email import CreateConnectionRequestContentEmail
+ from .create_connection_request_content_evernote import CreateConnectionRequestContentEvernote
+ from .create_connection_request_content_evernote_sandbox import CreateConnectionRequestContentEvernoteSandbox
+ from .create_connection_request_content_exact import CreateConnectionRequestContentExact
+ from .create_connection_request_content_facebook import CreateConnectionRequestContentFacebook
+ from .create_connection_request_content_fitbit import CreateConnectionRequestContentFitbit
+ from .create_connection_request_content_flickr import CreateConnectionRequestContentFlickr
+ from .create_connection_request_content_git_hub import CreateConnectionRequestContentGitHub
+ from .create_connection_request_content_google_apps import CreateConnectionRequestContentGoogleApps
+ from .create_connection_request_content_google_o_auth_2 import CreateConnectionRequestContentGoogleOAuth2
+ from .create_connection_request_content_instagram import CreateConnectionRequestContentInstagram
+ from .create_connection_request_content_ip import CreateConnectionRequestContentIp
+ from .create_connection_request_content_line import CreateConnectionRequestContentLine
+ from .create_connection_request_content_linkedin import CreateConnectionRequestContentLinkedin
+ from .create_connection_request_content_miicard import CreateConnectionRequestContentMiicard
+ from .create_connection_request_content_o_auth_1 import CreateConnectionRequestContentOAuth1
+ from .create_connection_request_content_o_auth_2 import CreateConnectionRequestContentOAuth2
+ from .create_connection_request_content_office_365 import CreateConnectionRequestContentOffice365
+ from .create_connection_request_content_oidc import CreateConnectionRequestContentOidc
+ from .create_connection_request_content_okta import CreateConnectionRequestContentOkta
+ from .create_connection_request_content_paypal import CreateConnectionRequestContentPaypal
+ from .create_connection_request_content_paypal_sandbox import CreateConnectionRequestContentPaypalSandbox
+ from .create_connection_request_content_ping_federate import CreateConnectionRequestContentPingFederate
+ from .create_connection_request_content_planning_center import CreateConnectionRequestContentPlanningCenter
+ from .create_connection_request_content_renren import CreateConnectionRequestContentRenren
+ from .create_connection_request_content_salesforce import CreateConnectionRequestContentSalesforce
+ from .create_connection_request_content_salesforce_community import (
+ CreateConnectionRequestContentSalesforceCommunity,
+ )
+ from .create_connection_request_content_salesforce_sandbox import CreateConnectionRequestContentSalesforceSandbox
+ from .create_connection_request_content_saml import CreateConnectionRequestContentSaml
+ from .create_connection_request_content_sharepoint import CreateConnectionRequestContentSharepoint
+ from .create_connection_request_content_shop import CreateConnectionRequestContentShop
+ from .create_connection_request_content_shopify import CreateConnectionRequestContentShopify
+ from .create_connection_request_content_sms import CreateConnectionRequestContentSms
+ from .create_connection_request_content_soundcloud import CreateConnectionRequestContentSoundcloud
+ from .create_connection_request_content_the_city import CreateConnectionRequestContentTheCity
+ from .create_connection_request_content_the_city_sandbox import CreateConnectionRequestContentTheCitySandbox
+ from .create_connection_request_content_thirty_seven_signals import CreateConnectionRequestContentThirtySevenSignals
+ from .create_connection_request_content_twitter import CreateConnectionRequestContentTwitter
+ from .create_connection_request_content_untappd import CreateConnectionRequestContentUntappd
+ from .create_connection_request_content_vkontakte import CreateConnectionRequestContentVkontakte
+ from .create_connection_request_content_weibo import CreateConnectionRequestContentWeibo
+ from .create_connection_request_content_windows_live import CreateConnectionRequestContentWindowsLive
+ from .create_connection_request_content_wordpress import CreateConnectionRequestContentWordpress
+ from .create_connection_request_content_yahoo import CreateConnectionRequestContentYahoo
+ from .create_connection_request_content_yammer import CreateConnectionRequestContentYammer
+ from .create_connection_request_content_yandex import CreateConnectionRequestContentYandex
+ from .create_connection_response_content import CreateConnectionResponseContent
+ from .create_custom_domain_response_content import CreateCustomDomainResponseContent
+ from .create_directory_provisioning_request_content import CreateDirectoryProvisioningRequestContent
+ from .create_directory_provisioning_response_content import CreateDirectoryProvisioningResponseContent
+ from .create_directory_synchronization_response_content import CreateDirectorySynchronizationResponseContent
+ from .create_email_provider_response_content import CreateEmailProviderResponseContent
+ from .create_email_template_response_content import CreateEmailTemplateResponseContent
+ from .create_encryption_key_public_wrapping_response_content import CreateEncryptionKeyPublicWrappingResponseContent
+ from .create_encryption_key_response_content import CreateEncryptionKeyResponseContent
+ from .create_encryption_key_type import CreateEncryptionKeyType
+ from .create_event_stream_action_request_content import CreateEventStreamActionRequestContent
+ from .create_event_stream_event_bridge_request_content import CreateEventStreamEventBridgeRequestContent
+ from .create_event_stream_redelivery_response_content import CreateEventStreamRedeliveryResponseContent
+ from .create_event_stream_response_content import CreateEventStreamResponseContent
+ from .create_event_stream_test_event_response_content import CreateEventStreamTestEventResponseContent
+ from .create_event_stream_web_hook_request_content import CreateEventStreamWebHookRequestContent
+ from .create_export_users_fields import CreateExportUsersFields
+ from .create_export_users_response_content import CreateExportUsersResponseContent
+ from .create_flow_response_content import CreateFlowResponseContent
+ from .create_flows_vault_connection_activecampaign import CreateFlowsVaultConnectionActivecampaign
+ from .create_flows_vault_connection_activecampaign_api_key import CreateFlowsVaultConnectionActivecampaignApiKey
+ from .create_flows_vault_connection_activecampaign_uninitialized import (
+ CreateFlowsVaultConnectionActivecampaignUninitialized,
+ )
+ from .create_flows_vault_connection_airtable import CreateFlowsVaultConnectionAirtable
+ from .create_flows_vault_connection_airtable_api_key import CreateFlowsVaultConnectionAirtableApiKey
+ from .create_flows_vault_connection_airtable_uninitialized import CreateFlowsVaultConnectionAirtableUninitialized
+ from .create_flows_vault_connection_auth_0 import CreateFlowsVaultConnectionAuth0
+ from .create_flows_vault_connection_auth_0_oauth_app import CreateFlowsVaultConnectionAuth0OauthApp
+ from .create_flows_vault_connection_auth_0_uninitialized import CreateFlowsVaultConnectionAuth0Uninitialized
+ from .create_flows_vault_connection_bigquery import CreateFlowsVaultConnectionBigquery
+ from .create_flows_vault_connection_bigquery_jwt import CreateFlowsVaultConnectionBigqueryJwt
+ from .create_flows_vault_connection_bigquery_uninitialized import CreateFlowsVaultConnectionBigqueryUninitialized
+ from .create_flows_vault_connection_clearbit import CreateFlowsVaultConnectionClearbit
+ from .create_flows_vault_connection_clearbit_api_key import CreateFlowsVaultConnectionClearbitApiKey
+ from .create_flows_vault_connection_clearbit_uninitialized import CreateFlowsVaultConnectionClearbitUninitialized
+ from .create_flows_vault_connection_docusign import CreateFlowsVaultConnectionDocusign
+ from .create_flows_vault_connection_docusign_oauth_code import CreateFlowsVaultConnectionDocusignOauthCode
+ from .create_flows_vault_connection_docusign_uninitialized import CreateFlowsVaultConnectionDocusignUninitialized
+ from .create_flows_vault_connection_google_sheets import CreateFlowsVaultConnectionGoogleSheets
+ from .create_flows_vault_connection_google_sheets_oauth_code import CreateFlowsVaultConnectionGoogleSheetsOauthCode
+ from .create_flows_vault_connection_google_sheets_uninitialized import (
+ CreateFlowsVaultConnectionGoogleSheetsUninitialized,
+ )
+ from .create_flows_vault_connection_http import CreateFlowsVaultConnectionHttp
+ from .create_flows_vault_connection_http_bearer import CreateFlowsVaultConnectionHttpBearer
+ from .create_flows_vault_connection_http_uninitialized import CreateFlowsVaultConnectionHttpUninitialized
+ from .create_flows_vault_connection_hubspot import CreateFlowsVaultConnectionHubspot
+ from .create_flows_vault_connection_hubspot_api_key import CreateFlowsVaultConnectionHubspotApiKey
+ from .create_flows_vault_connection_hubspot_oauth_code import CreateFlowsVaultConnectionHubspotOauthCode
+ from .create_flows_vault_connection_hubspot_uninitialized import CreateFlowsVaultConnectionHubspotUninitialized
+ from .create_flows_vault_connection_jwt import CreateFlowsVaultConnectionJwt
+ from .create_flows_vault_connection_jwt_jwt import CreateFlowsVaultConnectionJwtJwt
+ from .create_flows_vault_connection_jwt_uninitialized import CreateFlowsVaultConnectionJwtUninitialized
+ from .create_flows_vault_connection_mailchimp import CreateFlowsVaultConnectionMailchimp
+ from .create_flows_vault_connection_mailchimp_api_key import CreateFlowsVaultConnectionMailchimpApiKey
+ from .create_flows_vault_connection_mailchimp_oauth_code import CreateFlowsVaultConnectionMailchimpOauthCode
+ from .create_flows_vault_connection_mailchimp_uninitialized import CreateFlowsVaultConnectionMailchimpUninitialized
+ from .create_flows_vault_connection_mailjet import CreateFlowsVaultConnectionMailjet
+ from .create_flows_vault_connection_mailjet_api_key import CreateFlowsVaultConnectionMailjetApiKey
+ from .create_flows_vault_connection_mailjet_uninitialized import CreateFlowsVaultConnectionMailjetUninitialized
+ from .create_flows_vault_connection_pipedrive import CreateFlowsVaultConnectionPipedrive
+ from .create_flows_vault_connection_pipedrive_oauth_code import CreateFlowsVaultConnectionPipedriveOauthCode
+ from .create_flows_vault_connection_pipedrive_token import CreateFlowsVaultConnectionPipedriveToken
+ from .create_flows_vault_connection_pipedrive_uninitialized import CreateFlowsVaultConnectionPipedriveUninitialized
+ from .create_flows_vault_connection_request_content import CreateFlowsVaultConnectionRequestContent
+ from .create_flows_vault_connection_response_content import CreateFlowsVaultConnectionResponseContent
+ from .create_flows_vault_connection_salesforce import CreateFlowsVaultConnectionSalesforce
+ from .create_flows_vault_connection_salesforce_oauth_code import CreateFlowsVaultConnectionSalesforceOauthCode
+ from .create_flows_vault_connection_salesforce_uninitialized import (
+ CreateFlowsVaultConnectionSalesforceUninitialized,
+ )
+ from .create_flows_vault_connection_sendgrid import CreateFlowsVaultConnectionSendgrid
+ from .create_flows_vault_connection_sendgrid_api_key import CreateFlowsVaultConnectionSendgridApiKey
+ from .create_flows_vault_connection_sendgrid_uninitialized import CreateFlowsVaultConnectionSendgridUninitialized
+ from .create_flows_vault_connection_slack import CreateFlowsVaultConnectionSlack
+ from .create_flows_vault_connection_slack_oauth_code import CreateFlowsVaultConnectionSlackOauthCode
+ from .create_flows_vault_connection_slack_uninitialized import CreateFlowsVaultConnectionSlackUninitialized
+ from .create_flows_vault_connection_slack_webhook import CreateFlowsVaultConnectionSlackWebhook
+ from .create_flows_vault_connection_stripe import CreateFlowsVaultConnectionStripe
+ from .create_flows_vault_connection_stripe_key_pair import CreateFlowsVaultConnectionStripeKeyPair
+ from .create_flows_vault_connection_stripe_oauth_code import CreateFlowsVaultConnectionStripeOauthCode
+ from .create_flows_vault_connection_stripe_uninitialized import CreateFlowsVaultConnectionStripeUninitialized
+ from .create_flows_vault_connection_telegram import CreateFlowsVaultConnectionTelegram
+ from .create_flows_vault_connection_telegram_token import CreateFlowsVaultConnectionTelegramToken
+ from .create_flows_vault_connection_telegram_uninitialized import CreateFlowsVaultConnectionTelegramUninitialized
+ from .create_flows_vault_connection_twilio import CreateFlowsVaultConnectionTwilio
+ from .create_flows_vault_connection_twilio_api_key import CreateFlowsVaultConnectionTwilioApiKey
+ from .create_flows_vault_connection_twilio_uninitialized import CreateFlowsVaultConnectionTwilioUninitialized
+ from .create_flows_vault_connection_whatsapp import CreateFlowsVaultConnectionWhatsapp
+ from .create_flows_vault_connection_whatsapp_token import CreateFlowsVaultConnectionWhatsappToken
+ from .create_flows_vault_connection_whatsapp_uninitialized import CreateFlowsVaultConnectionWhatsappUninitialized
+ from .create_flows_vault_connection_zapier import CreateFlowsVaultConnectionZapier
+ from .create_flows_vault_connection_zapier_uninitialized import CreateFlowsVaultConnectionZapierUninitialized
+ from .create_flows_vault_connection_zapier_webhook import CreateFlowsVaultConnectionZapierWebhook
+ from .create_form_response_content import CreateFormResponseContent
+ from .create_guardian_enrollment_ticket_response_content import CreateGuardianEnrollmentTicketResponseContent
+ from .create_hook_response_content import CreateHookResponseContent
+ from .create_hook_secret_request_content import CreateHookSecretRequestContent
+ from .create_import_users_response_content import CreateImportUsersResponseContent
+ from .create_log_stream_datadog_request_body import CreateLogStreamDatadogRequestBody
+ from .create_log_stream_event_bridge_request_body import CreateLogStreamEventBridgeRequestBody
+ from .create_log_stream_event_grid_request_body import CreateLogStreamEventGridRequestBody
+ from .create_log_stream_http_request_body import CreateLogStreamHttpRequestBody
+ from .create_log_stream_mixpanel_request_body import CreateLogStreamMixpanelRequestBody
+ from .create_log_stream_request_content import CreateLogStreamRequestContent
+ from .create_log_stream_response_content import CreateLogStreamResponseContent
+ from .create_log_stream_segment_request_body import CreateLogStreamSegmentRequestBody
+ from .create_log_stream_splunk_request_body import CreateLogStreamSplunkRequestBody
+ from .create_log_stream_sumo_request_body import CreateLogStreamSumoRequestBody
+ from .create_organization_discovery_domain_response_content import CreateOrganizationDiscoveryDomainResponseContent
+ from .create_organization_invitation_response_content import CreateOrganizationInvitationResponseContent
+ from .create_organization_response_content import CreateOrganizationResponseContent
+ from .create_phone_provider_send_test_response_content import CreatePhoneProviderSendTestResponseContent
+ from .create_phone_template_response_content import CreatePhoneTemplateResponseContent
+ from .create_phone_template_test_notification_response_content import (
+ CreatePhoneTemplateTestNotificationResponseContent,
+ )
+ from .create_public_key_device_credential_response_content import CreatePublicKeyDeviceCredentialResponseContent
+ from .create_resource_server_response_content import CreateResourceServerResponseContent
+ from .create_role_response_content import CreateRoleResponseContent
+ from .create_rule_response_content import CreateRuleResponseContent
+ from .create_scim_configuration_request_content import CreateScimConfigurationRequestContent
+ from .create_scim_configuration_response_content import CreateScimConfigurationResponseContent
+ from .create_scim_token_response_content import CreateScimTokenResponseContent
+ from .create_self_service_profile_response_content import CreateSelfServiceProfileResponseContent
+ from .create_self_service_profile_sso_ticket_response_content import (
+ CreateSelfServiceProfileSsoTicketResponseContent,
+ )
+ from .create_token_exchange_profile_response_content import CreateTokenExchangeProfileResponseContent
+ from .create_token_quota import CreateTokenQuota
+ from .create_user_attribute_profile_response_content import CreateUserAttributeProfileResponseContent
+ from .create_user_authentication_method_response_content import CreateUserAuthenticationMethodResponseContent
+ from .create_user_response_content import CreateUserResponseContent
+ from .create_verifiable_credential_template_response_content import (
+ CreateVerifiableCredentialTemplateResponseContent,
+ )
+ from .create_verification_email_response_content import CreateVerificationEmailResponseContent
+ from .created_authentication_method_type_enum import CreatedAuthenticationMethodTypeEnum
+ from .created_user_authentication_method_type_enum import CreatedUserAuthenticationMethodTypeEnum
+ from .credential_id import CredentialId
+ from .custom_domain import CustomDomain
+ from .custom_domain_custom_client_ip_header import CustomDomainCustomClientIpHeader
+ from .custom_domain_custom_client_ip_header_enum import CustomDomainCustomClientIpHeaderEnum
+ from .custom_domain_provisioning_type_enum import CustomDomainProvisioningTypeEnum
+ from .custom_domain_status_filter_enum import CustomDomainStatusFilterEnum
+ from .custom_domain_tls_policy_enum import CustomDomainTlsPolicyEnum
+ from .custom_domain_type_enum import CustomDomainTypeEnum
+ from .custom_domain_verification_method_enum import CustomDomainVerificationMethodEnum
+ from .custom_provider_configuration import CustomProviderConfiguration
+ from .custom_provider_credentials import CustomProviderCredentials
+ from .custom_provider_delivery_method_enum import CustomProviderDeliveryMethodEnum
+ from .custom_signing_key_algorithm_enum import CustomSigningKeyAlgorithmEnum
+ from .custom_signing_key_curve_enum import CustomSigningKeyCurveEnum
+ from .custom_signing_key_jwk import CustomSigningKeyJwk
+ from .custom_signing_key_operation_enum import CustomSigningKeyOperationEnum
+ from .custom_signing_key_type_enum import CustomSigningKeyTypeEnum
+ from .custom_signing_key_use_enum import CustomSigningKeyUseEnum
+ from .daily_stats import DailyStats
+ from .default_token_quota import DefaultTokenQuota
+ from .delete_hook_secret_request_content import DeleteHookSecretRequestContent
+ from .delete_user_identity_response_content import DeleteUserIdentityResponseContent
+ from .delete_user_identity_response_content_item import DeleteUserIdentityResponseContentItem
+ from .deploy_action_response_content import DeployActionResponseContent
+ from .deploy_action_version_request_body_params import DeployActionVersionRequestBodyParams
+ from .deploy_action_version_request_content import DeployActionVersionRequestContent
+ from .deploy_action_version_response_content import DeployActionVersionResponseContent
+ from .device_credential import DeviceCredential
+ from .device_credential_public_key_type_enum import DeviceCredentialPublicKeyTypeEnum
+ from .device_credential_type_enum import DeviceCredentialTypeEnum
+ from .directory_provisioning_mapping_item import DirectoryProvisioningMappingItem
+ from .domain_certificate import DomainCertificate
+ from .domain_certificate_authority_enum import DomainCertificateAuthorityEnum
+ from .domain_certificate_status_enum import DomainCertificateStatusEnum
+ from .domain_metadata import DomainMetadata
+ from .domain_verification import DomainVerification
+ from .domain_verification_method import DomainVerificationMethod
+ from .domain_verification_method_name_enum import DomainVerificationMethodNameEnum
+ from .domain_verification_status_enum import DomainVerificationStatusEnum
+ from .email_attribute import EmailAttribute
+ from .email_mailgun_region_enum import EmailMailgunRegionEnum
+ from .email_provider_credentials import EmailProviderCredentials
+ from .email_provider_credentials_schema import EmailProviderCredentialsSchema
+ from .email_provider_credentials_schema_access_key_id import EmailProviderCredentialsSchemaAccessKeyId
+ from .email_provider_credentials_schema_api_key import EmailProviderCredentialsSchemaApiKey
+ from .email_provider_credentials_schema_client_id import EmailProviderCredentialsSchemaClientId
+ from .email_provider_credentials_schema_connection_string import EmailProviderCredentialsSchemaConnectionString
+ from .email_provider_credentials_schema_smtp_host import EmailProviderCredentialsSchemaSmtpHost
+ from .email_provider_credentials_schema_three import EmailProviderCredentialsSchemaThree
+ from .email_provider_credentials_schema_zero import EmailProviderCredentialsSchemaZero
+ from .email_provider_name_enum import EmailProviderNameEnum
+ from .email_provider_settings import EmailProviderSettings
+ from .email_smtp_host import EmailSmtpHost
+ from .email_spark_post_region_enum import EmailSparkPostRegionEnum
+ from .email_specific_provider_settings_with_additional_properties import (
+ EmailSpecificProviderSettingsWithAdditionalProperties,
+ )
+ from .email_template_name_enum import EmailTemplateNameEnum
+ from .enabled_features_enum import EnabledFeaturesEnum
+ from .encryption_key import EncryptionKey
+ from .encryption_key_public_wrapping_algorithm import EncryptionKeyPublicWrappingAlgorithm
+ from .encryption_key_state import EncryptionKeyState
+ from .encryption_key_type import EncryptionKeyType
+ from .event_stream_action_configuration import EventStreamActionConfiguration
+ from .event_stream_action_destination import EventStreamActionDestination
+ from .event_stream_action_destination_type_enum import EventStreamActionDestinationTypeEnum
+ from .event_stream_action_response_content import EventStreamActionResponseContent
+ from .event_stream_cloud_event import EventStreamCloudEvent
+ from .event_stream_delivery import EventStreamDelivery
+ from .event_stream_delivery_attempt import EventStreamDeliveryAttempt
+ from .event_stream_delivery_event_type_enum import EventStreamDeliveryEventTypeEnum
+ from .event_stream_delivery_status_enum import EventStreamDeliveryStatusEnum
+ from .event_stream_destination_patch import EventStreamDestinationPatch
+ from .event_stream_event_bridge_aws_region_enum import EventStreamEventBridgeAwsRegionEnum
+ from .event_stream_event_bridge_configuration import EventStreamEventBridgeConfiguration
+ from .event_stream_event_bridge_destination import EventStreamEventBridgeDestination
+ from .event_stream_event_bridge_destination_type_enum import EventStreamEventBridgeDestinationTypeEnum
+ from .event_stream_event_bridge_response_content import EventStreamEventBridgeResponseContent
+ from .event_stream_event_type_enum import EventStreamEventTypeEnum
+ from .event_stream_response_content import EventStreamResponseContent
+ from .event_stream_status_enum import EventStreamStatusEnum
+ from .event_stream_subscription import EventStreamSubscription
+ from .event_stream_test_event_type_enum import EventStreamTestEventTypeEnum
+ from .event_stream_webhook_authorization_response import EventStreamWebhookAuthorizationResponse
+ from .event_stream_webhook_basic_auth import EventStreamWebhookBasicAuth
+ from .event_stream_webhook_basic_auth_method_enum import EventStreamWebhookBasicAuthMethodEnum
+ from .event_stream_webhook_bearer_auth import EventStreamWebhookBearerAuth
+ from .event_stream_webhook_bearer_auth_method_enum import EventStreamWebhookBearerAuthMethodEnum
+ from .event_stream_webhook_configuration import EventStreamWebhookConfiguration
+ from .event_stream_webhook_destination import EventStreamWebhookDestination
+ from .event_stream_webhook_destination_type_enum import EventStreamWebhookDestinationTypeEnum
+ from .event_stream_webhook_response_content import EventStreamWebhookResponseContent
+ from .express_configuration import ExpressConfiguration
+ from .express_configuration_or_null import ExpressConfigurationOrNull
+ from .extensibility_email_provider_credentials import ExtensibilityEmailProviderCredentials
+ from .federated_connection_token_set import FederatedConnectionTokenSet
+ from .flow_action import FlowAction
+ from .flow_action_activecampaign import FlowActionActivecampaign
+ from .flow_action_activecampaign_list_contacts import FlowActionActivecampaignListContacts
+ from .flow_action_activecampaign_list_contacts_params import FlowActionActivecampaignListContactsParams
+ from .flow_action_activecampaign_upsert_contact import FlowActionActivecampaignUpsertContact
+ from .flow_action_activecampaign_upsert_contact_params import FlowActionActivecampaignUpsertContactParams
+ from .flow_action_activecampaign_upsert_contact_params_custom_fields import (
+ FlowActionActivecampaignUpsertContactParamsCustomFields,
+ )
+ from .flow_action_airtable import FlowActionAirtable
+ from .flow_action_airtable_create_record import FlowActionAirtableCreateRecord
+ from .flow_action_airtable_create_record_params import FlowActionAirtableCreateRecordParams
+ from .flow_action_airtable_create_record_params_fields import FlowActionAirtableCreateRecordParamsFields
+ from .flow_action_airtable_list_records import FlowActionAirtableListRecords
+ from .flow_action_airtable_list_records_params import FlowActionAirtableListRecordsParams
+ from .flow_action_airtable_update_record import FlowActionAirtableUpdateRecord
+ from .flow_action_airtable_update_record_params import FlowActionAirtableUpdateRecordParams
+ from .flow_action_airtable_update_record_params_fields import FlowActionAirtableUpdateRecordParamsFields
+ from .flow_action_auth_0 import FlowActionAuth0
+ from .flow_action_auth_0_create_user import FlowActionAuth0CreateUser
+ from .flow_action_auth_0_create_user_params import FlowActionAuth0CreateUserParams
+ from .flow_action_auth_0_create_user_params_payload import FlowActionAuth0CreateUserParamsPayload
+ from .flow_action_auth_0_get_user import FlowActionAuth0GetUser
+ from .flow_action_auth_0_get_user_params import FlowActionAuth0GetUserParams
+ from .flow_action_auth_0_send_email import FlowActionAuth0SendEmail
+ from .flow_action_auth_0_send_email_params import FlowActionAuth0SendEmailParams
+ from .flow_action_auth_0_send_email_params_from import FlowActionAuth0SendEmailParamsFrom
+ from .flow_action_auth_0_send_email_params_from_email import FlowActionAuth0SendEmailParamsFromEmail
+ from .flow_action_auth_0_send_email_params_to import FlowActionAuth0SendEmailParamsTo
+ from .flow_action_auth_0_send_request import FlowActionAuth0SendRequest
+ from .flow_action_auth_0_send_request_params import FlowActionAuth0SendRequestParams
+ from .flow_action_auth_0_send_request_params_custom_vars import FlowActionAuth0SendRequestParamsCustomVars
+ from .flow_action_auth_0_send_request_params_headers import FlowActionAuth0SendRequestParamsHeaders
+ from .flow_action_auth_0_send_request_params_method import FlowActionAuth0SendRequestParamsMethod
+ from .flow_action_auth_0_send_request_params_payload import FlowActionAuth0SendRequestParamsPayload
+ from .flow_action_auth_0_send_request_params_payload_object import FlowActionAuth0SendRequestParamsPayloadObject
+ from .flow_action_auth_0_send_request_params_query_params import FlowActionAuth0SendRequestParamsQueryParams
+ from .flow_action_auth_0_send_request_params_query_params_value import (
+ FlowActionAuth0SendRequestParamsQueryParamsValue,
+ )
+ from .flow_action_auth_0_update_user import FlowActionAuth0UpdateUser
+ from .flow_action_auth_0_update_user_params import FlowActionAuth0UpdateUserParams
+ from .flow_action_auth_0_update_user_params_changes import FlowActionAuth0UpdateUserParamsChanges
+ from .flow_action_bigquery import FlowActionBigquery
+ from .flow_action_bigquery_insert_rows import FlowActionBigqueryInsertRows
+ from .flow_action_bigquery_insert_rows_params import FlowActionBigqueryInsertRowsParams
+ from .flow_action_bigquery_insert_rows_params_data import FlowActionBigqueryInsertRowsParamsData
+ from .flow_action_clearbit import FlowActionClearbit
+ from .flow_action_clearbit_find_company import FlowActionClearbitFindCompany
+ from .flow_action_clearbit_find_company_params import FlowActionClearbitFindCompanyParams
+ from .flow_action_clearbit_find_person import FlowActionClearbitFindPerson
+ from .flow_action_clearbit_find_person_params import FlowActionClearbitFindPersonParams
+ from .flow_action_email import FlowActionEmail
+ from .flow_action_email_verify_email import FlowActionEmailVerifyEmail
+ from .flow_action_email_verify_email_params import FlowActionEmailVerifyEmailParams
+ from .flow_action_email_verify_email_params_rules import FlowActionEmailVerifyEmailParamsRules
+ from .flow_action_flow import FlowActionFlow
+ from .flow_action_flow_boolean_condition import FlowActionFlowBooleanCondition
+ from .flow_action_flow_boolean_condition_params import FlowActionFlowBooleanConditionParams
+ from .flow_action_flow_delay_flow import FlowActionFlowDelayFlow
+ from .flow_action_flow_delay_flow_params import FlowActionFlowDelayFlowParams
+ from .flow_action_flow_delay_flow_params_number import FlowActionFlowDelayFlowParamsNumber
+ from .flow_action_flow_delay_flow_params_units import FlowActionFlowDelayFlowParamsUnits
+ from .flow_action_flow_do_nothing import FlowActionFlowDoNothing
+ from .flow_action_flow_do_nothing_params import FlowActionFlowDoNothingParams
+ from .flow_action_flow_error_message import FlowActionFlowErrorMessage
+ from .flow_action_flow_error_message_params import FlowActionFlowErrorMessageParams
+ from .flow_action_flow_map_value import FlowActionFlowMapValue
+ from .flow_action_flow_map_value_params import FlowActionFlowMapValueParams
+ from .flow_action_flow_map_value_params_cases import FlowActionFlowMapValueParamsCases
+ from .flow_action_flow_map_value_params_fallback import FlowActionFlowMapValueParamsFallback
+ from .flow_action_flow_map_value_params_fallback_object import FlowActionFlowMapValueParamsFallbackObject
+ from .flow_action_flow_map_value_params_input import FlowActionFlowMapValueParamsInput
+ from .flow_action_flow_return_json import FlowActionFlowReturnJson
+ from .flow_action_flow_return_json_params import FlowActionFlowReturnJsonParams
+ from .flow_action_flow_return_json_params_payload import FlowActionFlowReturnJsonParamsPayload
+ from .flow_action_flow_return_json_params_payload_object import FlowActionFlowReturnJsonParamsPayloadObject
+ from .flow_action_flow_store_vars import FlowActionFlowStoreVars
+ from .flow_action_flow_store_vars_params import FlowActionFlowStoreVarsParams
+ from .flow_action_flow_store_vars_params_vars import FlowActionFlowStoreVarsParamsVars
+ from .flow_action_google_sheets import FlowActionGoogleSheets
+ from .flow_action_google_sheets_add_row import FlowActionGoogleSheetsAddRow
+ from .flow_action_google_sheets_add_row_params import FlowActionGoogleSheetsAddRowParams
+ from .flow_action_google_sheets_add_row_params_sheet_id import FlowActionGoogleSheetsAddRowParamsSheetId
+ from .flow_action_google_sheets_add_row_params_values import FlowActionGoogleSheetsAddRowParamsValues
+ from .flow_action_http import FlowActionHttp
+ from .flow_action_http_send_request import FlowActionHttpSendRequest
+ from .flow_action_http_send_request_params import FlowActionHttpSendRequestParams
+ from .flow_action_http_send_request_params_basic_auth import FlowActionHttpSendRequestParamsBasicAuth
+ from .flow_action_http_send_request_params_content_type import FlowActionHttpSendRequestParamsContentType
+ from .flow_action_http_send_request_params_headers import FlowActionHttpSendRequestParamsHeaders
+ from .flow_action_http_send_request_params_method import FlowActionHttpSendRequestParamsMethod
+ from .flow_action_http_send_request_params_payload import FlowActionHttpSendRequestParamsPayload
+ from .flow_action_http_send_request_params_payload_object import FlowActionHttpSendRequestParamsPayloadObject
+ from .flow_action_http_send_request_params_query_params import FlowActionHttpSendRequestParamsQueryParams
+ from .flow_action_http_send_request_params_query_params_value import FlowActionHttpSendRequestParamsQueryParamsValue
+ from .flow_action_hubspot import FlowActionHubspot
+ from .flow_action_hubspot_enroll_contact import FlowActionHubspotEnrollContact
+ from .flow_action_hubspot_enroll_contact_params import FlowActionHubspotEnrollContactParams
+ from .flow_action_hubspot_enroll_contact_params_workflow_id import FlowActionHubspotEnrollContactParamsWorkflowId
+ from .flow_action_hubspot_get_contact import FlowActionHubspotGetContact
+ from .flow_action_hubspot_get_contact_params import FlowActionHubspotGetContactParams
+ from .flow_action_hubspot_upsert_contact import FlowActionHubspotUpsertContact
+ from .flow_action_hubspot_upsert_contact_params import FlowActionHubspotUpsertContactParams
+ from .flow_action_hubspot_upsert_contact_params_property import FlowActionHubspotUpsertContactParamsProperty
+ from .flow_action_json import FlowActionJson
+ from .flow_action_json_create_json import FlowActionJsonCreateJson
+ from .flow_action_json_create_json_params import FlowActionJsonCreateJsonParams
+ from .flow_action_json_create_json_params_object import FlowActionJsonCreateJsonParamsObject
+ from .flow_action_json_parse_json import FlowActionJsonParseJson
+ from .flow_action_json_parse_json_params import FlowActionJsonParseJsonParams
+ from .flow_action_json_serialize_json import FlowActionJsonSerializeJson
+ from .flow_action_json_serialize_json_params import FlowActionJsonSerializeJsonParams
+ from .flow_action_json_serialize_json_params_object import FlowActionJsonSerializeJsonParamsObject
+ from .flow_action_json_serialize_json_params_object_object import FlowActionJsonSerializeJsonParamsObjectObject
+ from .flow_action_jwt import FlowActionJwt
+ from .flow_action_jwt_decode_jwt import FlowActionJwtDecodeJwt
+ from .flow_action_jwt_decode_jwt_params import FlowActionJwtDecodeJwtParams
+ from .flow_action_jwt_sign_jwt import FlowActionJwtSignJwt
+ from .flow_action_jwt_sign_jwt_params import FlowActionJwtSignJwtParams
+ from .flow_action_jwt_sign_jwt_params_payload import FlowActionJwtSignJwtParamsPayload
+ from .flow_action_jwt_verify_jwt import FlowActionJwtVerifyJwt
+ from .flow_action_jwt_verify_jwt_params import FlowActionJwtVerifyJwtParams
+ from .flow_action_mailchimp import FlowActionMailchimp
+ from .flow_action_mailchimp_upsert_member import FlowActionMailchimpUpsertMember
+ from .flow_action_mailchimp_upsert_member_params import FlowActionMailchimpUpsertMemberParams
+ from .flow_action_mailchimp_upsert_member_params_member import FlowActionMailchimpUpsertMemberParamsMember
+ from .flow_action_mailchimp_upsert_member_params_member_merge_fields import (
+ FlowActionMailchimpUpsertMemberParamsMemberMergeFields,
+ )
+ from .flow_action_mailjet import FlowActionMailjet
+ from .flow_action_mailjet_send_email import FlowActionMailjetSendEmail
+ from .flow_action_mailjet_send_email_params import FlowActionMailjetSendEmailParams
+ from .flow_action_mailjet_send_email_params_content import FlowActionMailjetSendEmailParamsContent
+ from .flow_action_mailjet_send_email_params_template_id import FlowActionMailjetSendEmailParamsTemplateId
+ from .flow_action_otp import FlowActionOtp
+ from .flow_action_otp_generate_code import FlowActionOtpGenerateCode
+ from .flow_action_otp_generate_code_params import FlowActionOtpGenerateCodeParams
+ from .flow_action_otp_verify_code import FlowActionOtpVerifyCode
+ from .flow_action_otp_verify_code_params import FlowActionOtpVerifyCodeParams
+ from .flow_action_otp_verify_code_params_code import FlowActionOtpVerifyCodeParamsCode
+ from .flow_action_pipedrive import FlowActionPipedrive
+ from .flow_action_pipedrive_add_deal import FlowActionPipedriveAddDeal
+ from .flow_action_pipedrive_add_deal_params import FlowActionPipedriveAddDealParams
+ from .flow_action_pipedrive_add_deal_params_fields import FlowActionPipedriveAddDealParamsFields
+ from .flow_action_pipedrive_add_deal_params_organization_id import FlowActionPipedriveAddDealParamsOrganizationId
+ from .flow_action_pipedrive_add_deal_params_person_id import FlowActionPipedriveAddDealParamsPersonId
+ from .flow_action_pipedrive_add_deal_params_stage_id import FlowActionPipedriveAddDealParamsStageId
+ from .flow_action_pipedrive_add_deal_params_user_id import FlowActionPipedriveAddDealParamsUserId
+ from .flow_action_pipedrive_add_organization import FlowActionPipedriveAddOrganization
+ from .flow_action_pipedrive_add_organization_params import FlowActionPipedriveAddOrganizationParams
+ from .flow_action_pipedrive_add_organization_params_fields import FlowActionPipedriveAddOrganizationParamsFields
+ from .flow_action_pipedrive_add_organization_params_owner_id import FlowActionPipedriveAddOrganizationParamsOwnerId
+ from .flow_action_pipedrive_add_person import FlowActionPipedriveAddPerson
+ from .flow_action_pipedrive_add_person_params import FlowActionPipedriveAddPersonParams
+ from .flow_action_pipedrive_add_person_params_fields import FlowActionPipedriveAddPersonParamsFields
+ from .flow_action_pipedrive_add_person_params_organization_id import (
+ FlowActionPipedriveAddPersonParamsOrganizationId,
+ )
+ from .flow_action_pipedrive_add_person_params_owner_id import FlowActionPipedriveAddPersonParamsOwnerId
+ from .flow_action_salesforce import FlowActionSalesforce
+ from .flow_action_salesforce_create_lead import FlowActionSalesforceCreateLead
+ from .flow_action_salesforce_create_lead_params import FlowActionSalesforceCreateLeadParams
+ from .flow_action_salesforce_create_lead_params_payload import FlowActionSalesforceCreateLeadParamsPayload
+ from .flow_action_salesforce_get_lead import FlowActionSalesforceGetLead
+ from .flow_action_salesforce_get_lead_params import FlowActionSalesforceGetLeadParams
+ from .flow_action_salesforce_search_leads import FlowActionSalesforceSearchLeads
+ from .flow_action_salesforce_search_leads_params import FlowActionSalesforceSearchLeadsParams
+ from .flow_action_salesforce_search_leads_params_search_field import (
+ FlowActionSalesforceSearchLeadsParamsSearchField,
+ )
+ from .flow_action_salesforce_update_lead import FlowActionSalesforceUpdateLead
+ from .flow_action_salesforce_update_lead_params import FlowActionSalesforceUpdateLeadParams
+ from .flow_action_salesforce_update_lead_params_payload import FlowActionSalesforceUpdateLeadParamsPayload
+ from .flow_action_sendgrid import FlowActionSendgrid
+ from .flow_action_sendgrid_send_email import FlowActionSendgridSendEmail
+ from .flow_action_sendgrid_send_email_params import FlowActionSendgridSendEmailParams
+ from .flow_action_sendgrid_send_email_params_person import FlowActionSendgridSendEmailParamsPerson
+ from .flow_action_slack import FlowActionSlack
+ from .flow_action_slack_post_message import FlowActionSlackPostMessage
+ from .flow_action_slack_post_message_params import FlowActionSlackPostMessageParams
+ from .flow_action_slack_post_message_params_attachment import FlowActionSlackPostMessageParamsAttachment
+ from .flow_action_slack_post_message_params_attachment_color import FlowActionSlackPostMessageParamsAttachmentColor
+ from .flow_action_slack_post_message_params_attachment_field import FlowActionSlackPostMessageParamsAttachmentField
+ from .flow_action_stripe import FlowActionStripe
+ from .flow_action_stripe_add_tax_id import FlowActionStripeAddTaxId
+ from .flow_action_stripe_add_tax_id_params import FlowActionStripeAddTaxIdParams
+ from .flow_action_stripe_address import FlowActionStripeAddress
+ from .flow_action_stripe_create_customer import FlowActionStripeCreateCustomer
+ from .flow_action_stripe_create_customer_params import FlowActionStripeCreateCustomerParams
+ from .flow_action_stripe_create_portal_session import FlowActionStripeCreatePortalSession
+ from .flow_action_stripe_create_portal_session_params import FlowActionStripeCreatePortalSessionParams
+ from .flow_action_stripe_delete_tax_id import FlowActionStripeDeleteTaxId
+ from .flow_action_stripe_delete_tax_id_params import FlowActionStripeDeleteTaxIdParams
+ from .flow_action_stripe_find_customers import FlowActionStripeFindCustomers
+ from .flow_action_stripe_find_customers_params import FlowActionStripeFindCustomersParams
+ from .flow_action_stripe_get_customer import FlowActionStripeGetCustomer
+ from .flow_action_stripe_get_customer_params import FlowActionStripeGetCustomerParams
+ from .flow_action_stripe_metadata import FlowActionStripeMetadata
+ from .flow_action_stripe_tax_id import FlowActionStripeTaxId
+ from .flow_action_stripe_update_customer import FlowActionStripeUpdateCustomer
+ from .flow_action_stripe_update_customer_params import FlowActionStripeUpdateCustomerParams
+ from .flow_action_telegram import FlowActionTelegram
+ from .flow_action_telegram_send_message import FlowActionTelegramSendMessage
+ from .flow_action_telegram_send_message_params import FlowActionTelegramSendMessageParams
+ from .flow_action_twilio import FlowActionTwilio
+ from .flow_action_twilio_make_call import FlowActionTwilioMakeCall
+ from .flow_action_twilio_make_call_params import FlowActionTwilioMakeCallParams
+ from .flow_action_twilio_send_sms import FlowActionTwilioSendSms
+ from .flow_action_twilio_send_sms_params import FlowActionTwilioSendSmsParams
+ from .flow_action_whatsapp import FlowActionWhatsapp
+ from .flow_action_whatsapp_send_message import FlowActionWhatsappSendMessage
+ from .flow_action_whatsapp_send_message_params import FlowActionWhatsappSendMessageParams
+ from .flow_action_whatsapp_send_message_params_payload import FlowActionWhatsappSendMessageParamsPayload
+ from .flow_action_whatsapp_send_message_params_payload_object import (
+ FlowActionWhatsappSendMessageParamsPayloadObject,
+ )
+ from .flow_action_whatsapp_send_message_params_type import FlowActionWhatsappSendMessageParamsType
+ from .flow_action_xml import FlowActionXml
+ from .flow_action_xml_parse_xml import FlowActionXmlParseXml
+ from .flow_action_xml_parse_xml_params import FlowActionXmlParseXmlParams
+ from .flow_action_xml_serialize_xml import FlowActionXmlSerializeXml
+ from .flow_action_xml_serialize_xml_params import FlowActionXmlSerializeXmlParams
+ from .flow_action_xml_serialize_xml_params_object import FlowActionXmlSerializeXmlParamsObject
+ from .flow_action_xml_serialize_xml_params_object_object import FlowActionXmlSerializeXmlParamsObjectObject
+ from .flow_action_zapier import FlowActionZapier
+ from .flow_action_zapier_trigger_webhook import FlowActionZapierTriggerWebhook
+ from .flow_action_zapier_trigger_webhook_params import FlowActionZapierTriggerWebhookParams
+ from .flow_action_zapier_trigger_webhook_params_method import FlowActionZapierTriggerWebhookParamsMethod
+ from .flow_execution_debug import FlowExecutionDebug
+ from .flow_execution_summary import FlowExecutionSummary
+ from .flow_summary import FlowSummary
+ from .flows_vault_connectio_setup_api_key import FlowsVaultConnectioSetupApiKey
+ from .flows_vault_connectio_setup_api_key_with_base_url import FlowsVaultConnectioSetupApiKeyWithBaseUrl
+ from .flows_vault_connectio_setup_bigquery_oauth_jwt import FlowsVaultConnectioSetupBigqueryOauthJwt
+ from .flows_vault_connectio_setup_http_bearer import FlowsVaultConnectioSetupHttpBearer
+ from .flows_vault_connectio_setup_jwt import FlowsVaultConnectioSetupJwt
+ from .flows_vault_connectio_setup_jwt_algorithm_enum import FlowsVaultConnectioSetupJwtAlgorithmEnum
+ from .flows_vault_connectio_setup_mailjet_api_key import FlowsVaultConnectioSetupMailjetApiKey
+ from .flows_vault_connectio_setup_oauth_app import FlowsVaultConnectioSetupOauthApp
+ from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+ from .flows_vault_connectio_setup_secret_api_key import FlowsVaultConnectioSetupSecretApiKey
+ from .flows_vault_connectio_setup_stripe_key_pair import FlowsVaultConnectioSetupStripeKeyPair
+ from .flows_vault_connectio_setup_token import FlowsVaultConnectioSetupToken
+ from .flows_vault_connectio_setup_twilio_api_key import FlowsVaultConnectioSetupTwilioApiKey
+ from .flows_vault_connectio_setup_type_api_key_enum import FlowsVaultConnectioSetupTypeApiKeyEnum
+ from .flows_vault_connectio_setup_type_bearer_enum import FlowsVaultConnectioSetupTypeBearerEnum
+ from .flows_vault_connectio_setup_type_jwt_enum import FlowsVaultConnectioSetupTypeJwtEnum
+ from .flows_vault_connectio_setup_type_key_pair_enum import FlowsVaultConnectioSetupTypeKeyPairEnum
+ from .flows_vault_connectio_setup_type_oauth_app_enum import FlowsVaultConnectioSetupTypeOauthAppEnum
+ from .flows_vault_connectio_setup_type_oauth_code_enum import FlowsVaultConnectioSetupTypeOauthCodeEnum
+ from .flows_vault_connectio_setup_type_oauth_jwt_enum import FlowsVaultConnectioSetupTypeOauthJwtEnum
+ from .flows_vault_connectio_setup_type_token_enum import FlowsVaultConnectioSetupTypeTokenEnum
+ from .flows_vault_connectio_setup_type_webhook_enum import FlowsVaultConnectioSetupTypeWebhookEnum
+ from .flows_vault_connectio_setup_webhook import FlowsVaultConnectioSetupWebhook
+ from .flows_vault_connection_app_id_activecampaign_enum import FlowsVaultConnectionAppIdActivecampaignEnum
+ from .flows_vault_connection_app_id_airtable_enum import FlowsVaultConnectionAppIdAirtableEnum
+ from .flows_vault_connection_app_id_auth_0_enum import FlowsVaultConnectionAppIdAuth0Enum
+ from .flows_vault_connection_app_id_bigquery_enum import FlowsVaultConnectionAppIdBigqueryEnum
+ from .flows_vault_connection_app_id_clearbit_enum import FlowsVaultConnectionAppIdClearbitEnum
+ from .flows_vault_connection_app_id_docusign_enum import FlowsVaultConnectionAppIdDocusignEnum
+ from .flows_vault_connection_app_id_google_sheets_enum import FlowsVaultConnectionAppIdGoogleSheetsEnum
+ from .flows_vault_connection_app_id_http_enum import FlowsVaultConnectionAppIdHttpEnum
+ from .flows_vault_connection_app_id_hubspot_enum import FlowsVaultConnectionAppIdHubspotEnum
+ from .flows_vault_connection_app_id_jwt_enum import FlowsVaultConnectionAppIdJwtEnum
+ from .flows_vault_connection_app_id_mailchimp_enum import FlowsVaultConnectionAppIdMailchimpEnum
+ from .flows_vault_connection_app_id_mailjet_enum import FlowsVaultConnectionAppIdMailjetEnum
+ from .flows_vault_connection_app_id_pipedrive_enum import FlowsVaultConnectionAppIdPipedriveEnum
+ from .flows_vault_connection_app_id_salesforce_enum import FlowsVaultConnectionAppIdSalesforceEnum
+ from .flows_vault_connection_app_id_sendgrid_enum import FlowsVaultConnectionAppIdSendgridEnum
+ from .flows_vault_connection_app_id_slack_enum import FlowsVaultConnectionAppIdSlackEnum
+ from .flows_vault_connection_app_id_stripe_enum import FlowsVaultConnectionAppIdStripeEnum
+ from .flows_vault_connection_app_id_telegram_enum import FlowsVaultConnectionAppIdTelegramEnum
+ from .flows_vault_connection_app_id_twilio_enum import FlowsVaultConnectionAppIdTwilioEnum
+ from .flows_vault_connection_app_id_whatsapp_enum import FlowsVaultConnectionAppIdWhatsappEnum
+ from .flows_vault_connection_app_id_zapier_enum import FlowsVaultConnectionAppIdZapierEnum
+ from .flows_vault_connection_summary import FlowsVaultConnectionSummary
+ from .form_block import FormBlock
+ from .form_block_divider import FormBlockDivider
+ from .form_block_divider_config import FormBlockDividerConfig
+ from .form_block_html import FormBlockHtml
+ from .form_block_html_config import FormBlockHtmlConfig
+ from .form_block_image import FormBlockImage
+ from .form_block_image_config import FormBlockImageConfig
+ from .form_block_image_config_position_enum import FormBlockImageConfigPositionEnum
+ from .form_block_jump_button import FormBlockJumpButton
+ from .form_block_jump_button_config import FormBlockJumpButtonConfig
+ from .form_block_jump_button_config_style import FormBlockJumpButtonConfigStyle
+ from .form_block_next_button import FormBlockNextButton
+ from .form_block_next_button_config import FormBlockNextButtonConfig
+ from .form_block_previous_button import FormBlockPreviousButton
+ from .form_block_previous_button_config import FormBlockPreviousButtonConfig
+ from .form_block_resend_button import FormBlockResendButton
+ from .form_block_resend_button_config import FormBlockResendButtonConfig
+ from .form_block_resend_button_config_text_alignment_enum import FormBlockResendButtonConfigTextAlignmentEnum
+ from .form_block_rich_text import FormBlockRichText
+ from .form_block_rich_text_config import FormBlockRichTextConfig
+ from .form_block_type_divider_const import FormBlockTypeDividerConst
+ from .form_block_type_html_const import FormBlockTypeHtmlConst
+ from .form_block_type_image_const import FormBlockTypeImageConst
+ from .form_block_type_jump_button_const import FormBlockTypeJumpButtonConst
+ from .form_block_type_next_button_const import FormBlockTypeNextButtonConst
+ from .form_block_type_previous_button_const import FormBlockTypePreviousButtonConst
+ from .form_block_type_resend_button_const import FormBlockTypeResendButtonConst
+ from .form_block_type_rich_text_const import FormBlockTypeRichTextConst
+ from .form_component import FormComponent
+ from .form_component_category_block_const import FormComponentCategoryBlockConst
+ from .form_component_category_field_const import FormComponentCategoryFieldConst
+ from .form_component_category_widget_const import FormComponentCategoryWidgetConst
+ from .form_ending_node import FormEndingNode
+ from .form_ending_node_after_submit import FormEndingNodeAfterSubmit
+ from .form_ending_node_id import FormEndingNodeId
+ from .form_ending_node_nullable import FormEndingNodeNullable
+ from .form_ending_node_redirection import FormEndingNodeRedirection
+ from .form_ending_node_resume_flow_true_const import FormEndingNodeResumeFlowTrueConst
+ from .form_field import FormField
+ from .form_field_boolean import FormFieldBoolean
+ from .form_field_boolean_config import FormFieldBooleanConfig
+ from .form_field_boolean_config_options import FormFieldBooleanConfigOptions
+ from .form_field_cards import FormFieldCards
+ from .form_field_cards_config import FormFieldCardsConfig
+ from .form_field_cards_config_option import FormFieldCardsConfigOption
+ from .form_field_choice import FormFieldChoice
+ from .form_field_choice_config import FormFieldChoiceConfig
+ from .form_field_choice_config_allow_other import FormFieldChoiceConfigAllowOther
+ from .form_field_choice_config_allow_other_enabled_true_enum import FormFieldChoiceConfigAllowOtherEnabledTrueEnum
+ from .form_field_choice_config_option import FormFieldChoiceConfigOption
+ from .form_field_custom import FormFieldCustom
+ from .form_field_custom_config import FormFieldCustomConfig
+ from .form_field_custom_config_params import FormFieldCustomConfigParams
+ from .form_field_custom_config_schema import FormFieldCustomConfigSchema
+ from .form_field_date import FormFieldDate
+ from .form_field_date_config import FormFieldDateConfig
+ from .form_field_date_config_format_enum import FormFieldDateConfigFormatEnum
+ from .form_field_dropdown import FormFieldDropdown
+ from .form_field_dropdown_config import FormFieldDropdownConfig
+ from .form_field_dropdown_config_option import FormFieldDropdownConfigOption
+ from .form_field_email import FormFieldEmail
+ from .form_field_email_config import FormFieldEmailConfig
+ from .form_field_file import FormFieldFile
+ from .form_field_file_config import FormFieldFileConfig
+ from .form_field_file_config_category_enum import FormFieldFileConfigCategoryEnum
+ from .form_field_file_config_storage import FormFieldFileConfigStorage
+ from .form_field_file_config_storage_type_enum import FormFieldFileConfigStorageTypeEnum
+ from .form_field_legal import FormFieldLegal
+ from .form_field_legal_config import FormFieldLegalConfig
+ from .form_field_number import FormFieldNumber
+ from .form_field_number_config import FormFieldNumberConfig
+ from .form_field_password import FormFieldPassword
+ from .form_field_password_config import FormFieldPasswordConfig
+ from .form_field_password_config_hash_enum import FormFieldPasswordConfigHashEnum
+ from .form_field_payment import FormFieldPayment
+ from .form_field_payment_config import FormFieldPaymentConfig
+ from .form_field_payment_config_charge import FormFieldPaymentConfigCharge
+ from .form_field_payment_config_charge_one_off import FormFieldPaymentConfigChargeOneOff
+ from .form_field_payment_config_charge_one_off_currency_enum import FormFieldPaymentConfigChargeOneOffCurrencyEnum
+ from .form_field_payment_config_charge_one_off_one_off import FormFieldPaymentConfigChargeOneOffOneOff
+ from .form_field_payment_config_charge_one_off_one_off_amount import FormFieldPaymentConfigChargeOneOffOneOffAmount
+ from .form_field_payment_config_charge_subscription import FormFieldPaymentConfigChargeSubscription
+ from .form_field_payment_config_charge_type_one_off_const import FormFieldPaymentConfigChargeTypeOneOffConst
+ from .form_field_payment_config_charge_type_subscription_const import (
+ FormFieldPaymentConfigChargeTypeSubscriptionConst,
+ )
+ from .form_field_payment_config_credentials import FormFieldPaymentConfigCredentials
+ from .form_field_payment_config_customer import FormFieldPaymentConfigCustomer
+ from .form_field_payment_config_field_properties import FormFieldPaymentConfigFieldProperties
+ from .form_field_payment_config_fields import FormFieldPaymentConfigFields
+ from .form_field_payment_config_provider_enum import FormFieldPaymentConfigProviderEnum
+ from .form_field_payment_config_subscription import FormFieldPaymentConfigSubscription
+ from .form_field_social import FormFieldSocial
+ from .form_field_social_config import FormFieldSocialConfig
+ from .form_field_tel import FormFieldTel
+ from .form_field_tel_config import FormFieldTelConfig
+ from .form_field_tel_config_strings import FormFieldTelConfigStrings
+ from .form_field_text import FormFieldText
+ from .form_field_text_config import FormFieldTextConfig
+ from .form_field_type_boolean_const import FormFieldTypeBooleanConst
+ from .form_field_type_cards_const import FormFieldTypeCardsConst
+ from .form_field_type_choice_const import FormFieldTypeChoiceConst
+ from .form_field_type_custom_const import FormFieldTypeCustomConst
+ from .form_field_type_date_const import FormFieldTypeDateConst
+ from .form_field_type_dropdown_const import FormFieldTypeDropdownConst
+ from .form_field_type_email_const import FormFieldTypeEmailConst
+ from .form_field_type_file_const import FormFieldTypeFileConst
+ from .form_field_type_legal_const import FormFieldTypeLegalConst
+ from .form_field_type_number_const import FormFieldTypeNumberConst
+ from .form_field_type_password_const import FormFieldTypePasswordConst
+ from .form_field_type_payment_const import FormFieldTypePaymentConst
+ from .form_field_type_social_const import FormFieldTypeSocialConst
+ from .form_field_type_tel_const import FormFieldTypeTelConst
+ from .form_field_type_text_const import FormFieldTypeTextConst
+ from .form_field_type_url_const import FormFieldTypeUrlConst
+ from .form_field_url import FormFieldUrl
+ from .form_field_url_config import FormFieldUrlConfig
+ from .form_flow import FormFlow
+ from .form_flow_config import FormFlowConfig
+ from .form_hidden_field import FormHiddenField
+ from .form_languages import FormLanguages
+ from .form_languages_nullable import FormLanguagesNullable
+ from .form_messages import FormMessages
+ from .form_messages_custom import FormMessagesCustom
+ from .form_messages_error import FormMessagesError
+ from .form_messages_nullable import FormMessagesNullable
+ from .form_node import FormNode
+ from .form_node_coordinates import FormNodeCoordinates
+ from .form_node_list import FormNodeList
+ from .form_node_list_nullable import FormNodeListNullable
+ from .form_node_pointer import FormNodePointer
+ from .form_node_type_flow_const import FormNodeTypeFlowConst
+ from .form_node_type_router_const import FormNodeTypeRouterConst
+ from .form_node_type_step_const import FormNodeTypeStepConst
+ from .form_router import FormRouter
+ from .form_router_config import FormRouterConfig
+ from .form_router_rule import FormRouterRule
+ from .form_start_node import FormStartNode
+ from .form_start_node_nullable import FormStartNodeNullable
+ from .form_step import FormStep
+ from .form_step_component_list import FormStepComponentList
+ from .form_step_config import FormStepConfig
+ from .form_style import FormStyle
+ from .form_style_nullable import FormStyleNullable
+ from .form_summary import FormSummary
+ from .form_translations import FormTranslations
+ from .form_translations_nullable import FormTranslationsNullable
+ from .form_widget import FormWidget
+ from .form_widget_auth_0_verifiable_credentials import FormWidgetAuth0VerifiableCredentials
+ from .form_widget_auth_0_verifiable_credentials_config import FormWidgetAuth0VerifiableCredentialsConfig
+ from .form_widget_g_maps_address import FormWidgetGMapsAddress
+ from .form_widget_g_maps_address_config import FormWidgetGMapsAddressConfig
+ from .form_widget_recaptcha import FormWidgetRecaptcha
+ from .form_widget_recaptcha_config import FormWidgetRecaptchaConfig
+ from .form_widget_type_auth_0_verifiable_credentials_const import FormWidgetTypeAuth0VerifiableCredentialsConst
+ from .form_widget_type_g_maps_address_const import FormWidgetTypeGMapsAddressConst
+ from .form_widget_type_recaptcha_const import FormWidgetTypeRecaptchaConst
+ from .forms_request_parameters_hydrate_enum import FormsRequestParametersHydrateEnum
+ from .get_action_execution_response_content import GetActionExecutionResponseContent
+ from .get_action_response_content import GetActionResponseContent
+ from .get_action_version_response_content import GetActionVersionResponseContent
+ from .get_active_users_count_stats_response_content import GetActiveUsersCountStatsResponseContent
+ from .get_acul_response_content import GetAculResponseContent
+ from .get_attack_protection_captcha_response_content import GetAttackProtectionCaptchaResponseContent
+ from .get_bot_detection_settings_response_content import GetBotDetectionSettingsResponseContent
+ from .get_branding_default_theme_response_content import GetBrandingDefaultThemeResponseContent
+ from .get_branding_phone_provider_response_content import GetBrandingPhoneProviderResponseContent
+ from .get_branding_response_content import GetBrandingResponseContent
+ from .get_branding_theme_response_content import GetBrandingThemeResponseContent
+ from .get_breached_password_detection_settings_response_content import (
+ GetBreachedPasswordDetectionSettingsResponseContent,
+ )
+ from .get_brute_force_settings_response_content import GetBruteForceSettingsResponseContent
+ from .get_brute_force_settings_response_content_mode import GetBruteForceSettingsResponseContentMode
+ from .get_brute_force_settings_response_content_shields_item import GetBruteForceSettingsResponseContentShieldsItem
+ from .get_client_credential_response_content import GetClientCredentialResponseContent
+ from .get_client_response_content import GetClientResponseContent
+ from .get_connection_enabled_clients_response_content import GetConnectionEnabledClientsResponseContent
+ from .get_connection_profile_response_content import GetConnectionProfileResponseContent
+ from .get_connection_profile_template_response_content import GetConnectionProfileTemplateResponseContent
+ from .get_connection_response_content import GetConnectionResponseContent
+ from .get_custom_domain_response_content import GetCustomDomainResponseContent
+ from .get_custom_signing_keys_response_content import GetCustomSigningKeysResponseContent
+ from .get_custom_texts_by_language_response_content import GetCustomTextsByLanguageResponseContent
+ from .get_directory_provisioning_default_mapping_response_content import (
+ GetDirectoryProvisioningDefaultMappingResponseContent,
+ )
+ from .get_directory_provisioning_response_content import GetDirectoryProvisioningResponseContent
+ from .get_email_provider_response_content import GetEmailProviderResponseContent
+ from .get_email_template_response_content import GetEmailTemplateResponseContent
+ from .get_encryption_key_response_content import GetEncryptionKeyResponseContent
+ from .get_event_stream_delivery_history_response_content import GetEventStreamDeliveryHistoryResponseContent
+ from .get_event_stream_response_content import GetEventStreamResponseContent
+ from .get_flow_execution_response_content import GetFlowExecutionResponseContent
+ from .get_flow_request_parameters_hydrate_enum import GetFlowRequestParametersHydrateEnum
+ from .get_flow_response_content import GetFlowResponseContent
+ from .get_flows_vault_connection_response_content import GetFlowsVaultConnectionResponseContent
+ from .get_form_response_content import GetFormResponseContent
+ from .get_guardian_enrollment_response_content import GetGuardianEnrollmentResponseContent
+ from .get_guardian_factor_duo_settings_response_content import GetGuardianFactorDuoSettingsResponseContent
+ from .get_guardian_factor_phone_message_types_response_content import (
+ GetGuardianFactorPhoneMessageTypesResponseContent,
+ )
+ from .get_guardian_factor_phone_templates_response_content import GetGuardianFactorPhoneTemplatesResponseContent
+ from .get_guardian_factor_sms_templates_response_content import GetGuardianFactorSmsTemplatesResponseContent
+ from .get_guardian_factors_provider_apns_response_content import GetGuardianFactorsProviderApnsResponseContent
+ from .get_guardian_factors_provider_phone_response_content import GetGuardianFactorsProviderPhoneResponseContent
+ from .get_guardian_factors_provider_phone_twilio_response_content import (
+ GetGuardianFactorsProviderPhoneTwilioResponseContent,
+ )
+ from .get_guardian_factors_provider_push_notification_response_content import (
+ GetGuardianFactorsProviderPushNotificationResponseContent,
+ )
+ from .get_guardian_factors_provider_sms_response_content import GetGuardianFactorsProviderSmsResponseContent
+ from .get_guardian_factors_provider_sms_twilio_response_content import (
+ GetGuardianFactorsProviderSmsTwilioResponseContent,
+ )
+ from .get_guardian_factors_provider_sns_response_content import GetGuardianFactorsProviderSnsResponseContent
+ from .get_hook_response_content import GetHookResponseContent
+ from .get_hook_secret_response_content import GetHookSecretResponseContent
+ from .get_job_error_response_content import GetJobErrorResponseContent
+ from .get_job_generic_error_response_content import GetJobGenericErrorResponseContent
+ from .get_job_import_user_error import GetJobImportUserError
+ from .get_job_response_content import GetJobResponseContent
+ from .get_job_user_error import GetJobUserError
+ from .get_log_response_content import GetLogResponseContent
+ from .get_log_stream_response_content import GetLogStreamResponseContent
+ from .get_network_acls_response_content import GetNetworkAclsResponseContent
+ from .get_organization_by_name_response_content import GetOrganizationByNameResponseContent
+ from .get_organization_connection_response_content import GetOrganizationConnectionResponseContent
+ from .get_organization_discovery_domain_response_content import GetOrganizationDiscoveryDomainResponseContent
+ from .get_organization_invitation_response_content import GetOrganizationInvitationResponseContent
+ from .get_organization_response_content import GetOrganizationResponseContent
+ from .get_partials_response_content import GetPartialsResponseContent
+ from .get_phone_template_response_content import GetPhoneTemplateResponseContent
+ from .get_refresh_token_response_content import GetRefreshTokenResponseContent
+ from .get_resource_server_response_content import GetResourceServerResponseContent
+ from .get_risk_assessments_settings_new_device_response_content import (
+ GetRiskAssessmentsSettingsNewDeviceResponseContent,
+ )
+ from .get_risk_assessments_settings_response_content import GetRiskAssessmentsSettingsResponseContent
+ from .get_role_response_content import GetRoleResponseContent
+ from .get_rule_response_content import GetRuleResponseContent
+ from .get_scim_configuration_default_mapping_response_content import (
+ GetScimConfigurationDefaultMappingResponseContent,
+ )
+ from .get_scim_configuration_response_content import GetScimConfigurationResponseContent
+ from .get_scim_tokens_response_content import GetScimTokensResponseContent
+ from .get_self_service_profile_response_content import GetSelfServiceProfileResponseContent
+ from .get_session_response_content import GetSessionResponseContent
+ from .get_settings_response_content import GetSettingsResponseContent
+ from .get_signing_keys_response_content import GetSigningKeysResponseContent
+ from .get_supplemental_signals_response_content import GetSupplementalSignalsResponseContent
+ from .get_suspicious_ip_throttling_settings_response_content import GetSuspiciousIpThrottlingSettingsResponseContent
+ from .get_tenant_settings_response_content import GetTenantSettingsResponseContent
+ from .get_token_exchange_profile_response_content import GetTokenExchangeProfileResponseContent
+ from .get_universal_login_template import GetUniversalLoginTemplate
+ from .get_universal_login_template_response_content import GetUniversalLoginTemplateResponseContent
+ from .get_user_attribute_profile_response_content import GetUserAttributeProfileResponseContent
+ from .get_user_attribute_profile_template_response_content import GetUserAttributeProfileTemplateResponseContent
+ from .get_user_authentication_method_response_content import GetUserAuthenticationMethodResponseContent
+ from .get_user_response_content import GetUserResponseContent
+ from .get_verifiable_credential_template_response_content import GetVerifiableCredentialTemplateResponseContent
+ from .group import Group
+ from .guardian_enrollment_date import GuardianEnrollmentDate
+ from .guardian_enrollment_factor_enum import GuardianEnrollmentFactorEnum
+ from .guardian_enrollment_status import GuardianEnrollmentStatus
+ from .guardian_factor import GuardianFactor
+ from .guardian_factor_name_enum import GuardianFactorNameEnum
+ from .guardian_factor_phone_factor_message_type_enum import GuardianFactorPhoneFactorMessageTypeEnum
+ from .guardian_factors_provider_push_notification_provider_data_enum import (
+ GuardianFactorsProviderPushNotificationProviderDataEnum,
+ )
+ from .guardian_factors_provider_sms_provider_enum import GuardianFactorsProviderSmsProviderEnum
+ from .hook import Hook
+ from .hook_dependencies import HookDependencies
+ from .hook_trigger_id_enum import HookTriggerIdEnum
+ from .http_custom_header import HttpCustomHeader
+ from .identity import Identity
+ from .identity_provider_enum import IdentityProviderEnum
+ from .identity_provider_only_auth_0_enum import IdentityProviderOnlyAuth0Enum
+ from .import_encryption_key_response_content import ImportEncryptionKeyResponseContent
+ from .integration import Integration
+ from .integration_feature_type_enum import IntegrationFeatureTypeEnum
+ from .integration_release import IntegrationRelease
+ from .integration_required_param import IntegrationRequiredParam
+ from .integration_required_param_option import IntegrationRequiredParamOption
+ from .integration_required_param_type_enum import IntegrationRequiredParamTypeEnum
+ from .integration_sem_ver import IntegrationSemVer
+ from .job_file_format_enum import JobFileFormatEnum
+ from .linked_client_configuration import LinkedClientConfiguration
+ from .list_action_bindings_paginated_response_content import ListActionBindingsPaginatedResponseContent
+ from .list_action_triggers_response_content import ListActionTriggersResponseContent
+ from .list_action_versions_paginated_response_content import ListActionVersionsPaginatedResponseContent
+ from .list_actions_paginated_response_content import ListActionsPaginatedResponseContent
+ from .list_aculs_offset_paginated_response_content import ListAculsOffsetPaginatedResponseContent
+ from .list_branding_phone_providers_response_content import ListBrandingPhoneProvidersResponseContent
+ from .list_client_connections_response_content import ListClientConnectionsResponseContent
+ from .list_client_grant_organizations_paginated_response_content import (
+ ListClientGrantOrganizationsPaginatedResponseContent,
+ )
+ from .list_client_grant_paginated_response_content import ListClientGrantPaginatedResponseContent
+ from .list_clients_offset_paginated_response_content import ListClientsOffsetPaginatedResponseContent
+ from .list_connection_profile_template_response_content import ListConnectionProfileTemplateResponseContent
+ from .list_connection_profiles_paginated_response_content import ListConnectionProfilesPaginatedResponseContent
+ from .list_connections_checkpoint_paginated_response_content import (
+ ListConnectionsCheckpointPaginatedResponseContent,
+ )
+ from .list_custom_domains_response_content import ListCustomDomainsResponseContent
+ from .list_device_credentials_offset_paginated_response_content import (
+ ListDeviceCredentialsOffsetPaginatedResponseContent,
+ )
+ from .list_encryption_key_offset_paginated_response_content import ListEncryptionKeyOffsetPaginatedResponseContent
+ from .list_flow_executions_paginated_response_content import ListFlowExecutionsPaginatedResponseContent
+ from .list_flows_offset_paginated_response_content import ListFlowsOffsetPaginatedResponseContent
+ from .list_flows_vault_connections_offset_paginated_response_content import (
+ ListFlowsVaultConnectionsOffsetPaginatedResponseContent,
+ )
+ from .list_forms_offset_paginated_response_content import ListFormsOffsetPaginatedResponseContent
+ from .list_guardian_policies_response_content import ListGuardianPoliciesResponseContent
+ from .list_hooks_offset_paginated_response_content import ListHooksOffsetPaginatedResponseContent
+ from .list_log_offset_paginated_response_content import ListLogOffsetPaginatedResponseContent
+ from .list_network_acls_offset_paginated_response_content import ListNetworkAclsOffsetPaginatedResponseContent
+ from .list_organization_client_grants_offset_paginated_response_content import (
+ ListOrganizationClientGrantsOffsetPaginatedResponseContent,
+ )
+ from .list_organization_connections_offset_paginated_response_content import (
+ ListOrganizationConnectionsOffsetPaginatedResponseContent,
+ )
+ from .list_organization_discovery_domains_response_content import ListOrganizationDiscoveryDomainsResponseContent
+ from .list_organization_invitations_offset_paginated_response_content import (
+ ListOrganizationInvitationsOffsetPaginatedResponseContent,
+ )
+ from .list_organization_member_roles_offset_paginated_response_content import (
+ ListOrganizationMemberRolesOffsetPaginatedResponseContent,
+ )
+ from .list_organization_members_paginated_response_content import ListOrganizationMembersPaginatedResponseContent
+ from .list_organizations_paginated_response_content import ListOrganizationsPaginatedResponseContent
+ from .list_phone_templates_response_content import ListPhoneTemplatesResponseContent
+ from .list_refresh_tokens_paginated_response_content import ListRefreshTokensPaginatedResponseContent
+ from .list_resource_server_offset_paginated_response_content import ListResourceServerOffsetPaginatedResponseContent
+ from .list_role_permissions_offset_paginated_response_content import (
+ ListRolePermissionsOffsetPaginatedResponseContent,
+ )
+ from .list_role_users_paginated_response_content import ListRoleUsersPaginatedResponseContent
+ from .list_roles_offset_paginated_response_content import ListRolesOffsetPaginatedResponseContent
+ from .list_rules_offset_paginated_response_content import ListRulesOffsetPaginatedResponseContent
+ from .list_self_service_profile_custom_text_response_content import ListSelfServiceProfileCustomTextResponseContent
+ from .list_self_service_profiles_paginated_response_content import ListSelfServiceProfilesPaginatedResponseContent
+ from .list_token_exchange_profile_response_content import ListTokenExchangeProfileResponseContent
+ from .list_user_attribute_profile_template_response_content import ListUserAttributeProfileTemplateResponseContent
+ from .list_user_attribute_profiles_paginated_response_content import (
+ ListUserAttributeProfilesPaginatedResponseContent,
+ )
+ from .list_user_authentication_methods_offset_paginated_response_content import (
+ ListUserAuthenticationMethodsOffsetPaginatedResponseContent,
+ )
+ from .list_user_blocks_by_identifier_response_content import ListUserBlocksByIdentifierResponseContent
+ from .list_user_blocks_response_content import ListUserBlocksResponseContent
+ from .list_user_connected_accounts_response_content import ListUserConnectedAccountsResponseContent
+ from .list_user_grants_offset_paginated_response_content import ListUserGrantsOffsetPaginatedResponseContent
+ from .list_user_organizations_offset_paginated_response_content import (
+ ListUserOrganizationsOffsetPaginatedResponseContent,
+ )
+ from .list_user_permissions_offset_paginated_response_content import (
+ ListUserPermissionsOffsetPaginatedResponseContent,
+ )
+ from .list_user_roles_offset_paginated_response_content import ListUserRolesOffsetPaginatedResponseContent
+ from .list_user_sessions_paginated_response_content import ListUserSessionsPaginatedResponseContent
+ from .list_users_offset_paginated_response_content import ListUsersOffsetPaginatedResponseContent
+ from .list_verifiable_credential_templates_paginated_response_content import (
+ ListVerifiableCredentialTemplatesPaginatedResponseContent,
+ )
+ from .log import Log
+ from .log_date import LogDate
+ from .log_date_object import LogDateObject
+ from .log_details import LogDetails
+ from .log_location_info import LogLocationInfo
+ from .log_security_context import LogSecurityContext
+ from .log_stream_datadog_enum import LogStreamDatadogEnum
+ from .log_stream_datadog_region_enum import LogStreamDatadogRegionEnum
+ from .log_stream_datadog_response_schema import LogStreamDatadogResponseSchema
+ from .log_stream_datadog_sink import LogStreamDatadogSink
+ from .log_stream_event_bridge_enum import LogStreamEventBridgeEnum
+ from .log_stream_event_bridge_response_schema import LogStreamEventBridgeResponseSchema
+ from .log_stream_event_bridge_sink import LogStreamEventBridgeSink
+ from .log_stream_event_bridge_sink_region_enum import LogStreamEventBridgeSinkRegionEnum
+ from .log_stream_event_grid_enum import LogStreamEventGridEnum
+ from .log_stream_event_grid_region_enum import LogStreamEventGridRegionEnum
+ from .log_stream_event_grid_response_schema import LogStreamEventGridResponseSchema
+ from .log_stream_event_grid_sink import LogStreamEventGridSink
+ from .log_stream_filter import LogStreamFilter
+ from .log_stream_filter_group_name_enum import LogStreamFilterGroupNameEnum
+ from .log_stream_filter_type_enum import LogStreamFilterTypeEnum
+ from .log_stream_http_content_format_enum import LogStreamHttpContentFormatEnum
+ from .log_stream_http_enum import LogStreamHttpEnum
+ from .log_stream_http_response_schema import LogStreamHttpResponseSchema
+ from .log_stream_http_sink import LogStreamHttpSink
+ from .log_stream_mixpanel_enum import LogStreamMixpanelEnum
+ from .log_stream_mixpanel_region_enum import LogStreamMixpanelRegionEnum
+ from .log_stream_mixpanel_response_schema import LogStreamMixpanelResponseSchema
+ from .log_stream_mixpanel_sink import LogStreamMixpanelSink
+ from .log_stream_mixpanel_sink_patch import LogStreamMixpanelSinkPatch
+ from .log_stream_pii_algorithm_enum import LogStreamPiiAlgorithmEnum
+ from .log_stream_pii_config import LogStreamPiiConfig
+ from .log_stream_pii_log_fields_enum import LogStreamPiiLogFieldsEnum
+ from .log_stream_pii_method_enum import LogStreamPiiMethodEnum
+ from .log_stream_response_schema import LogStreamResponseSchema
+ from .log_stream_segment_enum import LogStreamSegmentEnum
+ from .log_stream_segment_response_schema import LogStreamSegmentResponseSchema
+ from .log_stream_segment_sink import LogStreamSegmentSink
+ from .log_stream_segment_sink_write_key import LogStreamSegmentSinkWriteKey
+ from .log_stream_sink_patch import LogStreamSinkPatch
+ from .log_stream_splunk_enum import LogStreamSplunkEnum
+ from .log_stream_splunk_response_schema import LogStreamSplunkResponseSchema
+ from .log_stream_splunk_sink import LogStreamSplunkSink
+ from .log_stream_status_enum import LogStreamStatusEnum
+ from .log_stream_sumo_enum import LogStreamSumoEnum
+ from .log_stream_sumo_response_schema import LogStreamSumoResponseSchema
+ from .log_stream_sumo_sink import LogStreamSumoSink
+ from .mdl_presentation_properties import MdlPresentationProperties
+ from .mdl_presentation_request import MdlPresentationRequest
+ from .mdl_presentation_request_properties import MdlPresentationRequestProperties
+ from .mfa_policy_enum import MfaPolicyEnum
+ from .native_social_login import NativeSocialLogin
+ from .native_social_login_apple import NativeSocialLoginApple
+ from .native_social_login_facebook import NativeSocialLoginFacebook
+ from .native_social_login_google import NativeSocialLoginGoogle
+ from .network_acl_action import NetworkAclAction
+ from .network_acl_action_allow_enum import NetworkAclActionAllowEnum
+ from .network_acl_action_block_enum import NetworkAclActionBlockEnum
+ from .network_acl_action_log_enum import NetworkAclActionLogEnum
+ from .network_acl_action_redirect_enum import NetworkAclActionRedirectEnum
+ from .network_acl_match import NetworkAclMatch
+ from .network_acl_match_ipv_4_cidr import NetworkAclMatchIpv4Cidr
+ from .network_acl_match_ipv_6_cidr import NetworkAclMatchIpv6Cidr
+ from .network_acl_rule import NetworkAclRule
+ from .network_acl_rule_scope_enum import NetworkAclRuleScopeEnum
+ from .network_acls_response_content import NetworkAclsResponseContent
+ from .oauth_scope import OauthScope
+ from .organization import Organization
+ from .organization_branding import OrganizationBranding
+ from .organization_branding_colors import OrganizationBrandingColors
+ from .organization_client_grant import OrganizationClientGrant
+ from .organization_connection import OrganizationConnection
+ from .organization_connection_information import OrganizationConnectionInformation
+ from .organization_discovery_domain import OrganizationDiscoveryDomain
+ from .organization_discovery_domain_status import OrganizationDiscoveryDomainStatus
+ from .organization_enabled_connection import OrganizationEnabledConnection
+ from .organization_invitation import OrganizationInvitation
+ from .organization_invitation_invitee import OrganizationInvitationInvitee
+ from .organization_invitation_inviter import OrganizationInvitationInviter
+ from .organization_member import OrganizationMember
+ from .organization_member_role import OrganizationMemberRole
+ from .organization_metadata import OrganizationMetadata
+ from .organization_usage_enum import OrganizationUsageEnum
+ from .partial_groups_enum import PartialGroupsEnum
+ from .partial_phone_template_content import PartialPhoneTemplateContent
+ from .patch_client_credential_response_content import PatchClientCredentialResponseContent
+ from .patch_supplemental_signals_response_content import PatchSupplementalSignalsResponseContent
+ from .permission_request_payload import PermissionRequestPayload
+ from .permissions_response_payload import PermissionsResponsePayload
+ from .phone_attribute import PhoneAttribute
+ from .phone_provider_channel_enum import PhoneProviderChannelEnum
+ from .phone_provider_configuration import PhoneProviderConfiguration
+ from .phone_provider_credentials import PhoneProviderCredentials
+ from .phone_provider_delivery_method_enum import PhoneProviderDeliveryMethodEnum
+ from .phone_provider_name_enum import PhoneProviderNameEnum
+ from .phone_provider_schema_masked import PhoneProviderSchemaMasked
+ from .phone_template import PhoneTemplate
+ from .phone_template_body import PhoneTemplateBody
+ from .phone_template_content import PhoneTemplateContent
+ from .phone_template_notification_type_enum import PhoneTemplateNotificationTypeEnum
+ from .post_client_credential_response_content import PostClientCredentialResponseContent
+ from .preferred_authentication_method_enum import PreferredAuthenticationMethodEnum
+ from .private_key_jwt import PrivateKeyJwt
+ from .private_key_jwt_credentials import PrivateKeyJwtCredentials
+ from .prompt_group_name_enum import PromptGroupNameEnum
+ from .prompt_language_enum import PromptLanguageEnum
+ from .public_key_credential import PublicKeyCredential
+ from .public_key_credential_algorithm_enum import PublicKeyCredentialAlgorithmEnum
+ from .public_key_credential_type_enum import PublicKeyCredentialTypeEnum
+ from .refresh_token_date import RefreshTokenDate
+ from .refresh_token_date_object import RefreshTokenDateObject
+ from .refresh_token_device import RefreshTokenDevice
+ from .refresh_token_expiration_type_enum import RefreshTokenExpirationTypeEnum
+ from .refresh_token_resource_server import RefreshTokenResourceServer
+ from .refresh_token_response_content import RefreshTokenResponseContent
+ from .refresh_token_rotation_type_enum import RefreshTokenRotationTypeEnum
+ from .refresh_token_session_id import RefreshTokenSessionId
+ from .regenerate_users_recovery_code_response_content import RegenerateUsersRecoveryCodeResponseContent
+ from .reset_phone_template_request_content import ResetPhoneTemplateRequestContent
+ from .reset_phone_template_response_content import ResetPhoneTemplateResponseContent
+ from .resource_server import ResourceServer
+ from .resource_server_consent_policy_enum import ResourceServerConsentPolicyEnum
+ from .resource_server_proof_of_possession import ResourceServerProofOfPossession
+ from .resource_server_proof_of_possession_mechanism_enum import ResourceServerProofOfPossessionMechanismEnum
+ from .resource_server_scope import ResourceServerScope
+ from .resource_server_subject_type_authorization import ResourceServerSubjectTypeAuthorization
+ from .resource_server_subject_type_authorization_client import ResourceServerSubjectTypeAuthorizationClient
+ from .resource_server_subject_type_authorization_client_policy_enum import (
+ ResourceServerSubjectTypeAuthorizationClientPolicyEnum,
+ )
+ from .resource_server_subject_type_authorization_user import ResourceServerSubjectTypeAuthorizationUser
+ from .resource_server_subject_type_authorization_user_policy_enum import (
+ ResourceServerSubjectTypeAuthorizationUserPolicyEnum,
+ )
+ from .resource_server_token_dialect_response_enum import ResourceServerTokenDialectResponseEnum
+ from .resource_server_token_dialect_schema_enum import ResourceServerTokenDialectSchemaEnum
+ from .resource_server_token_encryption import ResourceServerTokenEncryption
+ from .resource_server_token_encryption_algorithm_enum import ResourceServerTokenEncryptionAlgorithmEnum
+ from .resource_server_token_encryption_format_enum import ResourceServerTokenEncryptionFormatEnum
+ from .resource_server_token_encryption_key import ResourceServerTokenEncryptionKey
+ from .resource_server_verification_key_pem_certificate import ResourceServerVerificationKeyPemCertificate
+ from .revoked_signing_keys_response_content import RevokedSigningKeysResponseContent
+ from .role import Role
+ from .role_user import RoleUser
+ from .rotate_client_secret_response_content import RotateClientSecretResponseContent
+ from .rotate_connection_keys_request_content import RotateConnectionKeysRequestContent
+ from .rotate_connection_keys_signing_alg_enum import RotateConnectionKeysSigningAlgEnum
+ from .rotate_connections_keys_response_content import RotateConnectionsKeysResponseContent
+ from .rotate_signing_keys_response_content import RotateSigningKeysResponseContent
+ from .rule import Rule
+ from .rules_config import RulesConfig
+ from .scim_mapping_item import ScimMappingItem
+ from .scim_token_item import ScimTokenItem
+ from .screen_group_name_enum import ScreenGroupNameEnum
+ from .search_engine_versions_enum import SearchEngineVersionsEnum
+ from .self_service_profile import SelfServiceProfile
+ from .self_service_profile_allowed_strategy_enum import SelfServiceProfileAllowedStrategyEnum
+ from .self_service_profile_branding import SelfServiceProfileBranding
+ from .self_service_profile_branding_colors import SelfServiceProfileBrandingColors
+ from .self_service_profile_branding_properties import SelfServiceProfileBrandingProperties
+ from .self_service_profile_custom_text_language_enum import SelfServiceProfileCustomTextLanguageEnum
+ from .self_service_profile_custom_text_page_enum import SelfServiceProfileCustomTextPageEnum
+ from .self_service_profile_description import SelfServiceProfileDescription
+ from .self_service_profile_sso_ticket_connection_config import SelfServiceProfileSsoTicketConnectionConfig
+ from .self_service_profile_sso_ticket_connection_options import SelfServiceProfileSsoTicketConnectionOptions
+ from .self_service_profile_sso_ticket_domain_aliases_config import SelfServiceProfileSsoTicketDomainAliasesConfig
+ from .self_service_profile_sso_ticket_domain_verification_enum import (
+ SelfServiceProfileSsoTicketDomainVerificationEnum,
+ )
+ from .self_service_profile_sso_ticket_enabled_organization import SelfServiceProfileSsoTicketEnabledOrganization
+ from .self_service_profile_sso_ticket_google_workspace_config import (
+ SelfServiceProfileSsoTicketGoogleWorkspaceConfig,
+ )
+ from .self_service_profile_sso_ticket_idp_initiated_client_protocol_enum import (
+ SelfServiceProfileSsoTicketIdpInitiatedClientProtocolEnum,
+ )
+ from .self_service_profile_sso_ticket_idp_initiated_options import SelfServiceProfileSsoTicketIdpInitiatedOptions
+ from .self_service_profile_sso_ticket_provisioning_config import SelfServiceProfileSsoTicketProvisioningConfig
+ from .self_service_profile_sso_ticket_provisioning_scope_enum import (
+ SelfServiceProfileSsoTicketProvisioningScopeEnum,
+ )
+ from .self_service_profile_user_attribute import SelfServiceProfileUserAttribute
+ from .self_service_profile_user_attributes import SelfServiceProfileUserAttributes
+ from .session_authentication_signal import SessionAuthenticationSignal
+ from .session_authentication_signals import SessionAuthenticationSignals
+ from .session_client_metadata import SessionClientMetadata
+ from .session_cookie_metadata import SessionCookieMetadata
+ from .session_cookie_metadata_mode_enum import SessionCookieMetadataModeEnum
+ from .session_cookie_mode_enum import SessionCookieModeEnum
+ from .session_cookie_schema import SessionCookieSchema
+ from .session_date import SessionDate
+ from .session_device_metadata import SessionDeviceMetadata
+ from .session_ip import SessionIp
+ from .session_metadata import SessionMetadata
+ from .session_response_content import SessionResponseContent
+ from .set_custom_signing_keys_response_content import SetCustomSigningKeysResponseContent
+ from .set_email_template_response_content import SetEmailTemplateResponseContent
+ from .set_guardian_factor_duo_settings_response_content import SetGuardianFactorDuoSettingsResponseContent
+ from .set_guardian_factor_phone_message_types_response_content import (
+ SetGuardianFactorPhoneMessageTypesResponseContent,
+ )
+ from .set_guardian_factor_phone_templates_response_content import SetGuardianFactorPhoneTemplatesResponseContent
+ from .set_guardian_factor_response_content import SetGuardianFactorResponseContent
+ from .set_guardian_factor_sms_templates_response_content import SetGuardianFactorSmsTemplatesResponseContent
+ from .set_guardian_factors_provider_phone_response_content import SetGuardianFactorsProviderPhoneResponseContent
+ from .set_guardian_factors_provider_phone_twilio_response_content import (
+ SetGuardianFactorsProviderPhoneTwilioResponseContent,
+ )
+ from .set_guardian_factors_provider_push_notification_apns_request_content import (
+ SetGuardianFactorsProviderPushNotificationApnsRequestContent,
+ )
+ from .set_guardian_factors_provider_push_notification_apns_response_content import (
+ SetGuardianFactorsProviderPushNotificationApnsResponseContent,
+ )
+ from .set_guardian_factors_provider_push_notification_fcm_request_content import (
+ SetGuardianFactorsProviderPushNotificationFcmRequestContent,
+ )
+ from .set_guardian_factors_provider_push_notification_fcm_response_content import (
+ SetGuardianFactorsProviderPushNotificationFcmResponseContent,
+ )
+ from .set_guardian_factors_provider_push_notification_fcmv_1_request_content import (
+ SetGuardianFactorsProviderPushNotificationFcmv1RequestContent,
+ )
+ from .set_guardian_factors_provider_push_notification_fcmv_1_response_content import (
+ SetGuardianFactorsProviderPushNotificationFcmv1ResponseContent,
+ )
+ from .set_guardian_factors_provider_push_notification_response_content import (
+ SetGuardianFactorsProviderPushNotificationResponseContent,
+ )
+ from .set_guardian_factors_provider_push_notification_sns_response_content import (
+ SetGuardianFactorsProviderPushNotificationSnsResponseContent,
+ )
+ from .set_guardian_factors_provider_sms_response_content import SetGuardianFactorsProviderSmsResponseContent
+ from .set_guardian_factors_provider_sms_twilio_response_content import (
+ SetGuardianFactorsProviderSmsTwilioResponseContent,
+ )
+ from .set_guardian_policies_request_content import SetGuardianPoliciesRequestContent
+ from .set_guardian_policies_response_content import SetGuardianPoliciesResponseContent
+ from .set_network_acls_response_content import SetNetworkAclsResponseContent
+ from .set_partials_request_content import SetPartialsRequestContent
+ from .set_rules_config_response_content import SetRulesConfigResponseContent
+ from .set_self_service_profile_custom_text_request_content import SetSelfServiceProfileCustomTextRequestContent
+ from .set_self_service_profile_custom_text_response_content import SetSelfServiceProfileCustomTextResponseContent
+ from .set_user_authentication_method_response_content import SetUserAuthenticationMethodResponseContent
+ from .set_user_authentication_methods import SetUserAuthenticationMethods
+ from .set_user_authentication_methods_request_content import SetUserAuthenticationMethodsRequestContent
+ from .sets_custom_texts_by_language_request_content import SetsCustomTextsByLanguageRequestContent
+ from .signing_algorithm_enum import SigningAlgorithmEnum
+ from .signing_keys import SigningKeys
+ from .signing_keys_date import SigningKeysDate
+ from .signup_schema import SignupSchema
+ from .signup_status_enum import SignupStatusEnum
+ from .signup_verification import SignupVerification
+ from .signup_verified import SignupVerified
+ from .supported_locales import SupportedLocales
+ from .suspicious_ip_throttling_allowlist import SuspiciousIpThrottlingAllowlist
+ from .suspicious_ip_throttling_allowlist_item import SuspiciousIpThrottlingAllowlistItem
+ from .suspicious_ip_throttling_pre_login_stage import SuspiciousIpThrottlingPreLoginStage
+ from .suspicious_ip_throttling_pre_user_registration_stage import SuspiciousIpThrottlingPreUserRegistrationStage
+ from .suspicious_ip_throttling_shields_enum import SuspiciousIpThrottlingShieldsEnum
+ from .suspicious_ip_throttling_stage import SuspiciousIpThrottlingStage
+ from .tenant_oidc_logout_settings import TenantOidcLogoutSettings
+ from .tenant_settings_device_flow import TenantSettingsDeviceFlow
+ from .tenant_settings_device_flow_charset import TenantSettingsDeviceFlowCharset
+ from .tenant_settings_error_page import TenantSettingsErrorPage
+ from .tenant_settings_flags import TenantSettingsFlags
+ from .tenant_settings_guardian_page import TenantSettingsGuardianPage
+ from .tenant_settings_mtls import TenantSettingsMtls
+ from .tenant_settings_password_page import TenantSettingsPasswordPage
+ from .tenant_settings_resource_parameter_profile import TenantSettingsResourceParameterProfile
+ from .tenant_settings_sessions import TenantSettingsSessions
+ from .test_action_payload import TestActionPayload
+ from .test_action_response_content import TestActionResponseContent
+ from .test_action_result_payload import TestActionResultPayload
+ from .test_custom_domain_response_content import TestCustomDomainResponseContent
+ from .test_event_data_content import TestEventDataContent
+ from .token_exchange_profile_response_content import TokenExchangeProfileResponseContent
+ from .token_exchange_profile_type_enum import TokenExchangeProfileTypeEnum
+ from .token_quota import TokenQuota
+ from .token_quota_client_credentials import TokenQuotaClientCredentials
+ from .token_quota_configuration import TokenQuotaConfiguration
+ from .twilio_provider_configuration import TwilioProviderConfiguration
+ from .twilio_provider_credentials import TwilioProviderCredentials
+ from .twilio_provider_delivery_method_enum import TwilioProviderDeliveryMethodEnum
+ from .universal_login_experience_enum import UniversalLoginExperienceEnum
+ from .update_action_bindings_response_content import UpdateActionBindingsResponseContent
+ from .update_action_response_content import UpdateActionResponseContent
+ from .update_acul_response_content import UpdateAculResponseContent
+ from .update_attack_protection_captcha_response_content import UpdateAttackProtectionCaptchaResponseContent
+ from .update_bot_detection_settings_response_content import UpdateBotDetectionSettingsResponseContent
+ from .update_branding_colors import UpdateBrandingColors
+ from .update_branding_font import UpdateBrandingFont
+ from .update_branding_page_background import UpdateBrandingPageBackground
+ from .update_branding_phone_provider_response_content import UpdateBrandingPhoneProviderResponseContent
+ from .update_branding_response_content import UpdateBrandingResponseContent
+ from .update_branding_theme_response_content import UpdateBrandingThemeResponseContent
+ from .update_breached_password_detection_settings_response_content import (
+ UpdateBreachedPasswordDetectionSettingsResponseContent,
+ )
+ from .update_brute_force_settings_response_content import UpdateBruteForceSettingsResponseContent
+ from .update_brute_force_settings_response_content_mode import UpdateBruteForceSettingsResponseContentMode
+ from .update_brute_force_settings_response_content_shields_item import (
+ UpdateBruteForceSettingsResponseContentShieldsItem,
+ )
+ from .update_client_grant_response_content import UpdateClientGrantResponseContent
+ from .update_client_response_content import UpdateClientResponseContent
+ from .update_connection_options import UpdateConnectionOptions
+ from .update_connection_profile_response_content import UpdateConnectionProfileResponseContent
+ from .update_connection_response_content import UpdateConnectionResponseContent
+ from .update_custom_domain_response_content import UpdateCustomDomainResponseContent
+ from .update_directory_provisioning_request_content import UpdateDirectoryProvisioningRequestContent
+ from .update_directory_provisioning_response_content import UpdateDirectoryProvisioningResponseContent
+ from .update_email_provider_response_content import UpdateEmailProviderResponseContent
+ from .update_email_template_response_content import UpdateEmailTemplateResponseContent
+ from .update_enabled_client_connections_request_content import UpdateEnabledClientConnectionsRequestContent
+ from .update_enabled_client_connections_request_content_item import UpdateEnabledClientConnectionsRequestContentItem
+ from .update_event_stream_response_content import UpdateEventStreamResponseContent
+ from .update_flow_response_content import UpdateFlowResponseContent
+ from .update_flows_vault_connection_response_content import UpdateFlowsVaultConnectionResponseContent
+ from .update_flows_vault_connection_setup import UpdateFlowsVaultConnectionSetup
+ from .update_form_response_content import UpdateFormResponseContent
+ from .update_guardian_factor_duo_settings_response_content import UpdateGuardianFactorDuoSettingsResponseContent
+ from .update_guardian_factors_provider_push_notification_sns_response_content import (
+ UpdateGuardianFactorsProviderPushNotificationSnsResponseContent,
+ )
+ from .update_hook_response_content import UpdateHookResponseContent
+ from .update_hook_secret_request_content import UpdateHookSecretRequestContent
+ from .update_log_stream_response_content import UpdateLogStreamResponseContent
+ from .update_network_acl_response_content import UpdateNetworkAclResponseContent
+ from .update_organization_connection_response_content import UpdateOrganizationConnectionResponseContent
+ from .update_organization_discovery_domain_response_content import UpdateOrganizationDiscoveryDomainResponseContent
+ from .update_organization_response_content import UpdateOrganizationResponseContent
+ from .update_phone_template_response_content import UpdatePhoneTemplateResponseContent
+ from .update_resource_server_response_content import UpdateResourceServerResponseContent
+ from .update_risk_assessments_settings_new_device_response_content import (
+ UpdateRiskAssessmentsSettingsNewDeviceResponseContent,
+ )
+ from .update_risk_assessments_settings_response_content import UpdateRiskAssessmentsSettingsResponseContent
+ from .update_role_response_content import UpdateRoleResponseContent
+ from .update_rule_response_content import UpdateRuleResponseContent
+ from .update_scim_configuration_response_content import UpdateScimConfigurationResponseContent
+ from .update_self_service_profile_response_content import UpdateSelfServiceProfileResponseContent
+ from .update_session_response_content import UpdateSessionResponseContent
+ from .update_settings_response_content import UpdateSettingsResponseContent
+ from .update_suspicious_ip_throttling_settings_response_content import (
+ UpdateSuspiciousIpThrottlingSettingsResponseContent,
+ )
+ from .update_tenant_settings_response_content import UpdateTenantSettingsResponseContent
+ from .update_token_quota import UpdateTokenQuota
+ from .update_universal_login_template_request_content import UpdateUniversalLoginTemplateRequestContent
+ from .update_universal_login_template_request_content_template import (
+ UpdateUniversalLoginTemplateRequestContentTemplate,
+ )
+ from .update_user_attribute_profile_response_content import UpdateUserAttributeProfileResponseContent
+ from .update_user_authentication_method_response_content import UpdateUserAuthenticationMethodResponseContent
+ from .update_user_response_content import UpdateUserResponseContent
+ from .update_verifiable_credential_template_response_content import (
+ UpdateVerifiableCredentialTemplateResponseContent,
+ )
+ from .user_app_metadata_schema import UserAppMetadataSchema
+ from .user_attribute_profile import UserAttributeProfile
+ from .user_attribute_profile_id import UserAttributeProfileId
+ from .user_attribute_profile_name import UserAttributeProfileName
+ from .user_attribute_profile_oidc_mapping import UserAttributeProfileOidcMapping
+ from .user_attribute_profile_patch_user_id import UserAttributeProfilePatchUserId
+ from .user_attribute_profile_saml_mapping import UserAttributeProfileSamlMapping
+ from .user_attribute_profile_strategy_overrides import UserAttributeProfileStrategyOverrides
+ from .user_attribute_profile_strategy_overrides_mapping import UserAttributeProfileStrategyOverridesMapping
+ from .user_attribute_profile_strategy_overrides_user_id import UserAttributeProfileStrategyOverridesUserId
+ from .user_attribute_profile_strategy_overrides_user_id_mapping import (
+ UserAttributeProfileStrategyOverridesUserIdMapping,
+ )
+ from .user_attribute_profile_template import UserAttributeProfileTemplate
+ from .user_attribute_profile_template_item import UserAttributeProfileTemplateItem
+ from .user_attribute_profile_user_attribute_additional_properties import (
+ UserAttributeProfileUserAttributeAdditionalProperties,
+ )
+ from .user_attribute_profile_user_attributes import UserAttributeProfileUserAttributes
+ from .user_attribute_profile_user_id import UserAttributeProfileUserId
+ from .user_attribute_profile_user_id_oidc_mapping_enum import UserAttributeProfileUserIdOidcMappingEnum
+ from .user_attribute_profile_user_id_oidc_strategy_override_mapping import (
+ UserAttributeProfileUserIdOidcStrategyOverrideMapping,
+ )
+ from .user_attribute_profile_user_id_saml_mapping import UserAttributeProfileUserIdSamlMapping
+ from .user_authentication_method import UserAuthenticationMethod
+ from .user_authentication_method_properties import UserAuthenticationMethodProperties
+ from .user_authentication_method_properties_enum import UserAuthenticationMethodPropertiesEnum
+ from .user_block_identifier import UserBlockIdentifier
+ from .user_date_schema import UserDateSchema
+ from .user_enrollment_auth_method_enum import UserEnrollmentAuthMethodEnum
+ from .user_enrollment_status_enum import UserEnrollmentStatusEnum
+ from .user_grant import UserGrant
+ from .user_groups_response_schema import UserGroupsResponseSchema
+ from .user_id import UserId
+ from .user_identity import UserIdentity
+ from .user_identity_provider_enum import UserIdentityProviderEnum
+ from .user_identity_schema import UserIdentitySchema
+ from .user_list_log_offset_paginated_response_content import UserListLogOffsetPaginatedResponseContent
+ from .user_metadata import UserMetadata
+ from .user_metadata_schema import UserMetadataSchema
+ from .user_multifactor_provider_enum import UserMultifactorProviderEnum
+ from .user_permission_schema import UserPermissionSchema
+ from .user_profile_data import UserProfileData
+ from .user_response_schema import UserResponseSchema
+ from .username_allowed_types import UsernameAllowedTypes
+ from .username_attribute import UsernameAttribute
+ from .username_validation import UsernameValidation
+ from .users_enrollment import UsersEnrollment
+ from .verifiable_credential_template_response import VerifiableCredentialTemplateResponse
+ from .verification_method_enum import VerificationMethodEnum
+ from .verify_custom_domain_response_content import VerifyCustomDomainResponseContent
+ from .verify_email_ticket_response_content import VerifyEmailTicketResponseContent
+_dynamic_imports: typing.Dict[str, str] = {
+ "Action": ".action",
+ "ActionBase": ".action_base",
+ "ActionBinding": ".action_binding",
+ "ActionBindingRef": ".action_binding_ref",
+ "ActionBindingRefTypeEnum": ".action_binding_ref_type_enum",
+ "ActionBindingTypeEnum": ".action_binding_type_enum",
+ "ActionBindingWithRef": ".action_binding_with_ref",
+ "ActionBuildStatusEnum": ".action_build_status_enum",
+ "ActionDeployedVersion": ".action_deployed_version",
+ "ActionError": ".action_error",
+ "ActionExecutionResult": ".action_execution_result",
+ "ActionExecutionStatusEnum": ".action_execution_status_enum",
+ "ActionSecretRequest": ".action_secret_request",
+ "ActionSecretResponse": ".action_secret_response",
+ "ActionTrigger": ".action_trigger",
+ "ActionTriggerCompatibleTrigger": ".action_trigger_compatible_trigger",
+ "ActionTriggerTypeEnum": ".action_trigger_type_enum",
+ "ActionVersion": ".action_version",
+ "ActionVersionBuildStatusEnum": ".action_version_build_status_enum",
+ "ActionVersionDependency": ".action_version_dependency",
+ "AculClientFilter": ".acul_client_filter",
+ "AculClientFilterById": ".acul_client_filter_by_id",
+ "AculClientFilterByMetadata": ".acul_client_filter_by_metadata",
+ "AculClientMetadata": ".acul_client_metadata",
+ "AculConfigs": ".acul_configs",
+ "AculConfigsItem": ".acul_configs_item",
+ "AculContextConfiguration": ".acul_context_configuration",
+ "AculContextConfigurationItem": ".acul_context_configuration_item",
+ "AculContextEnum": ".acul_context_enum",
+ "AculDefaultHeadTagsDisabled": ".acul_default_head_tags_disabled",
+ "AculDomainFilter": ".acul_domain_filter",
+ "AculDomainFilterById": ".acul_domain_filter_by_id",
+ "AculDomainFilterByMetadata": ".acul_domain_filter_by_metadata",
+ "AculDomainMetadata": ".acul_domain_metadata",
+ "AculFilters": ".acul_filters",
+ "AculHeadTag": ".acul_head_tag",
+ "AculHeadTagAttributes": ".acul_head_tag_attributes",
+ "AculHeadTagContent": ".acul_head_tag_content",
+ "AculHeadTags": ".acul_head_tags",
+ "AculMatchTypeEnum": ".acul_match_type_enum",
+ "AculOrganizationFilter": ".acul_organization_filter",
+ "AculOrganizationFilterById": ".acul_organization_filter_by_id",
+ "AculOrganizationFilterByMetadata": ".acul_organization_filter_by_metadata",
+ "AculOrganizationMetadata": ".acul_organization_metadata",
+ "AculRenderingModeEnum": ".acul_rendering_mode_enum",
+ "AculResponseContent": ".acul_response_content",
+ "AculUsePageTemplate": ".acul_use_page_template",
+ "AddOrganizationConnectionResponseContent": ".add_organization_connection_response_content",
+ "AnomalyIpFormat": ".anomaly_ip_format",
+ "AppMetadata": ".app_metadata",
+ "AssessorsTypeEnum": ".assessors_type_enum",
+ "AssociateOrganizationClientGrantResponseContent": ".associate_organization_client_grant_response_content",
+ "AsyncApprovalNotificationsChannelsEnum": ".async_approval_notifications_channels_enum",
+ "AttackProtectionCaptchaArkoseResponseContent": ".attack_protection_captcha_arkose_response_content",
+ "AttackProtectionCaptchaAuthChallengeRequest": ".attack_protection_captcha_auth_challenge_request",
+ "AttackProtectionCaptchaAuthChallengeResponseContent": ".attack_protection_captcha_auth_challenge_response_content",
+ "AttackProtectionCaptchaFriendlyCaptchaResponseContent": ".attack_protection_captcha_friendly_captcha_response_content",
+ "AttackProtectionCaptchaHcaptchaResponseContent": ".attack_protection_captcha_hcaptcha_response_content",
+ "AttackProtectionCaptchaProviderId": ".attack_protection_captcha_provider_id",
+ "AttackProtectionCaptchaRecaptchaEnterpriseResponseContent": ".attack_protection_captcha_recaptcha_enterprise_response_content",
+ "AttackProtectionCaptchaRecaptchaV2ResponseContent": ".attack_protection_captcha_recaptcha_v_2_response_content",
+ "AttackProtectionCaptchaSimpleCaptchaResponseContent": ".attack_protection_captcha_simple_captcha_response_content",
+ "AttackProtectionUpdateCaptchaArkose": ".attack_protection_update_captcha_arkose",
+ "AttackProtectionUpdateCaptchaFriendlyCaptcha": ".attack_protection_update_captcha_friendly_captcha",
+ "AttackProtectionUpdateCaptchaHcaptcha": ".attack_protection_update_captcha_hcaptcha",
+ "AttackProtectionUpdateCaptchaRecaptchaEnterprise": ".attack_protection_update_captcha_recaptcha_enterprise",
+ "AttackProtectionUpdateCaptchaRecaptchaV2": ".attack_protection_update_captcha_recaptcha_v_2",
+ "AuthenticationMethodTypeEnum": ".authentication_method_type_enum",
+ "AuthenticationTypeEnum": ".authentication_type_enum",
+ "BotDetectionAllowlist": ".bot_detection_allowlist",
+ "BotDetectionChallengePolicyPasswordFlowEnum": ".bot_detection_challenge_policy_password_flow_enum",
+ "BotDetectionChallengePolicyPasswordResetFlowEnum": ".bot_detection_challenge_policy_password_reset_flow_enum",
+ "BotDetectionChallengePolicyPasswordlessFlowEnum": ".bot_detection_challenge_policy_passwordless_flow_enum",
+ "BotDetectionCidrBlock": ".bot_detection_cidr_block",
+ "BotDetectionIPv4": ".bot_detection_i_pv_4",
+ "BotDetectionIPv6": ".bot_detection_i_pv_6",
+ "BotDetectionIPv6CidrBlock": ".bot_detection_i_pv_6_cidr_block",
+ "BotDetectionIpAddressOrCidrBlock": ".bot_detection_ip_address_or_cidr_block",
+ "BotDetectionLevelEnum": ".bot_detection_level_enum",
+ "BotDetectionMonitoringModeEnabled": ".bot_detection_monitoring_mode_enabled",
+ "BrandingColors": ".branding_colors",
+ "BrandingFont": ".branding_font",
+ "BrandingPageBackground": ".branding_page_background",
+ "BrandingThemeBorders": ".branding_theme_borders",
+ "BrandingThemeBordersButtonsStyleEnum": ".branding_theme_borders_buttons_style_enum",
+ "BrandingThemeBordersInputsStyleEnum": ".branding_theme_borders_inputs_style_enum",
+ "BrandingThemeColors": ".branding_theme_colors",
+ "BrandingThemeColorsCaptchaWidgetThemeEnum": ".branding_theme_colors_captcha_widget_theme_enum",
+ "BrandingThemeFontBodyText": ".branding_theme_font_body_text",
+ "BrandingThemeFontButtonsText": ".branding_theme_font_buttons_text",
+ "BrandingThemeFontInputLabels": ".branding_theme_font_input_labels",
+ "BrandingThemeFontLinks": ".branding_theme_font_links",
+ "BrandingThemeFontLinksStyleEnum": ".branding_theme_font_links_style_enum",
+ "BrandingThemeFontSubtitle": ".branding_theme_font_subtitle",
+ "BrandingThemeFontTitle": ".branding_theme_font_title",
+ "BrandingThemeFonts": ".branding_theme_fonts",
+ "BrandingThemePageBackground": ".branding_theme_page_background",
+ "BrandingThemePageBackgroundPageLayoutEnum": ".branding_theme_page_background_page_layout_enum",
+ "BrandingThemeWidget": ".branding_theme_widget",
+ "BrandingThemeWidgetHeaderTextAlignmentEnum": ".branding_theme_widget_header_text_alignment_enum",
+ "BrandingThemeWidgetLogoPositionEnum": ".branding_theme_widget_logo_position_enum",
+ "BrandingThemeWidgetSocialButtonsLayoutEnum": ".branding_theme_widget_social_buttons_layout_enum",
+ "BreachedPasswordDetectionAdminNotificationFrequencyEnum": ".breached_password_detection_admin_notification_frequency_enum",
+ "BreachedPasswordDetectionMethodEnum": ".breached_password_detection_method_enum",
+ "BreachedPasswordDetectionPreChangePasswordShieldsEnum": ".breached_password_detection_pre_change_password_shields_enum",
+ "BreachedPasswordDetectionPreChangePasswordStage": ".breached_password_detection_pre_change_password_stage",
+ "BreachedPasswordDetectionPreUserRegistrationShieldsEnum": ".breached_password_detection_pre_user_registration_shields_enum",
+ "BreachedPasswordDetectionPreUserRegistrationStage": ".breached_password_detection_pre_user_registration_stage",
+ "BreachedPasswordDetectionShieldsEnum": ".breached_password_detection_shields_enum",
+ "BreachedPasswordDetectionStage": ".breached_password_detection_stage",
+ "BulkUpdateAculResponseContent": ".bulk_update_acul_response_content",
+ "ChangePasswordTicketIdentity": ".change_password_ticket_identity",
+ "ChangePasswordTicketResponseContent": ".change_password_ticket_response_content",
+ "Client": ".client",
+ "ClientAddonAws": ".client_addon_aws",
+ "ClientAddonAzureBlob": ".client_addon_azure_blob",
+ "ClientAddonAzureSb": ".client_addon_azure_sb",
+ "ClientAddonBox": ".client_addon_box",
+ "ClientAddonCloudBees": ".client_addon_cloud_bees",
+ "ClientAddonConcur": ".client_addon_concur",
+ "ClientAddonDropbox": ".client_addon_dropbox",
+ "ClientAddonEchoSign": ".client_addon_echo_sign",
+ "ClientAddonEgnyte": ".client_addon_egnyte",
+ "ClientAddonFirebase": ".client_addon_firebase",
+ "ClientAddonLayer": ".client_addon_layer",
+ "ClientAddonMscrm": ".client_addon_mscrm",
+ "ClientAddonNewRelic": ".client_addon_new_relic",
+ "ClientAddonOag": ".client_addon_oag",
+ "ClientAddonOffice365": ".client_addon_office_365",
+ "ClientAddonRms": ".client_addon_rms",
+ "ClientAddonSalesforce": ".client_addon_salesforce",
+ "ClientAddonSalesforceApi": ".client_addon_salesforce_api",
+ "ClientAddonSalesforceSandboxApi": ".client_addon_salesforce_sandbox_api",
+ "ClientAddonSaml": ".client_addon_saml",
+ "ClientAddonSamlMapping": ".client_addon_saml_mapping",
+ "ClientAddonSapapi": ".client_addon_sapapi",
+ "ClientAddonSentry": ".client_addon_sentry",
+ "ClientAddonSharePoint": ".client_addon_share_point",
+ "ClientAddonSharePointExternalUrl": ".client_addon_share_point_external_url",
+ "ClientAddonSlack": ".client_addon_slack",
+ "ClientAddonSpringCm": ".client_addon_spring_cm",
+ "ClientAddonSsoIntegration": ".client_addon_sso_integration",
+ "ClientAddonWams": ".client_addon_wams",
+ "ClientAddonWsFed": ".client_addon_ws_fed",
+ "ClientAddonZendesk": ".client_addon_zendesk",
+ "ClientAddonZoom": ".client_addon_zoom",
+ "ClientAddons": ".client_addons",
+ "ClientAppTypeEnum": ".client_app_type_enum",
+ "ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration": ".client_async_approval_notifications_channels_api_patch_configuration",
+ "ClientAsyncApprovalNotificationsChannelsApiPostConfiguration": ".client_async_approval_notifications_channels_api_post_configuration",
+ "ClientAuthenticationMethod": ".client_authentication_method",
+ "ClientAuthenticationMethodSelfSignedTlsClientAuth": ".client_authentication_method_self_signed_tls_client_auth",
+ "ClientAuthenticationMethodTlsClientAuth": ".client_authentication_method_tls_client_auth",
+ "ClientComplianceLevelEnum": ".client_compliance_level_enum",
+ "ClientCreateAuthenticationMethod": ".client_create_authentication_method",
+ "ClientCredential": ".client_credential",
+ "ClientCredentialAlgorithmEnum": ".client_credential_algorithm_enum",
+ "ClientCredentialTypeEnum": ".client_credential_type_enum",
+ "ClientDefaultOrganization": ".client_default_organization",
+ "ClientDefaultOrganizationFlowsEnum": ".client_default_organization_flows_enum",
+ "ClientEncryptionKey": ".client_encryption_key",
+ "ClientGrantAllowAnyOrganizationEnum": ".client_grant_allow_any_organization_enum",
+ "ClientGrantOrganizationNullableUsageEnum": ".client_grant_organization_nullable_usage_enum",
+ "ClientGrantOrganizationUsageEnum": ".client_grant_organization_usage_enum",
+ "ClientGrantResponseContent": ".client_grant_response_content",
+ "ClientGrantSubjectTypeEnum": ".client_grant_subject_type_enum",
+ "ClientJwtConfiguration": ".client_jwt_configuration",
+ "ClientJwtConfigurationScopes": ".client_jwt_configuration_scopes",
+ "ClientMetadata": ".client_metadata",
+ "ClientMobile": ".client_mobile",
+ "ClientMobileAndroid": ".client_mobile_android",
+ "ClientMobileiOs": ".client_mobilei_os",
+ "ClientOidcBackchannelLogoutInitiators": ".client_oidc_backchannel_logout_initiators",
+ "ClientOidcBackchannelLogoutInitiatorsEnum": ".client_oidc_backchannel_logout_initiators_enum",
+ "ClientOidcBackchannelLogoutInitiatorsModeEnum": ".client_oidc_backchannel_logout_initiators_mode_enum",
+ "ClientOidcBackchannelLogoutSessionMetadata": ".client_oidc_backchannel_logout_session_metadata",
+ "ClientOidcBackchannelLogoutSettings": ".client_oidc_backchannel_logout_settings",
+ "ClientOrganizationDiscoveryEnum": ".client_organization_discovery_enum",
+ "ClientOrganizationRequireBehaviorEnum": ".client_organization_require_behavior_enum",
+ "ClientOrganizationRequireBehaviorPatchEnum": ".client_organization_require_behavior_patch_enum",
+ "ClientOrganizationUsageEnum": ".client_organization_usage_enum",
+ "ClientOrganizationUsagePatchEnum": ".client_organization_usage_patch_enum",
+ "ClientRefreshTokenConfiguration": ".client_refresh_token_configuration",
+ "ClientSessionTransferAllowedAuthenticationMethodsEnum": ".client_session_transfer_allowed_authentication_methods_enum",
+ "ClientSessionTransferConfiguration": ".client_session_transfer_configuration",
+ "ClientSessionTransferDeviceBindingEnum": ".client_session_transfer_device_binding_enum",
+ "ClientSignedRequestObjectWithCredentialId": ".client_signed_request_object_with_credential_id",
+ "ClientSignedRequestObjectWithPublicKey": ".client_signed_request_object_with_public_key",
+ "ClientSigningKey": ".client_signing_key",
+ "ClientSigningKeys": ".client_signing_keys",
+ "ClientTokenEndpointAuthMethodEnum": ".client_token_endpoint_auth_method_enum",
+ "ClientTokenEndpointAuthMethodOrNullEnum": ".client_token_endpoint_auth_method_or_null_enum",
+ "ClientTokenExchangeConfiguration": ".client_token_exchange_configuration",
+ "ClientTokenExchangeConfigurationOrNull": ".client_token_exchange_configuration_or_null",
+ "ClientTokenExchangeTypeEnum": ".client_token_exchange_type_enum",
+ "ConnectedAccount": ".connected_account",
+ "ConnectedAccountAccessTypeEnum": ".connected_account_access_type_enum",
+ "ConnectionAcrValuesSupported": ".connection_acr_values_supported",
+ "ConnectionAllowedAudiencesGoogleOAuth2": ".connection_allowed_audiences_google_o_auth_2",
+ "ConnectionAppDomainAzureAd": ".connection_app_domain_azure_ad",
+ "ConnectionAttributeIdentifier": ".connection_attribute_identifier",
+ "ConnectionAttributeMapAttributes": ".connection_attribute_map_attributes",
+ "ConnectionAttributeMapOidc": ".connection_attribute_map_oidc",
+ "ConnectionAttributeMapOkta": ".connection_attribute_map_okta",
+ "ConnectionAttributeMapUserinfoScope": ".connection_attribute_map_userinfo_scope",
+ "ConnectionAttributes": ".connection_attributes",
+ "ConnectionAuthParamsAdditionalPropertiesOAuth2": ".connection_auth_params_additional_properties_o_auth_2",
+ "ConnectionAuthParamsMap": ".connection_auth_params_map",
+ "ConnectionAuthParamsOAuth2": ".connection_auth_params_o_auth_2",
+ "ConnectionAuthenticationMethods": ".connection_authentication_methods",
+ "ConnectionAuthenticationPurpose": ".connection_authentication_purpose",
+ "ConnectionAuthorizationEndpoint": ".connection_authorization_endpoint",
+ "ConnectionAuthorizationEndpointOAuth2": ".connection_authorization_endpoint_o_auth_2",
+ "ConnectionBruteForceProtection": ".connection_brute_force_protection",
+ "ConnectionClaimTypesSupported": ".connection_claim_types_supported",
+ "ConnectionClaimsLocalesSupported": ".connection_claims_locales_supported",
+ "ConnectionClaimsParameterSupported": ".connection_claims_parameter_supported",
+ "ConnectionClaimsSupported": ".connection_claims_supported",
+ "ConnectionClientId": ".connection_client_id",
+ "ConnectionClientIdAzureAd": ".connection_client_id_azure_ad",
+ "ConnectionClientIdGoogleOAuth2": ".connection_client_id_google_o_auth_2",
+ "ConnectionClientIdOAuth2": ".connection_client_id_o_auth_2",
+ "ConnectionClientIdOidc": ".connection_client_id_oidc",
+ "ConnectionClientSecret": ".connection_client_secret",
+ "ConnectionClientSecretAzureAd": ".connection_client_secret_azure_ad",
+ "ConnectionClientSecretGoogleOAuth2": ".connection_client_secret_google_o_auth_2",
+ "ConnectionClientSecretOAuth2": ".connection_client_secret_o_auth_2",
+ "ConnectionClientSecretOidc": ".connection_client_secret_oidc",
+ "ConnectionCommon": ".connection_common",
+ "ConnectionConfiguration": ".connection_configuration",
+ "ConnectionConnectedAccountsPurpose": ".connection_connected_accounts_purpose",
+ "ConnectionConnectionSettings": ".connection_connection_settings",
+ "ConnectionConnectionSettingsPkceEnum": ".connection_connection_settings_pkce_enum",
+ "ConnectionCustomHeadersOAuth2": ".connection_custom_headers_o_auth_2",
+ "ConnectionCustomScripts": ".connection_custom_scripts",
+ "ConnectionDisableSelfServiceChangePassword": ".connection_disable_self_service_change_password",
+ "ConnectionDisableSignup": ".connection_disable_signup",
+ "ConnectionDiscoveryUrl": ".connection_discovery_url",
+ "ConnectionDisplayName": ".connection_display_name",
+ "ConnectionDisplayValuesSupported": ".connection_display_values_supported",
+ "ConnectionDomainAliasesAzureAd": ".connection_domain_aliases_azure_ad",
+ "ConnectionDomainAliasesOne": ".connection_domain_aliases_one",
+ "ConnectionDomainOkta": ".connection_domain_okta",
+ "ConnectionEnableScriptContext": ".connection_enable_script_context",
+ "ConnectionEnabledClient": ".connection_enabled_client",
+ "ConnectionEnabledClients": ".connection_enabled_clients",
+ "ConnectionEnabledDatabaseCustomization": ".connection_enabled_database_customization",
+ "ConnectionEndSessionEndpoint": ".connection_end_session_endpoint",
+ "ConnectionEndSessionEndpointOAuth2": ".connection_end_session_endpoint_o_auth_2",
+ "ConnectionExtAdmin": ".connection_ext_admin",
+ "ConnectionExtAgreedTerms": ".connection_ext_agreed_terms",
+ "ConnectionExtAssignedPlans": ".connection_ext_assigned_plans",
+ "ConnectionExtGroups": ".connection_ext_groups",
+ "ConnectionExtIsSuspended": ".connection_ext_is_suspended",
+ "ConnectionExtProfile": ".connection_ext_profile",
+ "ConnectionFederatedConnectionsAccessTokens": ".connection_federated_connections_access_tokens",
+ "ConnectionFieldsMap": ".connection_fields_map",
+ "ConnectionForList": ".connection_for_list",
+ "ConnectionForOrganization": ".connection_for_organization",
+ "ConnectionFreeformScopesGoogleOAuth2": ".connection_freeform_scopes_google_o_auth_2",
+ "ConnectionGatewayAuthentication": ".connection_gateway_authentication",
+ "ConnectionGrantTypesSupported": ".connection_grant_types_supported",
+ "ConnectionHttpsUrlWithHttpFallback": ".connection_https_url_with_http_fallback",
+ "ConnectionIconUrl": ".connection_icon_url",
+ "ConnectionIconUrlAzureAd": ".connection_icon_url_azure_ad",
+ "ConnectionIconUrlGoogleOAuth2": ".connection_icon_url_google_o_auth_2",
+ "ConnectionId": ".connection_id",
+ "ConnectionIdTokenEncryptionAlgValuesSupported": ".connection_id_token_encryption_alg_values_supported",
+ "ConnectionIdTokenEncryptionEncValuesSupported": ".connection_id_token_encryption_enc_values_supported",
+ "ConnectionIdTokenSignedResponseAlgEnum": ".connection_id_token_signed_response_alg_enum",
+ "ConnectionIdTokenSignedResponseAlgs": ".connection_id_token_signed_response_algs",
+ "ConnectionIdTokenSigningAlgValuesSupported": ".connection_id_token_signing_alg_values_supported",
+ "ConnectionIdentifierPrecedence": ".connection_identifier_precedence",
+ "ConnectionIdentifierPrecedenceEnum": ".connection_identifier_precedence_enum",
+ "ConnectionIdentityApiAzureAd": ".connection_identity_api_azure_ad",
+ "ConnectionIdentityApiEnumAzureAd": ".connection_identity_api_enum_azure_ad",
+ "ConnectionIdentityProviderEnum": ".connection_identity_provider_enum",
+ "ConnectionImportMode": ".connection_import_mode",
+ "ConnectionIsDomainConnection": ".connection_is_domain_connection",
+ "ConnectionIssuer": ".connection_issuer",
+ "ConnectionJwksUri": ".connection_jwks_uri",
+ "ConnectionKey": ".connection_key",
+ "ConnectionKeyUseEnum": ".connection_key_use_enum",
+ "ConnectionMappingModeEnumOidc": ".connection_mapping_mode_enum_oidc",
+ "ConnectionMappingModeEnumOkta": ".connection_mapping_mode_enum_okta",
+ "ConnectionMaxGroupsToRetrieve": ".connection_max_groups_to_retrieve",
+ "ConnectionMfa": ".connection_mfa",
+ "ConnectionName": ".connection_name",
+ "ConnectionNamePrefixTemplate": ".connection_name_prefix_template",
+ "ConnectionNonPersistentAttrs": ".connection_non_persistent_attrs",
+ "ConnectionOpPolicyUri": ".connection_op_policy_uri",
+ "ConnectionOpTosUri": ".connection_op_tos_uri",
+ "ConnectionOptions": ".connection_options",
+ "ConnectionOptionsAd": ".connection_options_ad",
+ "ConnectionOptionsAdfs": ".connection_options_adfs",
+ "ConnectionOptionsAmazon": ".connection_options_amazon",
+ "ConnectionOptionsAol": ".connection_options_aol",
+ "ConnectionOptionsApple": ".connection_options_apple",
+ "ConnectionOptionsAuth0": ".connection_options_auth_0",
+ "ConnectionOptionsAuth0Oidc": ".connection_options_auth_0_oidc",
+ "ConnectionOptionsAzureAd": ".connection_options_azure_ad",
+ "ConnectionOptionsBaidu": ".connection_options_baidu",
+ "ConnectionOptionsBitbucket": ".connection_options_bitbucket",
+ "ConnectionOptionsBitly": ".connection_options_bitly",
+ "ConnectionOptionsBox": ".connection_options_box",
+ "ConnectionOptionsCommon": ".connection_options_common",
+ "ConnectionOptionsCommonOidc": ".connection_options_common_oidc",
+ "ConnectionOptionsCustom": ".connection_options_custom",
+ "ConnectionOptionsDaccount": ".connection_options_daccount",
+ "ConnectionOptionsDropbox": ".connection_options_dropbox",
+ "ConnectionOptionsDwolla": ".connection_options_dwolla",
+ "ConnectionOptionsEmail": ".connection_options_email",
+ "ConnectionOptionsEvernote": ".connection_options_evernote",
+ "ConnectionOptionsEvernoteCommon": ".connection_options_evernote_common",
+ "ConnectionOptionsEvernoteSandbox": ".connection_options_evernote_sandbox",
+ "ConnectionOptionsExact": ".connection_options_exact",
+ "ConnectionOptionsFacebook": ".connection_options_facebook",
+ "ConnectionOptionsFitbit": ".connection_options_fitbit",
+ "ConnectionOptionsFlickr": ".connection_options_flickr",
+ "ConnectionOptionsGitHub": ".connection_options_git_hub",
+ "ConnectionOptionsGoogleApps": ".connection_options_google_apps",
+ "ConnectionOptionsGoogleOAuth2": ".connection_options_google_o_auth_2",
+ "ConnectionOptionsInstagram": ".connection_options_instagram",
+ "ConnectionOptionsIp": ".connection_options_ip",
+ "ConnectionOptionsLine": ".connection_options_line",
+ "ConnectionOptionsLinkedin": ".connection_options_linkedin",
+ "ConnectionOptionsMiicard": ".connection_options_miicard",
+ "ConnectionOptionsOAuth1": ".connection_options_o_auth_1",
+ "ConnectionOptionsOAuth2": ".connection_options_o_auth_2",
+ "ConnectionOptionsOAuth2Common": ".connection_options_o_auth_2_common",
+ "ConnectionOptionsOffice365": ".connection_options_office_365",
+ "ConnectionOptionsOidc": ".connection_options_oidc",
+ "ConnectionOptionsOidcMetadata": ".connection_options_oidc_metadata",
+ "ConnectionOptionsOkta": ".connection_options_okta",
+ "ConnectionOptionsPaypal": ".connection_options_paypal",
+ "ConnectionOptionsPaypalSandbox": ".connection_options_paypal_sandbox",
+ "ConnectionOptionsPingFederate": ".connection_options_ping_federate",
+ "ConnectionOptionsPlanningCenter": ".connection_options_planning_center",
+ "ConnectionOptionsRenren": ".connection_options_renren",
+ "ConnectionOptionsSalesforce": ".connection_options_salesforce",
+ "ConnectionOptionsSalesforceCommon": ".connection_options_salesforce_common",
+ "ConnectionOptionsSalesforceCommunity": ".connection_options_salesforce_community",
+ "ConnectionOptionsSalesforceSandbox": ".connection_options_salesforce_sandbox",
+ "ConnectionOptionsSaml": ".connection_options_saml",
+ "ConnectionOptionsSharepoint": ".connection_options_sharepoint",
+ "ConnectionOptionsShop": ".connection_options_shop",
+ "ConnectionOptionsShopify": ".connection_options_shopify",
+ "ConnectionOptionsSms": ".connection_options_sms",
+ "ConnectionOptionsSoundcloud": ".connection_options_soundcloud",
+ "ConnectionOptionsTheCity": ".connection_options_the_city",
+ "ConnectionOptionsTheCitySandbox": ".connection_options_the_city_sandbox",
+ "ConnectionOptionsThirtySevenSignals": ".connection_options_thirty_seven_signals",
+ "ConnectionOptionsTwitter": ".connection_options_twitter",
+ "ConnectionOptionsUntappd": ".connection_options_untappd",
+ "ConnectionOptionsVkontakte": ".connection_options_vkontakte",
+ "ConnectionOptionsWeibo": ".connection_options_weibo",
+ "ConnectionOptionsWindowsLive": ".connection_options_windows_live",
+ "ConnectionOptionsWordpress": ".connection_options_wordpress",
+ "ConnectionOptionsYahoo": ".connection_options_yahoo",
+ "ConnectionOptionsYammer": ".connection_options_yammer",
+ "ConnectionOptionsYandex": ".connection_options_yandex",
+ "ConnectionPasskeyAuthenticationMethod": ".connection_passkey_authentication_method",
+ "ConnectionPasskeyChallengeUiEnum": ".connection_passkey_challenge_ui_enum",
+ "ConnectionPasskeyOptions": ".connection_passkey_options",
+ "ConnectionPasswordAuthenticationMethod": ".connection_password_authentication_method",
+ "ConnectionPasswordComplexityOptions": ".connection_password_complexity_options",
+ "ConnectionPasswordDictionaryOptions": ".connection_password_dictionary_options",
+ "ConnectionPasswordHistoryOptions": ".connection_password_history_options",
+ "ConnectionPasswordNoPersonalInfoOptions": ".connection_password_no_personal_info_options",
+ "ConnectionPasswordPolicyEnum": ".connection_password_policy_enum",
+ "ConnectionProfile": ".connection_profile",
+ "ConnectionProfileConfig": ".connection_profile_config",
+ "ConnectionProfileEnabledFeatures": ".connection_profile_enabled_features",
+ "ConnectionProfileId": ".connection_profile_id",
+ "ConnectionProfileName": ".connection_profile_name",
+ "ConnectionProfileOrganization": ".connection_profile_organization",
+ "ConnectionProfileOrganizationAssignMembershipOnLoginEnum": ".connection_profile_organization_assign_membership_on_login_enum",
+ "ConnectionProfileOrganizationShowAsButtonEnum": ".connection_profile_organization_show_as_button_enum",
+ "ConnectionProfileStrategyOverride": ".connection_profile_strategy_override",
+ "ConnectionProfileStrategyOverrides": ".connection_profile_strategy_overrides",
+ "ConnectionProfileStrategyOverridesConnectionConfig": ".connection_profile_strategy_overrides_connection_config",
+ "ConnectionProfileStrategyOverridesEnabledFeatures": ".connection_profile_strategy_overrides_enabled_features",
+ "ConnectionProfileTemplate": ".connection_profile_template",
+ "ConnectionProfileTemplateItem": ".connection_profile_template_item",
+ "ConnectionPropertiesOptions": ".connection_properties_options",
+ "ConnectionProvisioningTicket": ".connection_provisioning_ticket",
+ "ConnectionProvisioningTicketUrl": ".connection_provisioning_ticket_url",
+ "ConnectionRealmFallback": ".connection_realm_fallback",
+ "ConnectionRealms": ".connection_realms",
+ "ConnectionRegistrationEndpoint": ".connection_registration_endpoint",
+ "ConnectionRequestObjectEncryptionAlgValuesSupported": ".connection_request_object_encryption_alg_values_supported",
+ "ConnectionRequestObjectEncryptionEncValuesSupported": ".connection_request_object_encryption_enc_values_supported",
+ "ConnectionRequestObjectSigningAlgValuesSupported": ".connection_request_object_signing_alg_values_supported",
+ "ConnectionRequestParameterSupported": ".connection_request_parameter_supported",
+ "ConnectionRequestUriParameterSupported": ".connection_request_uri_parameter_supported",
+ "ConnectionRequireRequestUriRegistration": ".connection_require_request_uri_registration",
+ "ConnectionRequiresUsername": ".connection_requires_username",
+ "ConnectionResponseCommon": ".connection_response_common",
+ "ConnectionResponseContentAd": ".connection_response_content_ad",
+ "ConnectionResponseContentAdfs": ".connection_response_content_adfs",
+ "ConnectionResponseContentAmazon": ".connection_response_content_amazon",
+ "ConnectionResponseContentAol": ".connection_response_content_aol",
+ "ConnectionResponseContentApple": ".connection_response_content_apple",
+ "ConnectionResponseContentAuth0": ".connection_response_content_auth_0",
+ "ConnectionResponseContentAuth0Oidc": ".connection_response_content_auth_0_oidc",
+ "ConnectionResponseContentAzureAd": ".connection_response_content_azure_ad",
+ "ConnectionResponseContentBaidu": ".connection_response_content_baidu",
+ "ConnectionResponseContentBitbucket": ".connection_response_content_bitbucket",
+ "ConnectionResponseContentBitly": ".connection_response_content_bitly",
+ "ConnectionResponseContentBox": ".connection_response_content_box",
+ "ConnectionResponseContentCustom": ".connection_response_content_custom",
+ "ConnectionResponseContentDaccount": ".connection_response_content_daccount",
+ "ConnectionResponseContentDropbox": ".connection_response_content_dropbox",
+ "ConnectionResponseContentDwolla": ".connection_response_content_dwolla",
+ "ConnectionResponseContentEmail": ".connection_response_content_email",
+ "ConnectionResponseContentEvernote": ".connection_response_content_evernote",
+ "ConnectionResponseContentEvernoteSandbox": ".connection_response_content_evernote_sandbox",
+ "ConnectionResponseContentExact": ".connection_response_content_exact",
+ "ConnectionResponseContentFacebook": ".connection_response_content_facebook",
+ "ConnectionResponseContentFitbit": ".connection_response_content_fitbit",
+ "ConnectionResponseContentFlickr": ".connection_response_content_flickr",
+ "ConnectionResponseContentGitHub": ".connection_response_content_git_hub",
+ "ConnectionResponseContentGoogleApps": ".connection_response_content_google_apps",
+ "ConnectionResponseContentGoogleOAuth2": ".connection_response_content_google_o_auth_2",
+ "ConnectionResponseContentInstagram": ".connection_response_content_instagram",
+ "ConnectionResponseContentIp": ".connection_response_content_ip",
+ "ConnectionResponseContentLine": ".connection_response_content_line",
+ "ConnectionResponseContentLinkedin": ".connection_response_content_linkedin",
+ "ConnectionResponseContentMiicard": ".connection_response_content_miicard",
+ "ConnectionResponseContentOAuth1": ".connection_response_content_o_auth_1",
+ "ConnectionResponseContentOAuth2": ".connection_response_content_o_auth_2",
+ "ConnectionResponseContentOffice365": ".connection_response_content_office_365",
+ "ConnectionResponseContentOidc": ".connection_response_content_oidc",
+ "ConnectionResponseContentOkta": ".connection_response_content_okta",
+ "ConnectionResponseContentPaypal": ".connection_response_content_paypal",
+ "ConnectionResponseContentPaypalSandbox": ".connection_response_content_paypal_sandbox",
+ "ConnectionResponseContentPingFederate": ".connection_response_content_ping_federate",
+ "ConnectionResponseContentPlanningCenter": ".connection_response_content_planning_center",
+ "ConnectionResponseContentRenren": ".connection_response_content_renren",
+ "ConnectionResponseContentSalesforce": ".connection_response_content_salesforce",
+ "ConnectionResponseContentSalesforceCommunity": ".connection_response_content_salesforce_community",
+ "ConnectionResponseContentSalesforceSandbox": ".connection_response_content_salesforce_sandbox",
+ "ConnectionResponseContentSaml": ".connection_response_content_saml",
+ "ConnectionResponseContentSharepoint": ".connection_response_content_sharepoint",
+ "ConnectionResponseContentShop": ".connection_response_content_shop",
+ "ConnectionResponseContentShopify": ".connection_response_content_shopify",
+ "ConnectionResponseContentSms": ".connection_response_content_sms",
+ "ConnectionResponseContentSoundcloud": ".connection_response_content_soundcloud",
+ "ConnectionResponseContentTheCity": ".connection_response_content_the_city",
+ "ConnectionResponseContentTheCitySandbox": ".connection_response_content_the_city_sandbox",
+ "ConnectionResponseContentThirtySevenSignals": ".connection_response_content_thirty_seven_signals",
+ "ConnectionResponseContentTwitter": ".connection_response_content_twitter",
+ "ConnectionResponseContentUntappd": ".connection_response_content_untappd",
+ "ConnectionResponseContentVkontakte": ".connection_response_content_vkontakte",
+ "ConnectionResponseContentWeibo": ".connection_response_content_weibo",
+ "ConnectionResponseContentWindowsLive": ".connection_response_content_windows_live",
+ "ConnectionResponseContentWordpress": ".connection_response_content_wordpress",
+ "ConnectionResponseContentYahoo": ".connection_response_content_yahoo",
+ "ConnectionResponseContentYammer": ".connection_response_content_yammer",
+ "ConnectionResponseContentYandex": ".connection_response_content_yandex",
+ "ConnectionResponseModesSupported": ".connection_response_modes_supported",
+ "ConnectionResponseTypesSupported": ".connection_response_types_supported",
+ "ConnectionScopeArray": ".connection_scope_array",
+ "ConnectionScopeAzureAd": ".connection_scope_azure_ad",
+ "ConnectionScopeGoogleOAuth2": ".connection_scope_google_o_auth_2",
+ "ConnectionScopeItem": ".connection_scope_item",
+ "ConnectionScopeOAuth2": ".connection_scope_o_auth_2",
+ "ConnectionScopeOidc": ".connection_scope_oidc",
+ "ConnectionScopesSupported": ".connection_scopes_supported",
+ "ConnectionScriptsOAuth2": ".connection_scripts_o_auth_2",
+ "ConnectionSendBackChannelNonce": ".connection_send_back_channel_nonce",
+ "ConnectionServiceDocumentation": ".connection_service_documentation",
+ "ConnectionSetUserRootAttributesEnum": ".connection_set_user_root_attributes_enum",
+ "ConnectionShouldTrustEmailVerifiedConnectionEnum": ".connection_should_trust_email_verified_connection_enum",
+ "ConnectionShowAsButton": ".connection_show_as_button",
+ "ConnectionStrategyEnum": ".connection_strategy_enum",
+ "ConnectionStrategyVersionEnumAzureAd": ".connection_strategy_version_enum_azure_ad",
+ "ConnectionSubjectTypesSupported": ".connection_subject_types_supported",
+ "ConnectionTenantDomain": ".connection_tenant_domain",
+ "ConnectionTenantDomainAzureAdOne": ".connection_tenant_domain_azure_ad_one",
+ "ConnectionTenantIdAzureAd": ".connection_tenant_id_azure_ad",
+ "ConnectionThumbprints": ".connection_thumbprints",
+ "ConnectionTokenEndpoint": ".connection_token_endpoint",
+ "ConnectionTokenEndpointAuthMethodEnum": ".connection_token_endpoint_auth_method_enum",
+ "ConnectionTokenEndpointAuthMethodsSupported": ".connection_token_endpoint_auth_methods_supported",
+ "ConnectionTokenEndpointAuthSigningAlgEnum": ".connection_token_endpoint_auth_signing_alg_enum",
+ "ConnectionTokenEndpointAuthSigningAlgValuesSupported": ".connection_token_endpoint_auth_signing_alg_values_supported",
+ "ConnectionTokenEndpointOAuth2": ".connection_token_endpoint_o_auth_2",
+ "ConnectionTokenEndpointOidc": ".connection_token_endpoint_oidc",
+ "ConnectionTypeEnumOidc": ".connection_type_enum_oidc",
+ "ConnectionTypeEnumOkta": ".connection_type_enum_okta",
+ "ConnectionUiLocalesSupported": ".connection_ui_locales_supported",
+ "ConnectionUpstreamAdditionalProperties": ".connection_upstream_additional_properties",
+ "ConnectionUpstreamAlias": ".connection_upstream_alias",
+ "ConnectionUpstreamAliasEnum": ".connection_upstream_alias_enum",
+ "ConnectionUpstreamParams": ".connection_upstream_params",
+ "ConnectionUpstreamParamsAzureAd": ".connection_upstream_params_azure_ad",
+ "ConnectionUpstreamParamsOidc": ".connection_upstream_params_oidc",
+ "ConnectionUpstreamValue": ".connection_upstream_value",
+ "ConnectionUseCommonEndpointAzureAd": ".connection_use_common_endpoint_azure_ad",
+ "ConnectionUseridAttributeAzureAd": ".connection_userid_attribute_azure_ad",
+ "ConnectionUseridAttributeEnumAzureAd": ".connection_userid_attribute_enum_azure_ad",
+ "ConnectionUserinfoEncryptionAlgValuesSupported": ".connection_userinfo_encryption_alg_values_supported",
+ "ConnectionUserinfoEncryptionEncValuesSupported": ".connection_userinfo_encryption_enc_values_supported",
+ "ConnectionUserinfoEndpoint": ".connection_userinfo_endpoint",
+ "ConnectionUserinfoEndpointOidc": ".connection_userinfo_endpoint_oidc",
+ "ConnectionUserinfoSigningAlgValuesSupported": ".connection_userinfo_signing_alg_values_supported",
+ "ConnectionUsernameValidationOptions": ".connection_username_validation_options",
+ "ConnectionValidationOptions": ".connection_validation_options",
+ "ConnectionWaadProtocol": ".connection_waad_protocol",
+ "ConnectionWaadProtocolEnumAzureAd": ".connection_waad_protocol_enum_azure_ad",
+ "ConnectionsMetadata": ".connections_metadata",
+ "CreateActionResponseContent": ".create_action_response_content",
+ "CreateBrandingPhoneProviderResponseContent": ".create_branding_phone_provider_response_content",
+ "CreateBrandingThemeResponseContent": ".create_branding_theme_response_content",
+ "CreateClientGrantResponseContent": ".create_client_grant_response_content",
+ "CreateClientResponseContent": ".create_client_response_content",
+ "CreateConnectionCommon": ".create_connection_common",
+ "CreateConnectionProfileResponseContent": ".create_connection_profile_response_content",
+ "CreateConnectionRequestContentAd": ".create_connection_request_content_ad",
+ "CreateConnectionRequestContentAdfs": ".create_connection_request_content_adfs",
+ "CreateConnectionRequestContentAmazon": ".create_connection_request_content_amazon",
+ "CreateConnectionRequestContentAol": ".create_connection_request_content_aol",
+ "CreateConnectionRequestContentApple": ".create_connection_request_content_apple",
+ "CreateConnectionRequestContentAuth0": ".create_connection_request_content_auth_0",
+ "CreateConnectionRequestContentAuth0Oidc": ".create_connection_request_content_auth_0_oidc",
+ "CreateConnectionRequestContentAzureAd": ".create_connection_request_content_azure_ad",
+ "CreateConnectionRequestContentBaidu": ".create_connection_request_content_baidu",
+ "CreateConnectionRequestContentBitbucket": ".create_connection_request_content_bitbucket",
+ "CreateConnectionRequestContentBitly": ".create_connection_request_content_bitly",
+ "CreateConnectionRequestContentBox": ".create_connection_request_content_box",
+ "CreateConnectionRequestContentCustom": ".create_connection_request_content_custom",
+ "CreateConnectionRequestContentDaccount": ".create_connection_request_content_daccount",
+ "CreateConnectionRequestContentDropbox": ".create_connection_request_content_dropbox",
+ "CreateConnectionRequestContentDwolla": ".create_connection_request_content_dwolla",
+ "CreateConnectionRequestContentEmail": ".create_connection_request_content_email",
+ "CreateConnectionRequestContentEvernote": ".create_connection_request_content_evernote",
+ "CreateConnectionRequestContentEvernoteSandbox": ".create_connection_request_content_evernote_sandbox",
+ "CreateConnectionRequestContentExact": ".create_connection_request_content_exact",
+ "CreateConnectionRequestContentFacebook": ".create_connection_request_content_facebook",
+ "CreateConnectionRequestContentFitbit": ".create_connection_request_content_fitbit",
+ "CreateConnectionRequestContentFlickr": ".create_connection_request_content_flickr",
+ "CreateConnectionRequestContentGitHub": ".create_connection_request_content_git_hub",
+ "CreateConnectionRequestContentGoogleApps": ".create_connection_request_content_google_apps",
+ "CreateConnectionRequestContentGoogleOAuth2": ".create_connection_request_content_google_o_auth_2",
+ "CreateConnectionRequestContentInstagram": ".create_connection_request_content_instagram",
+ "CreateConnectionRequestContentIp": ".create_connection_request_content_ip",
+ "CreateConnectionRequestContentLine": ".create_connection_request_content_line",
+ "CreateConnectionRequestContentLinkedin": ".create_connection_request_content_linkedin",
+ "CreateConnectionRequestContentMiicard": ".create_connection_request_content_miicard",
+ "CreateConnectionRequestContentOAuth1": ".create_connection_request_content_o_auth_1",
+ "CreateConnectionRequestContentOAuth2": ".create_connection_request_content_o_auth_2",
+ "CreateConnectionRequestContentOffice365": ".create_connection_request_content_office_365",
+ "CreateConnectionRequestContentOidc": ".create_connection_request_content_oidc",
+ "CreateConnectionRequestContentOkta": ".create_connection_request_content_okta",
+ "CreateConnectionRequestContentPaypal": ".create_connection_request_content_paypal",
+ "CreateConnectionRequestContentPaypalSandbox": ".create_connection_request_content_paypal_sandbox",
+ "CreateConnectionRequestContentPingFederate": ".create_connection_request_content_ping_federate",
+ "CreateConnectionRequestContentPlanningCenter": ".create_connection_request_content_planning_center",
+ "CreateConnectionRequestContentRenren": ".create_connection_request_content_renren",
+ "CreateConnectionRequestContentSalesforce": ".create_connection_request_content_salesforce",
+ "CreateConnectionRequestContentSalesforceCommunity": ".create_connection_request_content_salesforce_community",
+ "CreateConnectionRequestContentSalesforceSandbox": ".create_connection_request_content_salesforce_sandbox",
+ "CreateConnectionRequestContentSaml": ".create_connection_request_content_saml",
+ "CreateConnectionRequestContentSharepoint": ".create_connection_request_content_sharepoint",
+ "CreateConnectionRequestContentShop": ".create_connection_request_content_shop",
+ "CreateConnectionRequestContentShopify": ".create_connection_request_content_shopify",
+ "CreateConnectionRequestContentSms": ".create_connection_request_content_sms",
+ "CreateConnectionRequestContentSoundcloud": ".create_connection_request_content_soundcloud",
+ "CreateConnectionRequestContentTheCity": ".create_connection_request_content_the_city",
+ "CreateConnectionRequestContentTheCitySandbox": ".create_connection_request_content_the_city_sandbox",
+ "CreateConnectionRequestContentThirtySevenSignals": ".create_connection_request_content_thirty_seven_signals",
+ "CreateConnectionRequestContentTwitter": ".create_connection_request_content_twitter",
+ "CreateConnectionRequestContentUntappd": ".create_connection_request_content_untappd",
+ "CreateConnectionRequestContentVkontakte": ".create_connection_request_content_vkontakte",
+ "CreateConnectionRequestContentWeibo": ".create_connection_request_content_weibo",
+ "CreateConnectionRequestContentWindowsLive": ".create_connection_request_content_windows_live",
+ "CreateConnectionRequestContentWordpress": ".create_connection_request_content_wordpress",
+ "CreateConnectionRequestContentYahoo": ".create_connection_request_content_yahoo",
+ "CreateConnectionRequestContentYammer": ".create_connection_request_content_yammer",
+ "CreateConnectionRequestContentYandex": ".create_connection_request_content_yandex",
+ "CreateConnectionResponseContent": ".create_connection_response_content",
+ "CreateCustomDomainResponseContent": ".create_custom_domain_response_content",
+ "CreateDirectoryProvisioningRequestContent": ".create_directory_provisioning_request_content",
+ "CreateDirectoryProvisioningResponseContent": ".create_directory_provisioning_response_content",
+ "CreateDirectorySynchronizationResponseContent": ".create_directory_synchronization_response_content",
+ "CreateEmailProviderResponseContent": ".create_email_provider_response_content",
+ "CreateEmailTemplateResponseContent": ".create_email_template_response_content",
+ "CreateEncryptionKeyPublicWrappingResponseContent": ".create_encryption_key_public_wrapping_response_content",
+ "CreateEncryptionKeyResponseContent": ".create_encryption_key_response_content",
+ "CreateEncryptionKeyType": ".create_encryption_key_type",
+ "CreateEventStreamActionRequestContent": ".create_event_stream_action_request_content",
+ "CreateEventStreamEventBridgeRequestContent": ".create_event_stream_event_bridge_request_content",
+ "CreateEventStreamRedeliveryResponseContent": ".create_event_stream_redelivery_response_content",
+ "CreateEventStreamResponseContent": ".create_event_stream_response_content",
+ "CreateEventStreamTestEventResponseContent": ".create_event_stream_test_event_response_content",
+ "CreateEventStreamWebHookRequestContent": ".create_event_stream_web_hook_request_content",
+ "CreateExportUsersFields": ".create_export_users_fields",
+ "CreateExportUsersResponseContent": ".create_export_users_response_content",
+ "CreateFlowResponseContent": ".create_flow_response_content",
+ "CreateFlowsVaultConnectionActivecampaign": ".create_flows_vault_connection_activecampaign",
+ "CreateFlowsVaultConnectionActivecampaignApiKey": ".create_flows_vault_connection_activecampaign_api_key",
+ "CreateFlowsVaultConnectionActivecampaignUninitialized": ".create_flows_vault_connection_activecampaign_uninitialized",
+ "CreateFlowsVaultConnectionAirtable": ".create_flows_vault_connection_airtable",
+ "CreateFlowsVaultConnectionAirtableApiKey": ".create_flows_vault_connection_airtable_api_key",
+ "CreateFlowsVaultConnectionAirtableUninitialized": ".create_flows_vault_connection_airtable_uninitialized",
+ "CreateFlowsVaultConnectionAuth0": ".create_flows_vault_connection_auth_0",
+ "CreateFlowsVaultConnectionAuth0OauthApp": ".create_flows_vault_connection_auth_0_oauth_app",
+ "CreateFlowsVaultConnectionAuth0Uninitialized": ".create_flows_vault_connection_auth_0_uninitialized",
+ "CreateFlowsVaultConnectionBigquery": ".create_flows_vault_connection_bigquery",
+ "CreateFlowsVaultConnectionBigqueryJwt": ".create_flows_vault_connection_bigquery_jwt",
+ "CreateFlowsVaultConnectionBigqueryUninitialized": ".create_flows_vault_connection_bigquery_uninitialized",
+ "CreateFlowsVaultConnectionClearbit": ".create_flows_vault_connection_clearbit",
+ "CreateFlowsVaultConnectionClearbitApiKey": ".create_flows_vault_connection_clearbit_api_key",
+ "CreateFlowsVaultConnectionClearbitUninitialized": ".create_flows_vault_connection_clearbit_uninitialized",
+ "CreateFlowsVaultConnectionDocusign": ".create_flows_vault_connection_docusign",
+ "CreateFlowsVaultConnectionDocusignOauthCode": ".create_flows_vault_connection_docusign_oauth_code",
+ "CreateFlowsVaultConnectionDocusignUninitialized": ".create_flows_vault_connection_docusign_uninitialized",
+ "CreateFlowsVaultConnectionGoogleSheets": ".create_flows_vault_connection_google_sheets",
+ "CreateFlowsVaultConnectionGoogleSheetsOauthCode": ".create_flows_vault_connection_google_sheets_oauth_code",
+ "CreateFlowsVaultConnectionGoogleSheetsUninitialized": ".create_flows_vault_connection_google_sheets_uninitialized",
+ "CreateFlowsVaultConnectionHttp": ".create_flows_vault_connection_http",
+ "CreateFlowsVaultConnectionHttpBearer": ".create_flows_vault_connection_http_bearer",
+ "CreateFlowsVaultConnectionHttpUninitialized": ".create_flows_vault_connection_http_uninitialized",
+ "CreateFlowsVaultConnectionHubspot": ".create_flows_vault_connection_hubspot",
+ "CreateFlowsVaultConnectionHubspotApiKey": ".create_flows_vault_connection_hubspot_api_key",
+ "CreateFlowsVaultConnectionHubspotOauthCode": ".create_flows_vault_connection_hubspot_oauth_code",
+ "CreateFlowsVaultConnectionHubspotUninitialized": ".create_flows_vault_connection_hubspot_uninitialized",
+ "CreateFlowsVaultConnectionJwt": ".create_flows_vault_connection_jwt",
+ "CreateFlowsVaultConnectionJwtJwt": ".create_flows_vault_connection_jwt_jwt",
+ "CreateFlowsVaultConnectionJwtUninitialized": ".create_flows_vault_connection_jwt_uninitialized",
+ "CreateFlowsVaultConnectionMailchimp": ".create_flows_vault_connection_mailchimp",
+ "CreateFlowsVaultConnectionMailchimpApiKey": ".create_flows_vault_connection_mailchimp_api_key",
+ "CreateFlowsVaultConnectionMailchimpOauthCode": ".create_flows_vault_connection_mailchimp_oauth_code",
+ "CreateFlowsVaultConnectionMailchimpUninitialized": ".create_flows_vault_connection_mailchimp_uninitialized",
+ "CreateFlowsVaultConnectionMailjet": ".create_flows_vault_connection_mailjet",
+ "CreateFlowsVaultConnectionMailjetApiKey": ".create_flows_vault_connection_mailjet_api_key",
+ "CreateFlowsVaultConnectionMailjetUninitialized": ".create_flows_vault_connection_mailjet_uninitialized",
+ "CreateFlowsVaultConnectionPipedrive": ".create_flows_vault_connection_pipedrive",
+ "CreateFlowsVaultConnectionPipedriveOauthCode": ".create_flows_vault_connection_pipedrive_oauth_code",
+ "CreateFlowsVaultConnectionPipedriveToken": ".create_flows_vault_connection_pipedrive_token",
+ "CreateFlowsVaultConnectionPipedriveUninitialized": ".create_flows_vault_connection_pipedrive_uninitialized",
+ "CreateFlowsVaultConnectionRequestContent": ".create_flows_vault_connection_request_content",
+ "CreateFlowsVaultConnectionResponseContent": ".create_flows_vault_connection_response_content",
+ "CreateFlowsVaultConnectionSalesforce": ".create_flows_vault_connection_salesforce",
+ "CreateFlowsVaultConnectionSalesforceOauthCode": ".create_flows_vault_connection_salesforce_oauth_code",
+ "CreateFlowsVaultConnectionSalesforceUninitialized": ".create_flows_vault_connection_salesforce_uninitialized",
+ "CreateFlowsVaultConnectionSendgrid": ".create_flows_vault_connection_sendgrid",
+ "CreateFlowsVaultConnectionSendgridApiKey": ".create_flows_vault_connection_sendgrid_api_key",
+ "CreateFlowsVaultConnectionSendgridUninitialized": ".create_flows_vault_connection_sendgrid_uninitialized",
+ "CreateFlowsVaultConnectionSlack": ".create_flows_vault_connection_slack",
+ "CreateFlowsVaultConnectionSlackOauthCode": ".create_flows_vault_connection_slack_oauth_code",
+ "CreateFlowsVaultConnectionSlackUninitialized": ".create_flows_vault_connection_slack_uninitialized",
+ "CreateFlowsVaultConnectionSlackWebhook": ".create_flows_vault_connection_slack_webhook",
+ "CreateFlowsVaultConnectionStripe": ".create_flows_vault_connection_stripe",
+ "CreateFlowsVaultConnectionStripeKeyPair": ".create_flows_vault_connection_stripe_key_pair",
+ "CreateFlowsVaultConnectionStripeOauthCode": ".create_flows_vault_connection_stripe_oauth_code",
+ "CreateFlowsVaultConnectionStripeUninitialized": ".create_flows_vault_connection_stripe_uninitialized",
+ "CreateFlowsVaultConnectionTelegram": ".create_flows_vault_connection_telegram",
+ "CreateFlowsVaultConnectionTelegramToken": ".create_flows_vault_connection_telegram_token",
+ "CreateFlowsVaultConnectionTelegramUninitialized": ".create_flows_vault_connection_telegram_uninitialized",
+ "CreateFlowsVaultConnectionTwilio": ".create_flows_vault_connection_twilio",
+ "CreateFlowsVaultConnectionTwilioApiKey": ".create_flows_vault_connection_twilio_api_key",
+ "CreateFlowsVaultConnectionTwilioUninitialized": ".create_flows_vault_connection_twilio_uninitialized",
+ "CreateFlowsVaultConnectionWhatsapp": ".create_flows_vault_connection_whatsapp",
+ "CreateFlowsVaultConnectionWhatsappToken": ".create_flows_vault_connection_whatsapp_token",
+ "CreateFlowsVaultConnectionWhatsappUninitialized": ".create_flows_vault_connection_whatsapp_uninitialized",
+ "CreateFlowsVaultConnectionZapier": ".create_flows_vault_connection_zapier",
+ "CreateFlowsVaultConnectionZapierUninitialized": ".create_flows_vault_connection_zapier_uninitialized",
+ "CreateFlowsVaultConnectionZapierWebhook": ".create_flows_vault_connection_zapier_webhook",
+ "CreateFormResponseContent": ".create_form_response_content",
+ "CreateGuardianEnrollmentTicketResponseContent": ".create_guardian_enrollment_ticket_response_content",
+ "CreateHookResponseContent": ".create_hook_response_content",
+ "CreateHookSecretRequestContent": ".create_hook_secret_request_content",
+ "CreateImportUsersResponseContent": ".create_import_users_response_content",
+ "CreateLogStreamDatadogRequestBody": ".create_log_stream_datadog_request_body",
+ "CreateLogStreamEventBridgeRequestBody": ".create_log_stream_event_bridge_request_body",
+ "CreateLogStreamEventGridRequestBody": ".create_log_stream_event_grid_request_body",
+ "CreateLogStreamHttpRequestBody": ".create_log_stream_http_request_body",
+ "CreateLogStreamMixpanelRequestBody": ".create_log_stream_mixpanel_request_body",
+ "CreateLogStreamRequestContent": ".create_log_stream_request_content",
+ "CreateLogStreamResponseContent": ".create_log_stream_response_content",
+ "CreateLogStreamSegmentRequestBody": ".create_log_stream_segment_request_body",
+ "CreateLogStreamSplunkRequestBody": ".create_log_stream_splunk_request_body",
+ "CreateLogStreamSumoRequestBody": ".create_log_stream_sumo_request_body",
+ "CreateOrganizationDiscoveryDomainResponseContent": ".create_organization_discovery_domain_response_content",
+ "CreateOrganizationInvitationResponseContent": ".create_organization_invitation_response_content",
+ "CreateOrganizationResponseContent": ".create_organization_response_content",
+ "CreatePhoneProviderSendTestResponseContent": ".create_phone_provider_send_test_response_content",
+ "CreatePhoneTemplateResponseContent": ".create_phone_template_response_content",
+ "CreatePhoneTemplateTestNotificationResponseContent": ".create_phone_template_test_notification_response_content",
+ "CreatePublicKeyDeviceCredentialResponseContent": ".create_public_key_device_credential_response_content",
+ "CreateResourceServerResponseContent": ".create_resource_server_response_content",
+ "CreateRoleResponseContent": ".create_role_response_content",
+ "CreateRuleResponseContent": ".create_rule_response_content",
+ "CreateScimConfigurationRequestContent": ".create_scim_configuration_request_content",
+ "CreateScimConfigurationResponseContent": ".create_scim_configuration_response_content",
+ "CreateScimTokenResponseContent": ".create_scim_token_response_content",
+ "CreateSelfServiceProfileResponseContent": ".create_self_service_profile_response_content",
+ "CreateSelfServiceProfileSsoTicketResponseContent": ".create_self_service_profile_sso_ticket_response_content",
+ "CreateTokenExchangeProfileResponseContent": ".create_token_exchange_profile_response_content",
+ "CreateTokenQuota": ".create_token_quota",
+ "CreateUserAttributeProfileResponseContent": ".create_user_attribute_profile_response_content",
+ "CreateUserAuthenticationMethodResponseContent": ".create_user_authentication_method_response_content",
+ "CreateUserResponseContent": ".create_user_response_content",
+ "CreateVerifiableCredentialTemplateResponseContent": ".create_verifiable_credential_template_response_content",
+ "CreateVerificationEmailResponseContent": ".create_verification_email_response_content",
+ "CreatedAuthenticationMethodTypeEnum": ".created_authentication_method_type_enum",
+ "CreatedUserAuthenticationMethodTypeEnum": ".created_user_authentication_method_type_enum",
+ "CredentialId": ".credential_id",
+ "CustomDomain": ".custom_domain",
+ "CustomDomainCustomClientIpHeader": ".custom_domain_custom_client_ip_header",
+ "CustomDomainCustomClientIpHeaderEnum": ".custom_domain_custom_client_ip_header_enum",
+ "CustomDomainProvisioningTypeEnum": ".custom_domain_provisioning_type_enum",
+ "CustomDomainStatusFilterEnum": ".custom_domain_status_filter_enum",
+ "CustomDomainTlsPolicyEnum": ".custom_domain_tls_policy_enum",
+ "CustomDomainTypeEnum": ".custom_domain_type_enum",
+ "CustomDomainVerificationMethodEnum": ".custom_domain_verification_method_enum",
+ "CustomProviderConfiguration": ".custom_provider_configuration",
+ "CustomProviderCredentials": ".custom_provider_credentials",
+ "CustomProviderDeliveryMethodEnum": ".custom_provider_delivery_method_enum",
+ "CustomSigningKeyAlgorithmEnum": ".custom_signing_key_algorithm_enum",
+ "CustomSigningKeyCurveEnum": ".custom_signing_key_curve_enum",
+ "CustomSigningKeyJwk": ".custom_signing_key_jwk",
+ "CustomSigningKeyOperationEnum": ".custom_signing_key_operation_enum",
+ "CustomSigningKeyTypeEnum": ".custom_signing_key_type_enum",
+ "CustomSigningKeyUseEnum": ".custom_signing_key_use_enum",
+ "DailyStats": ".daily_stats",
+ "DefaultTokenQuota": ".default_token_quota",
+ "DeleteHookSecretRequestContent": ".delete_hook_secret_request_content",
+ "DeleteUserIdentityResponseContent": ".delete_user_identity_response_content",
+ "DeleteUserIdentityResponseContentItem": ".delete_user_identity_response_content_item",
+ "DeployActionResponseContent": ".deploy_action_response_content",
+ "DeployActionVersionRequestBodyParams": ".deploy_action_version_request_body_params",
+ "DeployActionVersionRequestContent": ".deploy_action_version_request_content",
+ "DeployActionVersionResponseContent": ".deploy_action_version_response_content",
+ "DeviceCredential": ".device_credential",
+ "DeviceCredentialPublicKeyTypeEnum": ".device_credential_public_key_type_enum",
+ "DeviceCredentialTypeEnum": ".device_credential_type_enum",
+ "DirectoryProvisioningMappingItem": ".directory_provisioning_mapping_item",
+ "DomainCertificate": ".domain_certificate",
+ "DomainCertificateAuthorityEnum": ".domain_certificate_authority_enum",
+ "DomainCertificateStatusEnum": ".domain_certificate_status_enum",
+ "DomainMetadata": ".domain_metadata",
+ "DomainVerification": ".domain_verification",
+ "DomainVerificationMethod": ".domain_verification_method",
+ "DomainVerificationMethodNameEnum": ".domain_verification_method_name_enum",
+ "DomainVerificationStatusEnum": ".domain_verification_status_enum",
+ "EmailAttribute": ".email_attribute",
+ "EmailMailgunRegionEnum": ".email_mailgun_region_enum",
+ "EmailProviderCredentials": ".email_provider_credentials",
+ "EmailProviderCredentialsSchema": ".email_provider_credentials_schema",
+ "EmailProviderCredentialsSchemaAccessKeyId": ".email_provider_credentials_schema_access_key_id",
+ "EmailProviderCredentialsSchemaApiKey": ".email_provider_credentials_schema_api_key",
+ "EmailProviderCredentialsSchemaClientId": ".email_provider_credentials_schema_client_id",
+ "EmailProviderCredentialsSchemaConnectionString": ".email_provider_credentials_schema_connection_string",
+ "EmailProviderCredentialsSchemaSmtpHost": ".email_provider_credentials_schema_smtp_host",
+ "EmailProviderCredentialsSchemaThree": ".email_provider_credentials_schema_three",
+ "EmailProviderCredentialsSchemaZero": ".email_provider_credentials_schema_zero",
+ "EmailProviderNameEnum": ".email_provider_name_enum",
+ "EmailProviderSettings": ".email_provider_settings",
+ "EmailSmtpHost": ".email_smtp_host",
+ "EmailSparkPostRegionEnum": ".email_spark_post_region_enum",
+ "EmailSpecificProviderSettingsWithAdditionalProperties": ".email_specific_provider_settings_with_additional_properties",
+ "EmailTemplateNameEnum": ".email_template_name_enum",
+ "EnabledFeaturesEnum": ".enabled_features_enum",
+ "EncryptionKey": ".encryption_key",
+ "EncryptionKeyPublicWrappingAlgorithm": ".encryption_key_public_wrapping_algorithm",
+ "EncryptionKeyState": ".encryption_key_state",
+ "EncryptionKeyType": ".encryption_key_type",
+ "EventStreamActionConfiguration": ".event_stream_action_configuration",
+ "EventStreamActionDestination": ".event_stream_action_destination",
+ "EventStreamActionDestinationTypeEnum": ".event_stream_action_destination_type_enum",
+ "EventStreamActionResponseContent": ".event_stream_action_response_content",
+ "EventStreamCloudEvent": ".event_stream_cloud_event",
+ "EventStreamDelivery": ".event_stream_delivery",
+ "EventStreamDeliveryAttempt": ".event_stream_delivery_attempt",
+ "EventStreamDeliveryEventTypeEnum": ".event_stream_delivery_event_type_enum",
+ "EventStreamDeliveryStatusEnum": ".event_stream_delivery_status_enum",
+ "EventStreamDestinationPatch": ".event_stream_destination_patch",
+ "EventStreamEventBridgeAwsRegionEnum": ".event_stream_event_bridge_aws_region_enum",
+ "EventStreamEventBridgeConfiguration": ".event_stream_event_bridge_configuration",
+ "EventStreamEventBridgeDestination": ".event_stream_event_bridge_destination",
+ "EventStreamEventBridgeDestinationTypeEnum": ".event_stream_event_bridge_destination_type_enum",
+ "EventStreamEventBridgeResponseContent": ".event_stream_event_bridge_response_content",
+ "EventStreamEventTypeEnum": ".event_stream_event_type_enum",
+ "EventStreamResponseContent": ".event_stream_response_content",
+ "EventStreamStatusEnum": ".event_stream_status_enum",
+ "EventStreamSubscription": ".event_stream_subscription",
+ "EventStreamTestEventTypeEnum": ".event_stream_test_event_type_enum",
+ "EventStreamWebhookAuthorizationResponse": ".event_stream_webhook_authorization_response",
+ "EventStreamWebhookBasicAuth": ".event_stream_webhook_basic_auth",
+ "EventStreamWebhookBasicAuthMethodEnum": ".event_stream_webhook_basic_auth_method_enum",
+ "EventStreamWebhookBearerAuth": ".event_stream_webhook_bearer_auth",
+ "EventStreamWebhookBearerAuthMethodEnum": ".event_stream_webhook_bearer_auth_method_enum",
+ "EventStreamWebhookConfiguration": ".event_stream_webhook_configuration",
+ "EventStreamWebhookDestination": ".event_stream_webhook_destination",
+ "EventStreamWebhookDestinationTypeEnum": ".event_stream_webhook_destination_type_enum",
+ "EventStreamWebhookResponseContent": ".event_stream_webhook_response_content",
+ "ExpressConfiguration": ".express_configuration",
+ "ExpressConfigurationOrNull": ".express_configuration_or_null",
+ "ExtensibilityEmailProviderCredentials": ".extensibility_email_provider_credentials",
+ "FederatedConnectionTokenSet": ".federated_connection_token_set",
+ "FlowAction": ".flow_action",
+ "FlowActionActivecampaign": ".flow_action_activecampaign",
+ "FlowActionActivecampaignListContacts": ".flow_action_activecampaign_list_contacts",
+ "FlowActionActivecampaignListContactsParams": ".flow_action_activecampaign_list_contacts_params",
+ "FlowActionActivecampaignUpsertContact": ".flow_action_activecampaign_upsert_contact",
+ "FlowActionActivecampaignUpsertContactParams": ".flow_action_activecampaign_upsert_contact_params",
+ "FlowActionActivecampaignUpsertContactParamsCustomFields": ".flow_action_activecampaign_upsert_contact_params_custom_fields",
+ "FlowActionAirtable": ".flow_action_airtable",
+ "FlowActionAirtableCreateRecord": ".flow_action_airtable_create_record",
+ "FlowActionAirtableCreateRecordParams": ".flow_action_airtable_create_record_params",
+ "FlowActionAirtableCreateRecordParamsFields": ".flow_action_airtable_create_record_params_fields",
+ "FlowActionAirtableListRecords": ".flow_action_airtable_list_records",
+ "FlowActionAirtableListRecordsParams": ".flow_action_airtable_list_records_params",
+ "FlowActionAirtableUpdateRecord": ".flow_action_airtable_update_record",
+ "FlowActionAirtableUpdateRecordParams": ".flow_action_airtable_update_record_params",
+ "FlowActionAirtableUpdateRecordParamsFields": ".flow_action_airtable_update_record_params_fields",
+ "FlowActionAuth0": ".flow_action_auth_0",
+ "FlowActionAuth0CreateUser": ".flow_action_auth_0_create_user",
+ "FlowActionAuth0CreateUserParams": ".flow_action_auth_0_create_user_params",
+ "FlowActionAuth0CreateUserParamsPayload": ".flow_action_auth_0_create_user_params_payload",
+ "FlowActionAuth0GetUser": ".flow_action_auth_0_get_user",
+ "FlowActionAuth0GetUserParams": ".flow_action_auth_0_get_user_params",
+ "FlowActionAuth0SendEmail": ".flow_action_auth_0_send_email",
+ "FlowActionAuth0SendEmailParams": ".flow_action_auth_0_send_email_params",
+ "FlowActionAuth0SendEmailParamsFrom": ".flow_action_auth_0_send_email_params_from",
+ "FlowActionAuth0SendEmailParamsFromEmail": ".flow_action_auth_0_send_email_params_from_email",
+ "FlowActionAuth0SendEmailParamsTo": ".flow_action_auth_0_send_email_params_to",
+ "FlowActionAuth0SendRequest": ".flow_action_auth_0_send_request",
+ "FlowActionAuth0SendRequestParams": ".flow_action_auth_0_send_request_params",
+ "FlowActionAuth0SendRequestParamsCustomVars": ".flow_action_auth_0_send_request_params_custom_vars",
+ "FlowActionAuth0SendRequestParamsHeaders": ".flow_action_auth_0_send_request_params_headers",
+ "FlowActionAuth0SendRequestParamsMethod": ".flow_action_auth_0_send_request_params_method",
+ "FlowActionAuth0SendRequestParamsPayload": ".flow_action_auth_0_send_request_params_payload",
+ "FlowActionAuth0SendRequestParamsPayloadObject": ".flow_action_auth_0_send_request_params_payload_object",
+ "FlowActionAuth0SendRequestParamsQueryParams": ".flow_action_auth_0_send_request_params_query_params",
+ "FlowActionAuth0SendRequestParamsQueryParamsValue": ".flow_action_auth_0_send_request_params_query_params_value",
+ "FlowActionAuth0UpdateUser": ".flow_action_auth_0_update_user",
+ "FlowActionAuth0UpdateUserParams": ".flow_action_auth_0_update_user_params",
+ "FlowActionAuth0UpdateUserParamsChanges": ".flow_action_auth_0_update_user_params_changes",
+ "FlowActionBigquery": ".flow_action_bigquery",
+ "FlowActionBigqueryInsertRows": ".flow_action_bigquery_insert_rows",
+ "FlowActionBigqueryInsertRowsParams": ".flow_action_bigquery_insert_rows_params",
+ "FlowActionBigqueryInsertRowsParamsData": ".flow_action_bigquery_insert_rows_params_data",
+ "FlowActionClearbit": ".flow_action_clearbit",
+ "FlowActionClearbitFindCompany": ".flow_action_clearbit_find_company",
+ "FlowActionClearbitFindCompanyParams": ".flow_action_clearbit_find_company_params",
+ "FlowActionClearbitFindPerson": ".flow_action_clearbit_find_person",
+ "FlowActionClearbitFindPersonParams": ".flow_action_clearbit_find_person_params",
+ "FlowActionEmail": ".flow_action_email",
+ "FlowActionEmailVerifyEmail": ".flow_action_email_verify_email",
+ "FlowActionEmailVerifyEmailParams": ".flow_action_email_verify_email_params",
+ "FlowActionEmailVerifyEmailParamsRules": ".flow_action_email_verify_email_params_rules",
+ "FlowActionFlow": ".flow_action_flow",
+ "FlowActionFlowBooleanCondition": ".flow_action_flow_boolean_condition",
+ "FlowActionFlowBooleanConditionParams": ".flow_action_flow_boolean_condition_params",
+ "FlowActionFlowDelayFlow": ".flow_action_flow_delay_flow",
+ "FlowActionFlowDelayFlowParams": ".flow_action_flow_delay_flow_params",
+ "FlowActionFlowDelayFlowParamsNumber": ".flow_action_flow_delay_flow_params_number",
+ "FlowActionFlowDelayFlowParamsUnits": ".flow_action_flow_delay_flow_params_units",
+ "FlowActionFlowDoNothing": ".flow_action_flow_do_nothing",
+ "FlowActionFlowDoNothingParams": ".flow_action_flow_do_nothing_params",
+ "FlowActionFlowErrorMessage": ".flow_action_flow_error_message",
+ "FlowActionFlowErrorMessageParams": ".flow_action_flow_error_message_params",
+ "FlowActionFlowMapValue": ".flow_action_flow_map_value",
+ "FlowActionFlowMapValueParams": ".flow_action_flow_map_value_params",
+ "FlowActionFlowMapValueParamsCases": ".flow_action_flow_map_value_params_cases",
+ "FlowActionFlowMapValueParamsFallback": ".flow_action_flow_map_value_params_fallback",
+ "FlowActionFlowMapValueParamsFallbackObject": ".flow_action_flow_map_value_params_fallback_object",
+ "FlowActionFlowMapValueParamsInput": ".flow_action_flow_map_value_params_input",
+ "FlowActionFlowReturnJson": ".flow_action_flow_return_json",
+ "FlowActionFlowReturnJsonParams": ".flow_action_flow_return_json_params",
+ "FlowActionFlowReturnJsonParamsPayload": ".flow_action_flow_return_json_params_payload",
+ "FlowActionFlowReturnJsonParamsPayloadObject": ".flow_action_flow_return_json_params_payload_object",
+ "FlowActionFlowStoreVars": ".flow_action_flow_store_vars",
+ "FlowActionFlowStoreVarsParams": ".flow_action_flow_store_vars_params",
+ "FlowActionFlowStoreVarsParamsVars": ".flow_action_flow_store_vars_params_vars",
+ "FlowActionGoogleSheets": ".flow_action_google_sheets",
+ "FlowActionGoogleSheetsAddRow": ".flow_action_google_sheets_add_row",
+ "FlowActionGoogleSheetsAddRowParams": ".flow_action_google_sheets_add_row_params",
+ "FlowActionGoogleSheetsAddRowParamsSheetId": ".flow_action_google_sheets_add_row_params_sheet_id",
+ "FlowActionGoogleSheetsAddRowParamsValues": ".flow_action_google_sheets_add_row_params_values",
+ "FlowActionHttp": ".flow_action_http",
+ "FlowActionHttpSendRequest": ".flow_action_http_send_request",
+ "FlowActionHttpSendRequestParams": ".flow_action_http_send_request_params",
+ "FlowActionHttpSendRequestParamsBasicAuth": ".flow_action_http_send_request_params_basic_auth",
+ "FlowActionHttpSendRequestParamsContentType": ".flow_action_http_send_request_params_content_type",
+ "FlowActionHttpSendRequestParamsHeaders": ".flow_action_http_send_request_params_headers",
+ "FlowActionHttpSendRequestParamsMethod": ".flow_action_http_send_request_params_method",
+ "FlowActionHttpSendRequestParamsPayload": ".flow_action_http_send_request_params_payload",
+ "FlowActionHttpSendRequestParamsPayloadObject": ".flow_action_http_send_request_params_payload_object",
+ "FlowActionHttpSendRequestParamsQueryParams": ".flow_action_http_send_request_params_query_params",
+ "FlowActionHttpSendRequestParamsQueryParamsValue": ".flow_action_http_send_request_params_query_params_value",
+ "FlowActionHubspot": ".flow_action_hubspot",
+ "FlowActionHubspotEnrollContact": ".flow_action_hubspot_enroll_contact",
+ "FlowActionHubspotEnrollContactParams": ".flow_action_hubspot_enroll_contact_params",
+ "FlowActionHubspotEnrollContactParamsWorkflowId": ".flow_action_hubspot_enroll_contact_params_workflow_id",
+ "FlowActionHubspotGetContact": ".flow_action_hubspot_get_contact",
+ "FlowActionHubspotGetContactParams": ".flow_action_hubspot_get_contact_params",
+ "FlowActionHubspotUpsertContact": ".flow_action_hubspot_upsert_contact",
+ "FlowActionHubspotUpsertContactParams": ".flow_action_hubspot_upsert_contact_params",
+ "FlowActionHubspotUpsertContactParamsProperty": ".flow_action_hubspot_upsert_contact_params_property",
+ "FlowActionJson": ".flow_action_json",
+ "FlowActionJsonCreateJson": ".flow_action_json_create_json",
+ "FlowActionJsonCreateJsonParams": ".flow_action_json_create_json_params",
+ "FlowActionJsonCreateJsonParamsObject": ".flow_action_json_create_json_params_object",
+ "FlowActionJsonParseJson": ".flow_action_json_parse_json",
+ "FlowActionJsonParseJsonParams": ".flow_action_json_parse_json_params",
+ "FlowActionJsonSerializeJson": ".flow_action_json_serialize_json",
+ "FlowActionJsonSerializeJsonParams": ".flow_action_json_serialize_json_params",
+ "FlowActionJsonSerializeJsonParamsObject": ".flow_action_json_serialize_json_params_object",
+ "FlowActionJsonSerializeJsonParamsObjectObject": ".flow_action_json_serialize_json_params_object_object",
+ "FlowActionJwt": ".flow_action_jwt",
+ "FlowActionJwtDecodeJwt": ".flow_action_jwt_decode_jwt",
+ "FlowActionJwtDecodeJwtParams": ".flow_action_jwt_decode_jwt_params",
+ "FlowActionJwtSignJwt": ".flow_action_jwt_sign_jwt",
+ "FlowActionJwtSignJwtParams": ".flow_action_jwt_sign_jwt_params",
+ "FlowActionJwtSignJwtParamsPayload": ".flow_action_jwt_sign_jwt_params_payload",
+ "FlowActionJwtVerifyJwt": ".flow_action_jwt_verify_jwt",
+ "FlowActionJwtVerifyJwtParams": ".flow_action_jwt_verify_jwt_params",
+ "FlowActionMailchimp": ".flow_action_mailchimp",
+ "FlowActionMailchimpUpsertMember": ".flow_action_mailchimp_upsert_member",
+ "FlowActionMailchimpUpsertMemberParams": ".flow_action_mailchimp_upsert_member_params",
+ "FlowActionMailchimpUpsertMemberParamsMember": ".flow_action_mailchimp_upsert_member_params_member",
+ "FlowActionMailchimpUpsertMemberParamsMemberMergeFields": ".flow_action_mailchimp_upsert_member_params_member_merge_fields",
+ "FlowActionMailjet": ".flow_action_mailjet",
+ "FlowActionMailjetSendEmail": ".flow_action_mailjet_send_email",
+ "FlowActionMailjetSendEmailParams": ".flow_action_mailjet_send_email_params",
+ "FlowActionMailjetSendEmailParamsContent": ".flow_action_mailjet_send_email_params_content",
+ "FlowActionMailjetSendEmailParamsTemplateId": ".flow_action_mailjet_send_email_params_template_id",
+ "FlowActionOtp": ".flow_action_otp",
+ "FlowActionOtpGenerateCode": ".flow_action_otp_generate_code",
+ "FlowActionOtpGenerateCodeParams": ".flow_action_otp_generate_code_params",
+ "FlowActionOtpVerifyCode": ".flow_action_otp_verify_code",
+ "FlowActionOtpVerifyCodeParams": ".flow_action_otp_verify_code_params",
+ "FlowActionOtpVerifyCodeParamsCode": ".flow_action_otp_verify_code_params_code",
+ "FlowActionPipedrive": ".flow_action_pipedrive",
+ "FlowActionPipedriveAddDeal": ".flow_action_pipedrive_add_deal",
+ "FlowActionPipedriveAddDealParams": ".flow_action_pipedrive_add_deal_params",
+ "FlowActionPipedriveAddDealParamsFields": ".flow_action_pipedrive_add_deal_params_fields",
+ "FlowActionPipedriveAddDealParamsOrganizationId": ".flow_action_pipedrive_add_deal_params_organization_id",
+ "FlowActionPipedriveAddDealParamsPersonId": ".flow_action_pipedrive_add_deal_params_person_id",
+ "FlowActionPipedriveAddDealParamsStageId": ".flow_action_pipedrive_add_deal_params_stage_id",
+ "FlowActionPipedriveAddDealParamsUserId": ".flow_action_pipedrive_add_deal_params_user_id",
+ "FlowActionPipedriveAddOrganization": ".flow_action_pipedrive_add_organization",
+ "FlowActionPipedriveAddOrganizationParams": ".flow_action_pipedrive_add_organization_params",
+ "FlowActionPipedriveAddOrganizationParamsFields": ".flow_action_pipedrive_add_organization_params_fields",
+ "FlowActionPipedriveAddOrganizationParamsOwnerId": ".flow_action_pipedrive_add_organization_params_owner_id",
+ "FlowActionPipedriveAddPerson": ".flow_action_pipedrive_add_person",
+ "FlowActionPipedriveAddPersonParams": ".flow_action_pipedrive_add_person_params",
+ "FlowActionPipedriveAddPersonParamsFields": ".flow_action_pipedrive_add_person_params_fields",
+ "FlowActionPipedriveAddPersonParamsOrganizationId": ".flow_action_pipedrive_add_person_params_organization_id",
+ "FlowActionPipedriveAddPersonParamsOwnerId": ".flow_action_pipedrive_add_person_params_owner_id",
+ "FlowActionSalesforce": ".flow_action_salesforce",
+ "FlowActionSalesforceCreateLead": ".flow_action_salesforce_create_lead",
+ "FlowActionSalesforceCreateLeadParams": ".flow_action_salesforce_create_lead_params",
+ "FlowActionSalesforceCreateLeadParamsPayload": ".flow_action_salesforce_create_lead_params_payload",
+ "FlowActionSalesforceGetLead": ".flow_action_salesforce_get_lead",
+ "FlowActionSalesforceGetLeadParams": ".flow_action_salesforce_get_lead_params",
+ "FlowActionSalesforceSearchLeads": ".flow_action_salesforce_search_leads",
+ "FlowActionSalesforceSearchLeadsParams": ".flow_action_salesforce_search_leads_params",
+ "FlowActionSalesforceSearchLeadsParamsSearchField": ".flow_action_salesforce_search_leads_params_search_field",
+ "FlowActionSalesforceUpdateLead": ".flow_action_salesforce_update_lead",
+ "FlowActionSalesforceUpdateLeadParams": ".flow_action_salesforce_update_lead_params",
+ "FlowActionSalesforceUpdateLeadParamsPayload": ".flow_action_salesforce_update_lead_params_payload",
+ "FlowActionSendgrid": ".flow_action_sendgrid",
+ "FlowActionSendgridSendEmail": ".flow_action_sendgrid_send_email",
+ "FlowActionSendgridSendEmailParams": ".flow_action_sendgrid_send_email_params",
+ "FlowActionSendgridSendEmailParamsPerson": ".flow_action_sendgrid_send_email_params_person",
+ "FlowActionSlack": ".flow_action_slack",
+ "FlowActionSlackPostMessage": ".flow_action_slack_post_message",
+ "FlowActionSlackPostMessageParams": ".flow_action_slack_post_message_params",
+ "FlowActionSlackPostMessageParamsAttachment": ".flow_action_slack_post_message_params_attachment",
+ "FlowActionSlackPostMessageParamsAttachmentColor": ".flow_action_slack_post_message_params_attachment_color",
+ "FlowActionSlackPostMessageParamsAttachmentField": ".flow_action_slack_post_message_params_attachment_field",
+ "FlowActionStripe": ".flow_action_stripe",
+ "FlowActionStripeAddTaxId": ".flow_action_stripe_add_tax_id",
+ "FlowActionStripeAddTaxIdParams": ".flow_action_stripe_add_tax_id_params",
+ "FlowActionStripeAddress": ".flow_action_stripe_address",
+ "FlowActionStripeCreateCustomer": ".flow_action_stripe_create_customer",
+ "FlowActionStripeCreateCustomerParams": ".flow_action_stripe_create_customer_params",
+ "FlowActionStripeCreatePortalSession": ".flow_action_stripe_create_portal_session",
+ "FlowActionStripeCreatePortalSessionParams": ".flow_action_stripe_create_portal_session_params",
+ "FlowActionStripeDeleteTaxId": ".flow_action_stripe_delete_tax_id",
+ "FlowActionStripeDeleteTaxIdParams": ".flow_action_stripe_delete_tax_id_params",
+ "FlowActionStripeFindCustomers": ".flow_action_stripe_find_customers",
+ "FlowActionStripeFindCustomersParams": ".flow_action_stripe_find_customers_params",
+ "FlowActionStripeGetCustomer": ".flow_action_stripe_get_customer",
+ "FlowActionStripeGetCustomerParams": ".flow_action_stripe_get_customer_params",
+ "FlowActionStripeMetadata": ".flow_action_stripe_metadata",
+ "FlowActionStripeTaxId": ".flow_action_stripe_tax_id",
+ "FlowActionStripeUpdateCustomer": ".flow_action_stripe_update_customer",
+ "FlowActionStripeUpdateCustomerParams": ".flow_action_stripe_update_customer_params",
+ "FlowActionTelegram": ".flow_action_telegram",
+ "FlowActionTelegramSendMessage": ".flow_action_telegram_send_message",
+ "FlowActionTelegramSendMessageParams": ".flow_action_telegram_send_message_params",
+ "FlowActionTwilio": ".flow_action_twilio",
+ "FlowActionTwilioMakeCall": ".flow_action_twilio_make_call",
+ "FlowActionTwilioMakeCallParams": ".flow_action_twilio_make_call_params",
+ "FlowActionTwilioSendSms": ".flow_action_twilio_send_sms",
+ "FlowActionTwilioSendSmsParams": ".flow_action_twilio_send_sms_params",
+ "FlowActionWhatsapp": ".flow_action_whatsapp",
+ "FlowActionWhatsappSendMessage": ".flow_action_whatsapp_send_message",
+ "FlowActionWhatsappSendMessageParams": ".flow_action_whatsapp_send_message_params",
+ "FlowActionWhatsappSendMessageParamsPayload": ".flow_action_whatsapp_send_message_params_payload",
+ "FlowActionWhatsappSendMessageParamsPayloadObject": ".flow_action_whatsapp_send_message_params_payload_object",
+ "FlowActionWhatsappSendMessageParamsType": ".flow_action_whatsapp_send_message_params_type",
+ "FlowActionXml": ".flow_action_xml",
+ "FlowActionXmlParseXml": ".flow_action_xml_parse_xml",
+ "FlowActionXmlParseXmlParams": ".flow_action_xml_parse_xml_params",
+ "FlowActionXmlSerializeXml": ".flow_action_xml_serialize_xml",
+ "FlowActionXmlSerializeXmlParams": ".flow_action_xml_serialize_xml_params",
+ "FlowActionXmlSerializeXmlParamsObject": ".flow_action_xml_serialize_xml_params_object",
+ "FlowActionXmlSerializeXmlParamsObjectObject": ".flow_action_xml_serialize_xml_params_object_object",
+ "FlowActionZapier": ".flow_action_zapier",
+ "FlowActionZapierTriggerWebhook": ".flow_action_zapier_trigger_webhook",
+ "FlowActionZapierTriggerWebhookParams": ".flow_action_zapier_trigger_webhook_params",
+ "FlowActionZapierTriggerWebhookParamsMethod": ".flow_action_zapier_trigger_webhook_params_method",
+ "FlowExecutionDebug": ".flow_execution_debug",
+ "FlowExecutionSummary": ".flow_execution_summary",
+ "FlowSummary": ".flow_summary",
+ "FlowsVaultConnectioSetupApiKey": ".flows_vault_connectio_setup_api_key",
+ "FlowsVaultConnectioSetupApiKeyWithBaseUrl": ".flows_vault_connectio_setup_api_key_with_base_url",
+ "FlowsVaultConnectioSetupBigqueryOauthJwt": ".flows_vault_connectio_setup_bigquery_oauth_jwt",
+ "FlowsVaultConnectioSetupHttpBearer": ".flows_vault_connectio_setup_http_bearer",
+ "FlowsVaultConnectioSetupJwt": ".flows_vault_connectio_setup_jwt",
+ "FlowsVaultConnectioSetupJwtAlgorithmEnum": ".flows_vault_connectio_setup_jwt_algorithm_enum",
+ "FlowsVaultConnectioSetupMailjetApiKey": ".flows_vault_connectio_setup_mailjet_api_key",
+ "FlowsVaultConnectioSetupOauthApp": ".flows_vault_connectio_setup_oauth_app",
+ "FlowsVaultConnectioSetupOauthCode": ".flows_vault_connectio_setup_oauth_code",
+ "FlowsVaultConnectioSetupSecretApiKey": ".flows_vault_connectio_setup_secret_api_key",
+ "FlowsVaultConnectioSetupStripeKeyPair": ".flows_vault_connectio_setup_stripe_key_pair",
+ "FlowsVaultConnectioSetupToken": ".flows_vault_connectio_setup_token",
+ "FlowsVaultConnectioSetupTwilioApiKey": ".flows_vault_connectio_setup_twilio_api_key",
+ "FlowsVaultConnectioSetupTypeApiKeyEnum": ".flows_vault_connectio_setup_type_api_key_enum",
+ "FlowsVaultConnectioSetupTypeBearerEnum": ".flows_vault_connectio_setup_type_bearer_enum",
+ "FlowsVaultConnectioSetupTypeJwtEnum": ".flows_vault_connectio_setup_type_jwt_enum",
+ "FlowsVaultConnectioSetupTypeKeyPairEnum": ".flows_vault_connectio_setup_type_key_pair_enum",
+ "FlowsVaultConnectioSetupTypeOauthAppEnum": ".flows_vault_connectio_setup_type_oauth_app_enum",
+ "FlowsVaultConnectioSetupTypeOauthCodeEnum": ".flows_vault_connectio_setup_type_oauth_code_enum",
+ "FlowsVaultConnectioSetupTypeOauthJwtEnum": ".flows_vault_connectio_setup_type_oauth_jwt_enum",
+ "FlowsVaultConnectioSetupTypeTokenEnum": ".flows_vault_connectio_setup_type_token_enum",
+ "FlowsVaultConnectioSetupTypeWebhookEnum": ".flows_vault_connectio_setup_type_webhook_enum",
+ "FlowsVaultConnectioSetupWebhook": ".flows_vault_connectio_setup_webhook",
+ "FlowsVaultConnectionAppIdActivecampaignEnum": ".flows_vault_connection_app_id_activecampaign_enum",
+ "FlowsVaultConnectionAppIdAirtableEnum": ".flows_vault_connection_app_id_airtable_enum",
+ "FlowsVaultConnectionAppIdAuth0Enum": ".flows_vault_connection_app_id_auth_0_enum",
+ "FlowsVaultConnectionAppIdBigqueryEnum": ".flows_vault_connection_app_id_bigquery_enum",
+ "FlowsVaultConnectionAppIdClearbitEnum": ".flows_vault_connection_app_id_clearbit_enum",
+ "FlowsVaultConnectionAppIdDocusignEnum": ".flows_vault_connection_app_id_docusign_enum",
+ "FlowsVaultConnectionAppIdGoogleSheetsEnum": ".flows_vault_connection_app_id_google_sheets_enum",
+ "FlowsVaultConnectionAppIdHttpEnum": ".flows_vault_connection_app_id_http_enum",
+ "FlowsVaultConnectionAppIdHubspotEnum": ".flows_vault_connection_app_id_hubspot_enum",
+ "FlowsVaultConnectionAppIdJwtEnum": ".flows_vault_connection_app_id_jwt_enum",
+ "FlowsVaultConnectionAppIdMailchimpEnum": ".flows_vault_connection_app_id_mailchimp_enum",
+ "FlowsVaultConnectionAppIdMailjetEnum": ".flows_vault_connection_app_id_mailjet_enum",
+ "FlowsVaultConnectionAppIdPipedriveEnum": ".flows_vault_connection_app_id_pipedrive_enum",
+ "FlowsVaultConnectionAppIdSalesforceEnum": ".flows_vault_connection_app_id_salesforce_enum",
+ "FlowsVaultConnectionAppIdSendgridEnum": ".flows_vault_connection_app_id_sendgrid_enum",
+ "FlowsVaultConnectionAppIdSlackEnum": ".flows_vault_connection_app_id_slack_enum",
+ "FlowsVaultConnectionAppIdStripeEnum": ".flows_vault_connection_app_id_stripe_enum",
+ "FlowsVaultConnectionAppIdTelegramEnum": ".flows_vault_connection_app_id_telegram_enum",
+ "FlowsVaultConnectionAppIdTwilioEnum": ".flows_vault_connection_app_id_twilio_enum",
+ "FlowsVaultConnectionAppIdWhatsappEnum": ".flows_vault_connection_app_id_whatsapp_enum",
+ "FlowsVaultConnectionAppIdZapierEnum": ".flows_vault_connection_app_id_zapier_enum",
+ "FlowsVaultConnectionSummary": ".flows_vault_connection_summary",
+ "FormBlock": ".form_block",
+ "FormBlockDivider": ".form_block_divider",
+ "FormBlockDividerConfig": ".form_block_divider_config",
+ "FormBlockHtml": ".form_block_html",
+ "FormBlockHtmlConfig": ".form_block_html_config",
+ "FormBlockImage": ".form_block_image",
+ "FormBlockImageConfig": ".form_block_image_config",
+ "FormBlockImageConfigPositionEnum": ".form_block_image_config_position_enum",
+ "FormBlockJumpButton": ".form_block_jump_button",
+ "FormBlockJumpButtonConfig": ".form_block_jump_button_config",
+ "FormBlockJumpButtonConfigStyle": ".form_block_jump_button_config_style",
+ "FormBlockNextButton": ".form_block_next_button",
+ "FormBlockNextButtonConfig": ".form_block_next_button_config",
+ "FormBlockPreviousButton": ".form_block_previous_button",
+ "FormBlockPreviousButtonConfig": ".form_block_previous_button_config",
+ "FormBlockResendButton": ".form_block_resend_button",
+ "FormBlockResendButtonConfig": ".form_block_resend_button_config",
+ "FormBlockResendButtonConfigTextAlignmentEnum": ".form_block_resend_button_config_text_alignment_enum",
+ "FormBlockRichText": ".form_block_rich_text",
+ "FormBlockRichTextConfig": ".form_block_rich_text_config",
+ "FormBlockTypeDividerConst": ".form_block_type_divider_const",
+ "FormBlockTypeHtmlConst": ".form_block_type_html_const",
+ "FormBlockTypeImageConst": ".form_block_type_image_const",
+ "FormBlockTypeJumpButtonConst": ".form_block_type_jump_button_const",
+ "FormBlockTypeNextButtonConst": ".form_block_type_next_button_const",
+ "FormBlockTypePreviousButtonConst": ".form_block_type_previous_button_const",
+ "FormBlockTypeResendButtonConst": ".form_block_type_resend_button_const",
+ "FormBlockTypeRichTextConst": ".form_block_type_rich_text_const",
+ "FormComponent": ".form_component",
+ "FormComponentCategoryBlockConst": ".form_component_category_block_const",
+ "FormComponentCategoryFieldConst": ".form_component_category_field_const",
+ "FormComponentCategoryWidgetConst": ".form_component_category_widget_const",
+ "FormEndingNode": ".form_ending_node",
+ "FormEndingNodeAfterSubmit": ".form_ending_node_after_submit",
+ "FormEndingNodeId": ".form_ending_node_id",
+ "FormEndingNodeNullable": ".form_ending_node_nullable",
+ "FormEndingNodeRedirection": ".form_ending_node_redirection",
+ "FormEndingNodeResumeFlowTrueConst": ".form_ending_node_resume_flow_true_const",
+ "FormField": ".form_field",
+ "FormFieldBoolean": ".form_field_boolean",
+ "FormFieldBooleanConfig": ".form_field_boolean_config",
+ "FormFieldBooleanConfigOptions": ".form_field_boolean_config_options",
+ "FormFieldCards": ".form_field_cards",
+ "FormFieldCardsConfig": ".form_field_cards_config",
+ "FormFieldCardsConfigOption": ".form_field_cards_config_option",
+ "FormFieldChoice": ".form_field_choice",
+ "FormFieldChoiceConfig": ".form_field_choice_config",
+ "FormFieldChoiceConfigAllowOther": ".form_field_choice_config_allow_other",
+ "FormFieldChoiceConfigAllowOtherEnabledTrueEnum": ".form_field_choice_config_allow_other_enabled_true_enum",
+ "FormFieldChoiceConfigOption": ".form_field_choice_config_option",
+ "FormFieldCustom": ".form_field_custom",
+ "FormFieldCustomConfig": ".form_field_custom_config",
+ "FormFieldCustomConfigParams": ".form_field_custom_config_params",
+ "FormFieldCustomConfigSchema": ".form_field_custom_config_schema",
+ "FormFieldDate": ".form_field_date",
+ "FormFieldDateConfig": ".form_field_date_config",
+ "FormFieldDateConfigFormatEnum": ".form_field_date_config_format_enum",
+ "FormFieldDropdown": ".form_field_dropdown",
+ "FormFieldDropdownConfig": ".form_field_dropdown_config",
+ "FormFieldDropdownConfigOption": ".form_field_dropdown_config_option",
+ "FormFieldEmail": ".form_field_email",
+ "FormFieldEmailConfig": ".form_field_email_config",
+ "FormFieldFile": ".form_field_file",
+ "FormFieldFileConfig": ".form_field_file_config",
+ "FormFieldFileConfigCategoryEnum": ".form_field_file_config_category_enum",
+ "FormFieldFileConfigStorage": ".form_field_file_config_storage",
+ "FormFieldFileConfigStorageTypeEnum": ".form_field_file_config_storage_type_enum",
+ "FormFieldLegal": ".form_field_legal",
+ "FormFieldLegalConfig": ".form_field_legal_config",
+ "FormFieldNumber": ".form_field_number",
+ "FormFieldNumberConfig": ".form_field_number_config",
+ "FormFieldPassword": ".form_field_password",
+ "FormFieldPasswordConfig": ".form_field_password_config",
+ "FormFieldPasswordConfigHashEnum": ".form_field_password_config_hash_enum",
+ "FormFieldPayment": ".form_field_payment",
+ "FormFieldPaymentConfig": ".form_field_payment_config",
+ "FormFieldPaymentConfigCharge": ".form_field_payment_config_charge",
+ "FormFieldPaymentConfigChargeOneOff": ".form_field_payment_config_charge_one_off",
+ "FormFieldPaymentConfigChargeOneOffCurrencyEnum": ".form_field_payment_config_charge_one_off_currency_enum",
+ "FormFieldPaymentConfigChargeOneOffOneOff": ".form_field_payment_config_charge_one_off_one_off",
+ "FormFieldPaymentConfigChargeOneOffOneOffAmount": ".form_field_payment_config_charge_one_off_one_off_amount",
+ "FormFieldPaymentConfigChargeSubscription": ".form_field_payment_config_charge_subscription",
+ "FormFieldPaymentConfigChargeTypeOneOffConst": ".form_field_payment_config_charge_type_one_off_const",
+ "FormFieldPaymentConfigChargeTypeSubscriptionConst": ".form_field_payment_config_charge_type_subscription_const",
+ "FormFieldPaymentConfigCredentials": ".form_field_payment_config_credentials",
+ "FormFieldPaymentConfigCustomer": ".form_field_payment_config_customer",
+ "FormFieldPaymentConfigFieldProperties": ".form_field_payment_config_field_properties",
+ "FormFieldPaymentConfigFields": ".form_field_payment_config_fields",
+ "FormFieldPaymentConfigProviderEnum": ".form_field_payment_config_provider_enum",
+ "FormFieldPaymentConfigSubscription": ".form_field_payment_config_subscription",
+ "FormFieldSocial": ".form_field_social",
+ "FormFieldSocialConfig": ".form_field_social_config",
+ "FormFieldTel": ".form_field_tel",
+ "FormFieldTelConfig": ".form_field_tel_config",
+ "FormFieldTelConfigStrings": ".form_field_tel_config_strings",
+ "FormFieldText": ".form_field_text",
+ "FormFieldTextConfig": ".form_field_text_config",
+ "FormFieldTypeBooleanConst": ".form_field_type_boolean_const",
+ "FormFieldTypeCardsConst": ".form_field_type_cards_const",
+ "FormFieldTypeChoiceConst": ".form_field_type_choice_const",
+ "FormFieldTypeCustomConst": ".form_field_type_custom_const",
+ "FormFieldTypeDateConst": ".form_field_type_date_const",
+ "FormFieldTypeDropdownConst": ".form_field_type_dropdown_const",
+ "FormFieldTypeEmailConst": ".form_field_type_email_const",
+ "FormFieldTypeFileConst": ".form_field_type_file_const",
+ "FormFieldTypeLegalConst": ".form_field_type_legal_const",
+ "FormFieldTypeNumberConst": ".form_field_type_number_const",
+ "FormFieldTypePasswordConst": ".form_field_type_password_const",
+ "FormFieldTypePaymentConst": ".form_field_type_payment_const",
+ "FormFieldTypeSocialConst": ".form_field_type_social_const",
+ "FormFieldTypeTelConst": ".form_field_type_tel_const",
+ "FormFieldTypeTextConst": ".form_field_type_text_const",
+ "FormFieldTypeUrlConst": ".form_field_type_url_const",
+ "FormFieldUrl": ".form_field_url",
+ "FormFieldUrlConfig": ".form_field_url_config",
+ "FormFlow": ".form_flow",
+ "FormFlowConfig": ".form_flow_config",
+ "FormHiddenField": ".form_hidden_field",
+ "FormLanguages": ".form_languages",
+ "FormLanguagesNullable": ".form_languages_nullable",
+ "FormMessages": ".form_messages",
+ "FormMessagesCustom": ".form_messages_custom",
+ "FormMessagesError": ".form_messages_error",
+ "FormMessagesNullable": ".form_messages_nullable",
+ "FormNode": ".form_node",
+ "FormNodeCoordinates": ".form_node_coordinates",
+ "FormNodeList": ".form_node_list",
+ "FormNodeListNullable": ".form_node_list_nullable",
+ "FormNodePointer": ".form_node_pointer",
+ "FormNodeTypeFlowConst": ".form_node_type_flow_const",
+ "FormNodeTypeRouterConst": ".form_node_type_router_const",
+ "FormNodeTypeStepConst": ".form_node_type_step_const",
+ "FormRouter": ".form_router",
+ "FormRouterConfig": ".form_router_config",
+ "FormRouterRule": ".form_router_rule",
+ "FormStartNode": ".form_start_node",
+ "FormStartNodeNullable": ".form_start_node_nullable",
+ "FormStep": ".form_step",
+ "FormStepComponentList": ".form_step_component_list",
+ "FormStepConfig": ".form_step_config",
+ "FormStyle": ".form_style",
+ "FormStyleNullable": ".form_style_nullable",
+ "FormSummary": ".form_summary",
+ "FormTranslations": ".form_translations",
+ "FormTranslationsNullable": ".form_translations_nullable",
+ "FormWidget": ".form_widget",
+ "FormWidgetAuth0VerifiableCredentials": ".form_widget_auth_0_verifiable_credentials",
+ "FormWidgetAuth0VerifiableCredentialsConfig": ".form_widget_auth_0_verifiable_credentials_config",
+ "FormWidgetGMapsAddress": ".form_widget_g_maps_address",
+ "FormWidgetGMapsAddressConfig": ".form_widget_g_maps_address_config",
+ "FormWidgetRecaptcha": ".form_widget_recaptcha",
+ "FormWidgetRecaptchaConfig": ".form_widget_recaptcha_config",
+ "FormWidgetTypeAuth0VerifiableCredentialsConst": ".form_widget_type_auth_0_verifiable_credentials_const",
+ "FormWidgetTypeGMapsAddressConst": ".form_widget_type_g_maps_address_const",
+ "FormWidgetTypeRecaptchaConst": ".form_widget_type_recaptcha_const",
+ "FormsRequestParametersHydrateEnum": ".forms_request_parameters_hydrate_enum",
+ "GetActionExecutionResponseContent": ".get_action_execution_response_content",
+ "GetActionResponseContent": ".get_action_response_content",
+ "GetActionVersionResponseContent": ".get_action_version_response_content",
+ "GetActiveUsersCountStatsResponseContent": ".get_active_users_count_stats_response_content",
+ "GetAculResponseContent": ".get_acul_response_content",
+ "GetAttackProtectionCaptchaResponseContent": ".get_attack_protection_captcha_response_content",
+ "GetBotDetectionSettingsResponseContent": ".get_bot_detection_settings_response_content",
+ "GetBrandingDefaultThemeResponseContent": ".get_branding_default_theme_response_content",
+ "GetBrandingPhoneProviderResponseContent": ".get_branding_phone_provider_response_content",
+ "GetBrandingResponseContent": ".get_branding_response_content",
+ "GetBrandingThemeResponseContent": ".get_branding_theme_response_content",
+ "GetBreachedPasswordDetectionSettingsResponseContent": ".get_breached_password_detection_settings_response_content",
+ "GetBruteForceSettingsResponseContent": ".get_brute_force_settings_response_content",
+ "GetBruteForceSettingsResponseContentMode": ".get_brute_force_settings_response_content_mode",
+ "GetBruteForceSettingsResponseContentShieldsItem": ".get_brute_force_settings_response_content_shields_item",
+ "GetClientCredentialResponseContent": ".get_client_credential_response_content",
+ "GetClientResponseContent": ".get_client_response_content",
+ "GetConnectionEnabledClientsResponseContent": ".get_connection_enabled_clients_response_content",
+ "GetConnectionProfileResponseContent": ".get_connection_profile_response_content",
+ "GetConnectionProfileTemplateResponseContent": ".get_connection_profile_template_response_content",
+ "GetConnectionResponseContent": ".get_connection_response_content",
+ "GetCustomDomainResponseContent": ".get_custom_domain_response_content",
+ "GetCustomSigningKeysResponseContent": ".get_custom_signing_keys_response_content",
+ "GetCustomTextsByLanguageResponseContent": ".get_custom_texts_by_language_response_content",
+ "GetDirectoryProvisioningDefaultMappingResponseContent": ".get_directory_provisioning_default_mapping_response_content",
+ "GetDirectoryProvisioningResponseContent": ".get_directory_provisioning_response_content",
+ "GetEmailProviderResponseContent": ".get_email_provider_response_content",
+ "GetEmailTemplateResponseContent": ".get_email_template_response_content",
+ "GetEncryptionKeyResponseContent": ".get_encryption_key_response_content",
+ "GetEventStreamDeliveryHistoryResponseContent": ".get_event_stream_delivery_history_response_content",
+ "GetEventStreamResponseContent": ".get_event_stream_response_content",
+ "GetFlowExecutionResponseContent": ".get_flow_execution_response_content",
+ "GetFlowRequestParametersHydrateEnum": ".get_flow_request_parameters_hydrate_enum",
+ "GetFlowResponseContent": ".get_flow_response_content",
+ "GetFlowsVaultConnectionResponseContent": ".get_flows_vault_connection_response_content",
+ "GetFormResponseContent": ".get_form_response_content",
+ "GetGuardianEnrollmentResponseContent": ".get_guardian_enrollment_response_content",
+ "GetGuardianFactorDuoSettingsResponseContent": ".get_guardian_factor_duo_settings_response_content",
+ "GetGuardianFactorPhoneMessageTypesResponseContent": ".get_guardian_factor_phone_message_types_response_content",
+ "GetGuardianFactorPhoneTemplatesResponseContent": ".get_guardian_factor_phone_templates_response_content",
+ "GetGuardianFactorSmsTemplatesResponseContent": ".get_guardian_factor_sms_templates_response_content",
+ "GetGuardianFactorsProviderApnsResponseContent": ".get_guardian_factors_provider_apns_response_content",
+ "GetGuardianFactorsProviderPhoneResponseContent": ".get_guardian_factors_provider_phone_response_content",
+ "GetGuardianFactorsProviderPhoneTwilioResponseContent": ".get_guardian_factors_provider_phone_twilio_response_content",
+ "GetGuardianFactorsProviderPushNotificationResponseContent": ".get_guardian_factors_provider_push_notification_response_content",
+ "GetGuardianFactorsProviderSmsResponseContent": ".get_guardian_factors_provider_sms_response_content",
+ "GetGuardianFactorsProviderSmsTwilioResponseContent": ".get_guardian_factors_provider_sms_twilio_response_content",
+ "GetGuardianFactorsProviderSnsResponseContent": ".get_guardian_factors_provider_sns_response_content",
+ "GetHookResponseContent": ".get_hook_response_content",
+ "GetHookSecretResponseContent": ".get_hook_secret_response_content",
+ "GetJobErrorResponseContent": ".get_job_error_response_content",
+ "GetJobGenericErrorResponseContent": ".get_job_generic_error_response_content",
+ "GetJobImportUserError": ".get_job_import_user_error",
+ "GetJobResponseContent": ".get_job_response_content",
+ "GetJobUserError": ".get_job_user_error",
+ "GetLogResponseContent": ".get_log_response_content",
+ "GetLogStreamResponseContent": ".get_log_stream_response_content",
+ "GetNetworkAclsResponseContent": ".get_network_acls_response_content",
+ "GetOrganizationByNameResponseContent": ".get_organization_by_name_response_content",
+ "GetOrganizationConnectionResponseContent": ".get_organization_connection_response_content",
+ "GetOrganizationDiscoveryDomainResponseContent": ".get_organization_discovery_domain_response_content",
+ "GetOrganizationInvitationResponseContent": ".get_organization_invitation_response_content",
+ "GetOrganizationResponseContent": ".get_organization_response_content",
+ "GetPartialsResponseContent": ".get_partials_response_content",
+ "GetPhoneTemplateResponseContent": ".get_phone_template_response_content",
+ "GetRefreshTokenResponseContent": ".get_refresh_token_response_content",
+ "GetResourceServerResponseContent": ".get_resource_server_response_content",
+ "GetRiskAssessmentsSettingsNewDeviceResponseContent": ".get_risk_assessments_settings_new_device_response_content",
+ "GetRiskAssessmentsSettingsResponseContent": ".get_risk_assessments_settings_response_content",
+ "GetRoleResponseContent": ".get_role_response_content",
+ "GetRuleResponseContent": ".get_rule_response_content",
+ "GetScimConfigurationDefaultMappingResponseContent": ".get_scim_configuration_default_mapping_response_content",
+ "GetScimConfigurationResponseContent": ".get_scim_configuration_response_content",
+ "GetScimTokensResponseContent": ".get_scim_tokens_response_content",
+ "GetSelfServiceProfileResponseContent": ".get_self_service_profile_response_content",
+ "GetSessionResponseContent": ".get_session_response_content",
+ "GetSettingsResponseContent": ".get_settings_response_content",
+ "GetSigningKeysResponseContent": ".get_signing_keys_response_content",
+ "GetSupplementalSignalsResponseContent": ".get_supplemental_signals_response_content",
+ "GetSuspiciousIpThrottlingSettingsResponseContent": ".get_suspicious_ip_throttling_settings_response_content",
+ "GetTenantSettingsResponseContent": ".get_tenant_settings_response_content",
+ "GetTokenExchangeProfileResponseContent": ".get_token_exchange_profile_response_content",
+ "GetUniversalLoginTemplate": ".get_universal_login_template",
+ "GetUniversalLoginTemplateResponseContent": ".get_universal_login_template_response_content",
+ "GetUserAttributeProfileResponseContent": ".get_user_attribute_profile_response_content",
+ "GetUserAttributeProfileTemplateResponseContent": ".get_user_attribute_profile_template_response_content",
+ "GetUserAuthenticationMethodResponseContent": ".get_user_authentication_method_response_content",
+ "GetUserResponseContent": ".get_user_response_content",
+ "GetVerifiableCredentialTemplateResponseContent": ".get_verifiable_credential_template_response_content",
+ "Group": ".group",
+ "GuardianEnrollmentDate": ".guardian_enrollment_date",
+ "GuardianEnrollmentFactorEnum": ".guardian_enrollment_factor_enum",
+ "GuardianEnrollmentStatus": ".guardian_enrollment_status",
+ "GuardianFactor": ".guardian_factor",
+ "GuardianFactorNameEnum": ".guardian_factor_name_enum",
+ "GuardianFactorPhoneFactorMessageTypeEnum": ".guardian_factor_phone_factor_message_type_enum",
+ "GuardianFactorsProviderPushNotificationProviderDataEnum": ".guardian_factors_provider_push_notification_provider_data_enum",
+ "GuardianFactorsProviderSmsProviderEnum": ".guardian_factors_provider_sms_provider_enum",
+ "Hook": ".hook",
+ "HookDependencies": ".hook_dependencies",
+ "HookTriggerIdEnum": ".hook_trigger_id_enum",
+ "HttpCustomHeader": ".http_custom_header",
+ "Identity": ".identity",
+ "IdentityProviderEnum": ".identity_provider_enum",
+ "IdentityProviderOnlyAuth0Enum": ".identity_provider_only_auth_0_enum",
+ "ImportEncryptionKeyResponseContent": ".import_encryption_key_response_content",
+ "Integration": ".integration",
+ "IntegrationFeatureTypeEnum": ".integration_feature_type_enum",
+ "IntegrationRelease": ".integration_release",
+ "IntegrationRequiredParam": ".integration_required_param",
+ "IntegrationRequiredParamOption": ".integration_required_param_option",
+ "IntegrationRequiredParamTypeEnum": ".integration_required_param_type_enum",
+ "IntegrationSemVer": ".integration_sem_ver",
+ "JobFileFormatEnum": ".job_file_format_enum",
+ "LinkedClientConfiguration": ".linked_client_configuration",
+ "ListActionBindingsPaginatedResponseContent": ".list_action_bindings_paginated_response_content",
+ "ListActionTriggersResponseContent": ".list_action_triggers_response_content",
+ "ListActionVersionsPaginatedResponseContent": ".list_action_versions_paginated_response_content",
+ "ListActionsPaginatedResponseContent": ".list_actions_paginated_response_content",
+ "ListAculsOffsetPaginatedResponseContent": ".list_aculs_offset_paginated_response_content",
+ "ListBrandingPhoneProvidersResponseContent": ".list_branding_phone_providers_response_content",
+ "ListClientConnectionsResponseContent": ".list_client_connections_response_content",
+ "ListClientGrantOrganizationsPaginatedResponseContent": ".list_client_grant_organizations_paginated_response_content",
+ "ListClientGrantPaginatedResponseContent": ".list_client_grant_paginated_response_content",
+ "ListClientsOffsetPaginatedResponseContent": ".list_clients_offset_paginated_response_content",
+ "ListConnectionProfileTemplateResponseContent": ".list_connection_profile_template_response_content",
+ "ListConnectionProfilesPaginatedResponseContent": ".list_connection_profiles_paginated_response_content",
+ "ListConnectionsCheckpointPaginatedResponseContent": ".list_connections_checkpoint_paginated_response_content",
+ "ListCustomDomainsResponseContent": ".list_custom_domains_response_content",
+ "ListDeviceCredentialsOffsetPaginatedResponseContent": ".list_device_credentials_offset_paginated_response_content",
+ "ListEncryptionKeyOffsetPaginatedResponseContent": ".list_encryption_key_offset_paginated_response_content",
+ "ListFlowExecutionsPaginatedResponseContent": ".list_flow_executions_paginated_response_content",
+ "ListFlowsOffsetPaginatedResponseContent": ".list_flows_offset_paginated_response_content",
+ "ListFlowsVaultConnectionsOffsetPaginatedResponseContent": ".list_flows_vault_connections_offset_paginated_response_content",
+ "ListFormsOffsetPaginatedResponseContent": ".list_forms_offset_paginated_response_content",
+ "ListGuardianPoliciesResponseContent": ".list_guardian_policies_response_content",
+ "ListHooksOffsetPaginatedResponseContent": ".list_hooks_offset_paginated_response_content",
+ "ListLogOffsetPaginatedResponseContent": ".list_log_offset_paginated_response_content",
+ "ListNetworkAclsOffsetPaginatedResponseContent": ".list_network_acls_offset_paginated_response_content",
+ "ListOrganizationClientGrantsOffsetPaginatedResponseContent": ".list_organization_client_grants_offset_paginated_response_content",
+ "ListOrganizationConnectionsOffsetPaginatedResponseContent": ".list_organization_connections_offset_paginated_response_content",
+ "ListOrganizationDiscoveryDomainsResponseContent": ".list_organization_discovery_domains_response_content",
+ "ListOrganizationInvitationsOffsetPaginatedResponseContent": ".list_organization_invitations_offset_paginated_response_content",
+ "ListOrganizationMemberRolesOffsetPaginatedResponseContent": ".list_organization_member_roles_offset_paginated_response_content",
+ "ListOrganizationMembersPaginatedResponseContent": ".list_organization_members_paginated_response_content",
+ "ListOrganizationsPaginatedResponseContent": ".list_organizations_paginated_response_content",
+ "ListPhoneTemplatesResponseContent": ".list_phone_templates_response_content",
+ "ListRefreshTokensPaginatedResponseContent": ".list_refresh_tokens_paginated_response_content",
+ "ListResourceServerOffsetPaginatedResponseContent": ".list_resource_server_offset_paginated_response_content",
+ "ListRolePermissionsOffsetPaginatedResponseContent": ".list_role_permissions_offset_paginated_response_content",
+ "ListRoleUsersPaginatedResponseContent": ".list_role_users_paginated_response_content",
+ "ListRolesOffsetPaginatedResponseContent": ".list_roles_offset_paginated_response_content",
+ "ListRulesOffsetPaginatedResponseContent": ".list_rules_offset_paginated_response_content",
+ "ListSelfServiceProfileCustomTextResponseContent": ".list_self_service_profile_custom_text_response_content",
+ "ListSelfServiceProfilesPaginatedResponseContent": ".list_self_service_profiles_paginated_response_content",
+ "ListTokenExchangeProfileResponseContent": ".list_token_exchange_profile_response_content",
+ "ListUserAttributeProfileTemplateResponseContent": ".list_user_attribute_profile_template_response_content",
+ "ListUserAttributeProfilesPaginatedResponseContent": ".list_user_attribute_profiles_paginated_response_content",
+ "ListUserAuthenticationMethodsOffsetPaginatedResponseContent": ".list_user_authentication_methods_offset_paginated_response_content",
+ "ListUserBlocksByIdentifierResponseContent": ".list_user_blocks_by_identifier_response_content",
+ "ListUserBlocksResponseContent": ".list_user_blocks_response_content",
+ "ListUserConnectedAccountsResponseContent": ".list_user_connected_accounts_response_content",
+ "ListUserGrantsOffsetPaginatedResponseContent": ".list_user_grants_offset_paginated_response_content",
+ "ListUserOrganizationsOffsetPaginatedResponseContent": ".list_user_organizations_offset_paginated_response_content",
+ "ListUserPermissionsOffsetPaginatedResponseContent": ".list_user_permissions_offset_paginated_response_content",
+ "ListUserRolesOffsetPaginatedResponseContent": ".list_user_roles_offset_paginated_response_content",
+ "ListUserSessionsPaginatedResponseContent": ".list_user_sessions_paginated_response_content",
+ "ListUsersOffsetPaginatedResponseContent": ".list_users_offset_paginated_response_content",
+ "ListVerifiableCredentialTemplatesPaginatedResponseContent": ".list_verifiable_credential_templates_paginated_response_content",
+ "Log": ".log",
+ "LogDate": ".log_date",
+ "LogDateObject": ".log_date_object",
+ "LogDetails": ".log_details",
+ "LogLocationInfo": ".log_location_info",
+ "LogSecurityContext": ".log_security_context",
+ "LogStreamDatadogEnum": ".log_stream_datadog_enum",
+ "LogStreamDatadogRegionEnum": ".log_stream_datadog_region_enum",
+ "LogStreamDatadogResponseSchema": ".log_stream_datadog_response_schema",
+ "LogStreamDatadogSink": ".log_stream_datadog_sink",
+ "LogStreamEventBridgeEnum": ".log_stream_event_bridge_enum",
+ "LogStreamEventBridgeResponseSchema": ".log_stream_event_bridge_response_schema",
+ "LogStreamEventBridgeSink": ".log_stream_event_bridge_sink",
+ "LogStreamEventBridgeSinkRegionEnum": ".log_stream_event_bridge_sink_region_enum",
+ "LogStreamEventGridEnum": ".log_stream_event_grid_enum",
+ "LogStreamEventGridRegionEnum": ".log_stream_event_grid_region_enum",
+ "LogStreamEventGridResponseSchema": ".log_stream_event_grid_response_schema",
+ "LogStreamEventGridSink": ".log_stream_event_grid_sink",
+ "LogStreamFilter": ".log_stream_filter",
+ "LogStreamFilterGroupNameEnum": ".log_stream_filter_group_name_enum",
+ "LogStreamFilterTypeEnum": ".log_stream_filter_type_enum",
+ "LogStreamHttpContentFormatEnum": ".log_stream_http_content_format_enum",
+ "LogStreamHttpEnum": ".log_stream_http_enum",
+ "LogStreamHttpResponseSchema": ".log_stream_http_response_schema",
+ "LogStreamHttpSink": ".log_stream_http_sink",
+ "LogStreamMixpanelEnum": ".log_stream_mixpanel_enum",
+ "LogStreamMixpanelRegionEnum": ".log_stream_mixpanel_region_enum",
+ "LogStreamMixpanelResponseSchema": ".log_stream_mixpanel_response_schema",
+ "LogStreamMixpanelSink": ".log_stream_mixpanel_sink",
+ "LogStreamMixpanelSinkPatch": ".log_stream_mixpanel_sink_patch",
+ "LogStreamPiiAlgorithmEnum": ".log_stream_pii_algorithm_enum",
+ "LogStreamPiiConfig": ".log_stream_pii_config",
+ "LogStreamPiiLogFieldsEnum": ".log_stream_pii_log_fields_enum",
+ "LogStreamPiiMethodEnum": ".log_stream_pii_method_enum",
+ "LogStreamResponseSchema": ".log_stream_response_schema",
+ "LogStreamSegmentEnum": ".log_stream_segment_enum",
+ "LogStreamSegmentResponseSchema": ".log_stream_segment_response_schema",
+ "LogStreamSegmentSink": ".log_stream_segment_sink",
+ "LogStreamSegmentSinkWriteKey": ".log_stream_segment_sink_write_key",
+ "LogStreamSinkPatch": ".log_stream_sink_patch",
+ "LogStreamSplunkEnum": ".log_stream_splunk_enum",
+ "LogStreamSplunkResponseSchema": ".log_stream_splunk_response_schema",
+ "LogStreamSplunkSink": ".log_stream_splunk_sink",
+ "LogStreamStatusEnum": ".log_stream_status_enum",
+ "LogStreamSumoEnum": ".log_stream_sumo_enum",
+ "LogStreamSumoResponseSchema": ".log_stream_sumo_response_schema",
+ "LogStreamSumoSink": ".log_stream_sumo_sink",
+ "MdlPresentationProperties": ".mdl_presentation_properties",
+ "MdlPresentationRequest": ".mdl_presentation_request",
+ "MdlPresentationRequestProperties": ".mdl_presentation_request_properties",
+ "MfaPolicyEnum": ".mfa_policy_enum",
+ "NativeSocialLogin": ".native_social_login",
+ "NativeSocialLoginApple": ".native_social_login_apple",
+ "NativeSocialLoginFacebook": ".native_social_login_facebook",
+ "NativeSocialLoginGoogle": ".native_social_login_google",
+ "NetworkAclAction": ".network_acl_action",
+ "NetworkAclActionAllowEnum": ".network_acl_action_allow_enum",
+ "NetworkAclActionBlockEnum": ".network_acl_action_block_enum",
+ "NetworkAclActionLogEnum": ".network_acl_action_log_enum",
+ "NetworkAclActionRedirectEnum": ".network_acl_action_redirect_enum",
+ "NetworkAclMatch": ".network_acl_match",
+ "NetworkAclMatchIpv4Cidr": ".network_acl_match_ipv_4_cidr",
+ "NetworkAclMatchIpv6Cidr": ".network_acl_match_ipv_6_cidr",
+ "NetworkAclRule": ".network_acl_rule",
+ "NetworkAclRuleScopeEnum": ".network_acl_rule_scope_enum",
+ "NetworkAclsResponseContent": ".network_acls_response_content",
+ "OauthScope": ".oauth_scope",
+ "Organization": ".organization",
+ "OrganizationBranding": ".organization_branding",
+ "OrganizationBrandingColors": ".organization_branding_colors",
+ "OrganizationClientGrant": ".organization_client_grant",
+ "OrganizationConnection": ".organization_connection",
+ "OrganizationConnectionInformation": ".organization_connection_information",
+ "OrganizationDiscoveryDomain": ".organization_discovery_domain",
+ "OrganizationDiscoveryDomainStatus": ".organization_discovery_domain_status",
+ "OrganizationEnabledConnection": ".organization_enabled_connection",
+ "OrganizationInvitation": ".organization_invitation",
+ "OrganizationInvitationInvitee": ".organization_invitation_invitee",
+ "OrganizationInvitationInviter": ".organization_invitation_inviter",
+ "OrganizationMember": ".organization_member",
+ "OrganizationMemberRole": ".organization_member_role",
+ "OrganizationMetadata": ".organization_metadata",
+ "OrganizationUsageEnum": ".organization_usage_enum",
+ "PartialGroupsEnum": ".partial_groups_enum",
+ "PartialPhoneTemplateContent": ".partial_phone_template_content",
+ "PatchClientCredentialResponseContent": ".patch_client_credential_response_content",
+ "PatchSupplementalSignalsResponseContent": ".patch_supplemental_signals_response_content",
+ "PermissionRequestPayload": ".permission_request_payload",
+ "PermissionsResponsePayload": ".permissions_response_payload",
+ "PhoneAttribute": ".phone_attribute",
+ "PhoneProviderChannelEnum": ".phone_provider_channel_enum",
+ "PhoneProviderConfiguration": ".phone_provider_configuration",
+ "PhoneProviderCredentials": ".phone_provider_credentials",
+ "PhoneProviderDeliveryMethodEnum": ".phone_provider_delivery_method_enum",
+ "PhoneProviderNameEnum": ".phone_provider_name_enum",
+ "PhoneProviderSchemaMasked": ".phone_provider_schema_masked",
+ "PhoneTemplate": ".phone_template",
+ "PhoneTemplateBody": ".phone_template_body",
+ "PhoneTemplateContent": ".phone_template_content",
+ "PhoneTemplateNotificationTypeEnum": ".phone_template_notification_type_enum",
+ "PostClientCredentialResponseContent": ".post_client_credential_response_content",
+ "PreferredAuthenticationMethodEnum": ".preferred_authentication_method_enum",
+ "PrivateKeyJwt": ".private_key_jwt",
+ "PrivateKeyJwtCredentials": ".private_key_jwt_credentials",
+ "PromptGroupNameEnum": ".prompt_group_name_enum",
+ "PromptLanguageEnum": ".prompt_language_enum",
+ "PublicKeyCredential": ".public_key_credential",
+ "PublicKeyCredentialAlgorithmEnum": ".public_key_credential_algorithm_enum",
+ "PublicKeyCredentialTypeEnum": ".public_key_credential_type_enum",
+ "RefreshTokenDate": ".refresh_token_date",
+ "RefreshTokenDateObject": ".refresh_token_date_object",
+ "RefreshTokenDevice": ".refresh_token_device",
+ "RefreshTokenExpirationTypeEnum": ".refresh_token_expiration_type_enum",
+ "RefreshTokenResourceServer": ".refresh_token_resource_server",
+ "RefreshTokenResponseContent": ".refresh_token_response_content",
+ "RefreshTokenRotationTypeEnum": ".refresh_token_rotation_type_enum",
+ "RefreshTokenSessionId": ".refresh_token_session_id",
+ "RegenerateUsersRecoveryCodeResponseContent": ".regenerate_users_recovery_code_response_content",
+ "ResetPhoneTemplateRequestContent": ".reset_phone_template_request_content",
+ "ResetPhoneTemplateResponseContent": ".reset_phone_template_response_content",
+ "ResourceServer": ".resource_server",
+ "ResourceServerConsentPolicyEnum": ".resource_server_consent_policy_enum",
+ "ResourceServerProofOfPossession": ".resource_server_proof_of_possession",
+ "ResourceServerProofOfPossessionMechanismEnum": ".resource_server_proof_of_possession_mechanism_enum",
+ "ResourceServerScope": ".resource_server_scope",
+ "ResourceServerSubjectTypeAuthorization": ".resource_server_subject_type_authorization",
+ "ResourceServerSubjectTypeAuthorizationClient": ".resource_server_subject_type_authorization_client",
+ "ResourceServerSubjectTypeAuthorizationClientPolicyEnum": ".resource_server_subject_type_authorization_client_policy_enum",
+ "ResourceServerSubjectTypeAuthorizationUser": ".resource_server_subject_type_authorization_user",
+ "ResourceServerSubjectTypeAuthorizationUserPolicyEnum": ".resource_server_subject_type_authorization_user_policy_enum",
+ "ResourceServerTokenDialectResponseEnum": ".resource_server_token_dialect_response_enum",
+ "ResourceServerTokenDialectSchemaEnum": ".resource_server_token_dialect_schema_enum",
+ "ResourceServerTokenEncryption": ".resource_server_token_encryption",
+ "ResourceServerTokenEncryptionAlgorithmEnum": ".resource_server_token_encryption_algorithm_enum",
+ "ResourceServerTokenEncryptionFormatEnum": ".resource_server_token_encryption_format_enum",
+ "ResourceServerTokenEncryptionKey": ".resource_server_token_encryption_key",
+ "ResourceServerVerificationKeyPemCertificate": ".resource_server_verification_key_pem_certificate",
+ "RevokedSigningKeysResponseContent": ".revoked_signing_keys_response_content",
+ "Role": ".role",
+ "RoleUser": ".role_user",
+ "RotateClientSecretResponseContent": ".rotate_client_secret_response_content",
+ "RotateConnectionKeysRequestContent": ".rotate_connection_keys_request_content",
+ "RotateConnectionKeysSigningAlgEnum": ".rotate_connection_keys_signing_alg_enum",
+ "RotateConnectionsKeysResponseContent": ".rotate_connections_keys_response_content",
+ "RotateSigningKeysResponseContent": ".rotate_signing_keys_response_content",
+ "Rule": ".rule",
+ "RulesConfig": ".rules_config",
+ "ScimMappingItem": ".scim_mapping_item",
+ "ScimTokenItem": ".scim_token_item",
+ "ScreenGroupNameEnum": ".screen_group_name_enum",
+ "SearchEngineVersionsEnum": ".search_engine_versions_enum",
+ "SelfServiceProfile": ".self_service_profile",
+ "SelfServiceProfileAllowedStrategyEnum": ".self_service_profile_allowed_strategy_enum",
+ "SelfServiceProfileBranding": ".self_service_profile_branding",
+ "SelfServiceProfileBrandingColors": ".self_service_profile_branding_colors",
+ "SelfServiceProfileBrandingProperties": ".self_service_profile_branding_properties",
+ "SelfServiceProfileCustomTextLanguageEnum": ".self_service_profile_custom_text_language_enum",
+ "SelfServiceProfileCustomTextPageEnum": ".self_service_profile_custom_text_page_enum",
+ "SelfServiceProfileDescription": ".self_service_profile_description",
+ "SelfServiceProfileSsoTicketConnectionConfig": ".self_service_profile_sso_ticket_connection_config",
+ "SelfServiceProfileSsoTicketConnectionOptions": ".self_service_profile_sso_ticket_connection_options",
+ "SelfServiceProfileSsoTicketDomainAliasesConfig": ".self_service_profile_sso_ticket_domain_aliases_config",
+ "SelfServiceProfileSsoTicketDomainVerificationEnum": ".self_service_profile_sso_ticket_domain_verification_enum",
+ "SelfServiceProfileSsoTicketEnabledOrganization": ".self_service_profile_sso_ticket_enabled_organization",
+ "SelfServiceProfileSsoTicketGoogleWorkspaceConfig": ".self_service_profile_sso_ticket_google_workspace_config",
+ "SelfServiceProfileSsoTicketIdpInitiatedClientProtocolEnum": ".self_service_profile_sso_ticket_idp_initiated_client_protocol_enum",
+ "SelfServiceProfileSsoTicketIdpInitiatedOptions": ".self_service_profile_sso_ticket_idp_initiated_options",
+ "SelfServiceProfileSsoTicketProvisioningConfig": ".self_service_profile_sso_ticket_provisioning_config",
+ "SelfServiceProfileSsoTicketProvisioningScopeEnum": ".self_service_profile_sso_ticket_provisioning_scope_enum",
+ "SelfServiceProfileUserAttribute": ".self_service_profile_user_attribute",
+ "SelfServiceProfileUserAttributes": ".self_service_profile_user_attributes",
+ "SessionAuthenticationSignal": ".session_authentication_signal",
+ "SessionAuthenticationSignals": ".session_authentication_signals",
+ "SessionClientMetadata": ".session_client_metadata",
+ "SessionCookieMetadata": ".session_cookie_metadata",
+ "SessionCookieMetadataModeEnum": ".session_cookie_metadata_mode_enum",
+ "SessionCookieModeEnum": ".session_cookie_mode_enum",
+ "SessionCookieSchema": ".session_cookie_schema",
+ "SessionDate": ".session_date",
+ "SessionDeviceMetadata": ".session_device_metadata",
+ "SessionIp": ".session_ip",
+ "SessionMetadata": ".session_metadata",
+ "SessionResponseContent": ".session_response_content",
+ "SetCustomSigningKeysResponseContent": ".set_custom_signing_keys_response_content",
+ "SetEmailTemplateResponseContent": ".set_email_template_response_content",
+ "SetGuardianFactorDuoSettingsResponseContent": ".set_guardian_factor_duo_settings_response_content",
+ "SetGuardianFactorPhoneMessageTypesResponseContent": ".set_guardian_factor_phone_message_types_response_content",
+ "SetGuardianFactorPhoneTemplatesResponseContent": ".set_guardian_factor_phone_templates_response_content",
+ "SetGuardianFactorResponseContent": ".set_guardian_factor_response_content",
+ "SetGuardianFactorSmsTemplatesResponseContent": ".set_guardian_factor_sms_templates_response_content",
+ "SetGuardianFactorsProviderPhoneResponseContent": ".set_guardian_factors_provider_phone_response_content",
+ "SetGuardianFactorsProviderPhoneTwilioResponseContent": ".set_guardian_factors_provider_phone_twilio_response_content",
+ "SetGuardianFactorsProviderPushNotificationApnsRequestContent": ".set_guardian_factors_provider_push_notification_apns_request_content",
+ "SetGuardianFactorsProviderPushNotificationApnsResponseContent": ".set_guardian_factors_provider_push_notification_apns_response_content",
+ "SetGuardianFactorsProviderPushNotificationFcmRequestContent": ".set_guardian_factors_provider_push_notification_fcm_request_content",
+ "SetGuardianFactorsProviderPushNotificationFcmResponseContent": ".set_guardian_factors_provider_push_notification_fcm_response_content",
+ "SetGuardianFactorsProviderPushNotificationFcmv1RequestContent": ".set_guardian_factors_provider_push_notification_fcmv_1_request_content",
+ "SetGuardianFactorsProviderPushNotificationFcmv1ResponseContent": ".set_guardian_factors_provider_push_notification_fcmv_1_response_content",
+ "SetGuardianFactorsProviderPushNotificationResponseContent": ".set_guardian_factors_provider_push_notification_response_content",
+ "SetGuardianFactorsProviderPushNotificationSnsResponseContent": ".set_guardian_factors_provider_push_notification_sns_response_content",
+ "SetGuardianFactorsProviderSmsResponseContent": ".set_guardian_factors_provider_sms_response_content",
+ "SetGuardianFactorsProviderSmsTwilioResponseContent": ".set_guardian_factors_provider_sms_twilio_response_content",
+ "SetGuardianPoliciesRequestContent": ".set_guardian_policies_request_content",
+ "SetGuardianPoliciesResponseContent": ".set_guardian_policies_response_content",
+ "SetNetworkAclsResponseContent": ".set_network_acls_response_content",
+ "SetPartialsRequestContent": ".set_partials_request_content",
+ "SetRulesConfigResponseContent": ".set_rules_config_response_content",
+ "SetSelfServiceProfileCustomTextRequestContent": ".set_self_service_profile_custom_text_request_content",
+ "SetSelfServiceProfileCustomTextResponseContent": ".set_self_service_profile_custom_text_response_content",
+ "SetUserAuthenticationMethodResponseContent": ".set_user_authentication_method_response_content",
+ "SetUserAuthenticationMethods": ".set_user_authentication_methods",
+ "SetUserAuthenticationMethodsRequestContent": ".set_user_authentication_methods_request_content",
+ "SetsCustomTextsByLanguageRequestContent": ".sets_custom_texts_by_language_request_content",
+ "SigningAlgorithmEnum": ".signing_algorithm_enum",
+ "SigningKeys": ".signing_keys",
+ "SigningKeysDate": ".signing_keys_date",
+ "SignupSchema": ".signup_schema",
+ "SignupStatusEnum": ".signup_status_enum",
+ "SignupVerification": ".signup_verification",
+ "SignupVerified": ".signup_verified",
+ "SupportedLocales": ".supported_locales",
+ "SuspiciousIpThrottlingAllowlist": ".suspicious_ip_throttling_allowlist",
+ "SuspiciousIpThrottlingAllowlistItem": ".suspicious_ip_throttling_allowlist_item",
+ "SuspiciousIpThrottlingPreLoginStage": ".suspicious_ip_throttling_pre_login_stage",
+ "SuspiciousIpThrottlingPreUserRegistrationStage": ".suspicious_ip_throttling_pre_user_registration_stage",
+ "SuspiciousIpThrottlingShieldsEnum": ".suspicious_ip_throttling_shields_enum",
+ "SuspiciousIpThrottlingStage": ".suspicious_ip_throttling_stage",
+ "TenantOidcLogoutSettings": ".tenant_oidc_logout_settings",
+ "TenantSettingsDeviceFlow": ".tenant_settings_device_flow",
+ "TenantSettingsDeviceFlowCharset": ".tenant_settings_device_flow_charset",
+ "TenantSettingsErrorPage": ".tenant_settings_error_page",
+ "TenantSettingsFlags": ".tenant_settings_flags",
+ "TenantSettingsGuardianPage": ".tenant_settings_guardian_page",
+ "TenantSettingsMtls": ".tenant_settings_mtls",
+ "TenantSettingsPasswordPage": ".tenant_settings_password_page",
+ "TenantSettingsResourceParameterProfile": ".tenant_settings_resource_parameter_profile",
+ "TenantSettingsSessions": ".tenant_settings_sessions",
+ "TestActionPayload": ".test_action_payload",
+ "TestActionResponseContent": ".test_action_response_content",
+ "TestActionResultPayload": ".test_action_result_payload",
+ "TestCustomDomainResponseContent": ".test_custom_domain_response_content",
+ "TestEventDataContent": ".test_event_data_content",
+ "TokenExchangeProfileResponseContent": ".token_exchange_profile_response_content",
+ "TokenExchangeProfileTypeEnum": ".token_exchange_profile_type_enum",
+ "TokenQuota": ".token_quota",
+ "TokenQuotaClientCredentials": ".token_quota_client_credentials",
+ "TokenQuotaConfiguration": ".token_quota_configuration",
+ "TwilioProviderConfiguration": ".twilio_provider_configuration",
+ "TwilioProviderCredentials": ".twilio_provider_credentials",
+ "TwilioProviderDeliveryMethodEnum": ".twilio_provider_delivery_method_enum",
+ "UniversalLoginExperienceEnum": ".universal_login_experience_enum",
+ "UpdateActionBindingsResponseContent": ".update_action_bindings_response_content",
+ "UpdateActionResponseContent": ".update_action_response_content",
+ "UpdateAculResponseContent": ".update_acul_response_content",
+ "UpdateAttackProtectionCaptchaResponseContent": ".update_attack_protection_captcha_response_content",
+ "UpdateBotDetectionSettingsResponseContent": ".update_bot_detection_settings_response_content",
+ "UpdateBrandingColors": ".update_branding_colors",
+ "UpdateBrandingFont": ".update_branding_font",
+ "UpdateBrandingPageBackground": ".update_branding_page_background",
+ "UpdateBrandingPhoneProviderResponseContent": ".update_branding_phone_provider_response_content",
+ "UpdateBrandingResponseContent": ".update_branding_response_content",
+ "UpdateBrandingThemeResponseContent": ".update_branding_theme_response_content",
+ "UpdateBreachedPasswordDetectionSettingsResponseContent": ".update_breached_password_detection_settings_response_content",
+ "UpdateBruteForceSettingsResponseContent": ".update_brute_force_settings_response_content",
+ "UpdateBruteForceSettingsResponseContentMode": ".update_brute_force_settings_response_content_mode",
+ "UpdateBruteForceSettingsResponseContentShieldsItem": ".update_brute_force_settings_response_content_shields_item",
+ "UpdateClientGrantResponseContent": ".update_client_grant_response_content",
+ "UpdateClientResponseContent": ".update_client_response_content",
+ "UpdateConnectionOptions": ".update_connection_options",
+ "UpdateConnectionProfileResponseContent": ".update_connection_profile_response_content",
+ "UpdateConnectionResponseContent": ".update_connection_response_content",
+ "UpdateCustomDomainResponseContent": ".update_custom_domain_response_content",
+ "UpdateDirectoryProvisioningRequestContent": ".update_directory_provisioning_request_content",
+ "UpdateDirectoryProvisioningResponseContent": ".update_directory_provisioning_response_content",
+ "UpdateEmailProviderResponseContent": ".update_email_provider_response_content",
+ "UpdateEmailTemplateResponseContent": ".update_email_template_response_content",
+ "UpdateEnabledClientConnectionsRequestContent": ".update_enabled_client_connections_request_content",
+ "UpdateEnabledClientConnectionsRequestContentItem": ".update_enabled_client_connections_request_content_item",
+ "UpdateEventStreamResponseContent": ".update_event_stream_response_content",
+ "UpdateFlowResponseContent": ".update_flow_response_content",
+ "UpdateFlowsVaultConnectionResponseContent": ".update_flows_vault_connection_response_content",
+ "UpdateFlowsVaultConnectionSetup": ".update_flows_vault_connection_setup",
+ "UpdateFormResponseContent": ".update_form_response_content",
+ "UpdateGuardianFactorDuoSettingsResponseContent": ".update_guardian_factor_duo_settings_response_content",
+ "UpdateGuardianFactorsProviderPushNotificationSnsResponseContent": ".update_guardian_factors_provider_push_notification_sns_response_content",
+ "UpdateHookResponseContent": ".update_hook_response_content",
+ "UpdateHookSecretRequestContent": ".update_hook_secret_request_content",
+ "UpdateLogStreamResponseContent": ".update_log_stream_response_content",
+ "UpdateNetworkAclResponseContent": ".update_network_acl_response_content",
+ "UpdateOrganizationConnectionResponseContent": ".update_organization_connection_response_content",
+ "UpdateOrganizationDiscoveryDomainResponseContent": ".update_organization_discovery_domain_response_content",
+ "UpdateOrganizationResponseContent": ".update_organization_response_content",
+ "UpdatePhoneTemplateResponseContent": ".update_phone_template_response_content",
+ "UpdateResourceServerResponseContent": ".update_resource_server_response_content",
+ "UpdateRiskAssessmentsSettingsNewDeviceResponseContent": ".update_risk_assessments_settings_new_device_response_content",
+ "UpdateRiskAssessmentsSettingsResponseContent": ".update_risk_assessments_settings_response_content",
+ "UpdateRoleResponseContent": ".update_role_response_content",
+ "UpdateRuleResponseContent": ".update_rule_response_content",
+ "UpdateScimConfigurationResponseContent": ".update_scim_configuration_response_content",
+ "UpdateSelfServiceProfileResponseContent": ".update_self_service_profile_response_content",
+ "UpdateSessionResponseContent": ".update_session_response_content",
+ "UpdateSettingsResponseContent": ".update_settings_response_content",
+ "UpdateSuspiciousIpThrottlingSettingsResponseContent": ".update_suspicious_ip_throttling_settings_response_content",
+ "UpdateTenantSettingsResponseContent": ".update_tenant_settings_response_content",
+ "UpdateTokenQuota": ".update_token_quota",
+ "UpdateUniversalLoginTemplateRequestContent": ".update_universal_login_template_request_content",
+ "UpdateUniversalLoginTemplateRequestContentTemplate": ".update_universal_login_template_request_content_template",
+ "UpdateUserAttributeProfileResponseContent": ".update_user_attribute_profile_response_content",
+ "UpdateUserAuthenticationMethodResponseContent": ".update_user_authentication_method_response_content",
+ "UpdateUserResponseContent": ".update_user_response_content",
+ "UpdateVerifiableCredentialTemplateResponseContent": ".update_verifiable_credential_template_response_content",
+ "UserAppMetadataSchema": ".user_app_metadata_schema",
+ "UserAttributeProfile": ".user_attribute_profile",
+ "UserAttributeProfileId": ".user_attribute_profile_id",
+ "UserAttributeProfileName": ".user_attribute_profile_name",
+ "UserAttributeProfileOidcMapping": ".user_attribute_profile_oidc_mapping",
+ "UserAttributeProfilePatchUserId": ".user_attribute_profile_patch_user_id",
+ "UserAttributeProfileSamlMapping": ".user_attribute_profile_saml_mapping",
+ "UserAttributeProfileStrategyOverrides": ".user_attribute_profile_strategy_overrides",
+ "UserAttributeProfileStrategyOverridesMapping": ".user_attribute_profile_strategy_overrides_mapping",
+ "UserAttributeProfileStrategyOverridesUserId": ".user_attribute_profile_strategy_overrides_user_id",
+ "UserAttributeProfileStrategyOverridesUserIdMapping": ".user_attribute_profile_strategy_overrides_user_id_mapping",
+ "UserAttributeProfileTemplate": ".user_attribute_profile_template",
+ "UserAttributeProfileTemplateItem": ".user_attribute_profile_template_item",
+ "UserAttributeProfileUserAttributeAdditionalProperties": ".user_attribute_profile_user_attribute_additional_properties",
+ "UserAttributeProfileUserAttributes": ".user_attribute_profile_user_attributes",
+ "UserAttributeProfileUserId": ".user_attribute_profile_user_id",
+ "UserAttributeProfileUserIdOidcMappingEnum": ".user_attribute_profile_user_id_oidc_mapping_enum",
+ "UserAttributeProfileUserIdOidcStrategyOverrideMapping": ".user_attribute_profile_user_id_oidc_strategy_override_mapping",
+ "UserAttributeProfileUserIdSamlMapping": ".user_attribute_profile_user_id_saml_mapping",
+ "UserAuthenticationMethod": ".user_authentication_method",
+ "UserAuthenticationMethodProperties": ".user_authentication_method_properties",
+ "UserAuthenticationMethodPropertiesEnum": ".user_authentication_method_properties_enum",
+ "UserBlockIdentifier": ".user_block_identifier",
+ "UserDateSchema": ".user_date_schema",
+ "UserEnrollmentAuthMethodEnum": ".user_enrollment_auth_method_enum",
+ "UserEnrollmentStatusEnum": ".user_enrollment_status_enum",
+ "UserGrant": ".user_grant",
+ "UserGroupsResponseSchema": ".user_groups_response_schema",
+ "UserId": ".user_id",
+ "UserIdentity": ".user_identity",
+ "UserIdentityProviderEnum": ".user_identity_provider_enum",
+ "UserIdentitySchema": ".user_identity_schema",
+ "UserListLogOffsetPaginatedResponseContent": ".user_list_log_offset_paginated_response_content",
+ "UserMetadata": ".user_metadata",
+ "UserMetadataSchema": ".user_metadata_schema",
+ "UserMultifactorProviderEnum": ".user_multifactor_provider_enum",
+ "UserPermissionSchema": ".user_permission_schema",
+ "UserProfileData": ".user_profile_data",
+ "UserResponseSchema": ".user_response_schema",
+ "UsernameAllowedTypes": ".username_allowed_types",
+ "UsernameAttribute": ".username_attribute",
+ "UsernameValidation": ".username_validation",
+ "UsersEnrollment": ".users_enrollment",
+ "VerifiableCredentialTemplateResponse": ".verifiable_credential_template_response",
+ "VerificationMethodEnum": ".verification_method_enum",
+ "VerifyCustomDomainResponseContent": ".verify_custom_domain_response_content",
+ "VerifyEmailTicketResponseContent": ".verify_email_ticket_response_content",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = [
+ "Action",
+ "ActionBase",
+ "ActionBinding",
+ "ActionBindingRef",
+ "ActionBindingRefTypeEnum",
+ "ActionBindingTypeEnum",
+ "ActionBindingWithRef",
+ "ActionBuildStatusEnum",
+ "ActionDeployedVersion",
+ "ActionError",
+ "ActionExecutionResult",
+ "ActionExecutionStatusEnum",
+ "ActionSecretRequest",
+ "ActionSecretResponse",
+ "ActionTrigger",
+ "ActionTriggerCompatibleTrigger",
+ "ActionTriggerTypeEnum",
+ "ActionVersion",
+ "ActionVersionBuildStatusEnum",
+ "ActionVersionDependency",
+ "AculClientFilter",
+ "AculClientFilterById",
+ "AculClientFilterByMetadata",
+ "AculClientMetadata",
+ "AculConfigs",
+ "AculConfigsItem",
+ "AculContextConfiguration",
+ "AculContextConfigurationItem",
+ "AculContextEnum",
+ "AculDefaultHeadTagsDisabled",
+ "AculDomainFilter",
+ "AculDomainFilterById",
+ "AculDomainFilterByMetadata",
+ "AculDomainMetadata",
+ "AculFilters",
+ "AculHeadTag",
+ "AculHeadTagAttributes",
+ "AculHeadTagContent",
+ "AculHeadTags",
+ "AculMatchTypeEnum",
+ "AculOrganizationFilter",
+ "AculOrganizationFilterById",
+ "AculOrganizationFilterByMetadata",
+ "AculOrganizationMetadata",
+ "AculRenderingModeEnum",
+ "AculResponseContent",
+ "AculUsePageTemplate",
+ "AddOrganizationConnectionResponseContent",
+ "AnomalyIpFormat",
+ "AppMetadata",
+ "AssessorsTypeEnum",
+ "AssociateOrganizationClientGrantResponseContent",
+ "AsyncApprovalNotificationsChannelsEnum",
+ "AttackProtectionCaptchaArkoseResponseContent",
+ "AttackProtectionCaptchaAuthChallengeRequest",
+ "AttackProtectionCaptchaAuthChallengeResponseContent",
+ "AttackProtectionCaptchaFriendlyCaptchaResponseContent",
+ "AttackProtectionCaptchaHcaptchaResponseContent",
+ "AttackProtectionCaptchaProviderId",
+ "AttackProtectionCaptchaRecaptchaEnterpriseResponseContent",
+ "AttackProtectionCaptchaRecaptchaV2ResponseContent",
+ "AttackProtectionCaptchaSimpleCaptchaResponseContent",
+ "AttackProtectionUpdateCaptchaArkose",
+ "AttackProtectionUpdateCaptchaFriendlyCaptcha",
+ "AttackProtectionUpdateCaptchaHcaptcha",
+ "AttackProtectionUpdateCaptchaRecaptchaEnterprise",
+ "AttackProtectionUpdateCaptchaRecaptchaV2",
+ "AuthenticationMethodTypeEnum",
+ "AuthenticationTypeEnum",
+ "BotDetectionAllowlist",
+ "BotDetectionChallengePolicyPasswordFlowEnum",
+ "BotDetectionChallengePolicyPasswordResetFlowEnum",
+ "BotDetectionChallengePolicyPasswordlessFlowEnum",
+ "BotDetectionCidrBlock",
+ "BotDetectionIPv4",
+ "BotDetectionIPv6",
+ "BotDetectionIPv6CidrBlock",
+ "BotDetectionIpAddressOrCidrBlock",
+ "BotDetectionLevelEnum",
+ "BotDetectionMonitoringModeEnabled",
+ "BrandingColors",
+ "BrandingFont",
+ "BrandingPageBackground",
+ "BrandingThemeBorders",
+ "BrandingThemeBordersButtonsStyleEnum",
+ "BrandingThemeBordersInputsStyleEnum",
+ "BrandingThemeColors",
+ "BrandingThemeColorsCaptchaWidgetThemeEnum",
+ "BrandingThemeFontBodyText",
+ "BrandingThemeFontButtonsText",
+ "BrandingThemeFontInputLabels",
+ "BrandingThemeFontLinks",
+ "BrandingThemeFontLinksStyleEnum",
+ "BrandingThemeFontSubtitle",
+ "BrandingThemeFontTitle",
+ "BrandingThemeFonts",
+ "BrandingThemePageBackground",
+ "BrandingThemePageBackgroundPageLayoutEnum",
+ "BrandingThemeWidget",
+ "BrandingThemeWidgetHeaderTextAlignmentEnum",
+ "BrandingThemeWidgetLogoPositionEnum",
+ "BrandingThemeWidgetSocialButtonsLayoutEnum",
+ "BreachedPasswordDetectionAdminNotificationFrequencyEnum",
+ "BreachedPasswordDetectionMethodEnum",
+ "BreachedPasswordDetectionPreChangePasswordShieldsEnum",
+ "BreachedPasswordDetectionPreChangePasswordStage",
+ "BreachedPasswordDetectionPreUserRegistrationShieldsEnum",
+ "BreachedPasswordDetectionPreUserRegistrationStage",
+ "BreachedPasswordDetectionShieldsEnum",
+ "BreachedPasswordDetectionStage",
+ "BulkUpdateAculResponseContent",
+ "ChangePasswordTicketIdentity",
+ "ChangePasswordTicketResponseContent",
+ "Client",
+ "ClientAddonAws",
+ "ClientAddonAzureBlob",
+ "ClientAddonAzureSb",
+ "ClientAddonBox",
+ "ClientAddonCloudBees",
+ "ClientAddonConcur",
+ "ClientAddonDropbox",
+ "ClientAddonEchoSign",
+ "ClientAddonEgnyte",
+ "ClientAddonFirebase",
+ "ClientAddonLayer",
+ "ClientAddonMscrm",
+ "ClientAddonNewRelic",
+ "ClientAddonOag",
+ "ClientAddonOffice365",
+ "ClientAddonRms",
+ "ClientAddonSalesforce",
+ "ClientAddonSalesforceApi",
+ "ClientAddonSalesforceSandboxApi",
+ "ClientAddonSaml",
+ "ClientAddonSamlMapping",
+ "ClientAddonSapapi",
+ "ClientAddonSentry",
+ "ClientAddonSharePoint",
+ "ClientAddonSharePointExternalUrl",
+ "ClientAddonSlack",
+ "ClientAddonSpringCm",
+ "ClientAddonSsoIntegration",
+ "ClientAddonWams",
+ "ClientAddonWsFed",
+ "ClientAddonZendesk",
+ "ClientAddonZoom",
+ "ClientAddons",
+ "ClientAppTypeEnum",
+ "ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration",
+ "ClientAsyncApprovalNotificationsChannelsApiPostConfiguration",
+ "ClientAuthenticationMethod",
+ "ClientAuthenticationMethodSelfSignedTlsClientAuth",
+ "ClientAuthenticationMethodTlsClientAuth",
+ "ClientComplianceLevelEnum",
+ "ClientCreateAuthenticationMethod",
+ "ClientCredential",
+ "ClientCredentialAlgorithmEnum",
+ "ClientCredentialTypeEnum",
+ "ClientDefaultOrganization",
+ "ClientDefaultOrganizationFlowsEnum",
+ "ClientEncryptionKey",
+ "ClientGrantAllowAnyOrganizationEnum",
+ "ClientGrantOrganizationNullableUsageEnum",
+ "ClientGrantOrganizationUsageEnum",
+ "ClientGrantResponseContent",
+ "ClientGrantSubjectTypeEnum",
+ "ClientJwtConfiguration",
+ "ClientJwtConfigurationScopes",
+ "ClientMetadata",
+ "ClientMobile",
+ "ClientMobileAndroid",
+ "ClientMobileiOs",
+ "ClientOidcBackchannelLogoutInitiators",
+ "ClientOidcBackchannelLogoutInitiatorsEnum",
+ "ClientOidcBackchannelLogoutInitiatorsModeEnum",
+ "ClientOidcBackchannelLogoutSessionMetadata",
+ "ClientOidcBackchannelLogoutSettings",
+ "ClientOrganizationDiscoveryEnum",
+ "ClientOrganizationRequireBehaviorEnum",
+ "ClientOrganizationRequireBehaviorPatchEnum",
+ "ClientOrganizationUsageEnum",
+ "ClientOrganizationUsagePatchEnum",
+ "ClientRefreshTokenConfiguration",
+ "ClientSessionTransferAllowedAuthenticationMethodsEnum",
+ "ClientSessionTransferConfiguration",
+ "ClientSessionTransferDeviceBindingEnum",
+ "ClientSignedRequestObjectWithCredentialId",
+ "ClientSignedRequestObjectWithPublicKey",
+ "ClientSigningKey",
+ "ClientSigningKeys",
+ "ClientTokenEndpointAuthMethodEnum",
+ "ClientTokenEndpointAuthMethodOrNullEnum",
+ "ClientTokenExchangeConfiguration",
+ "ClientTokenExchangeConfigurationOrNull",
+ "ClientTokenExchangeTypeEnum",
+ "ConnectedAccount",
+ "ConnectedAccountAccessTypeEnum",
+ "ConnectionAcrValuesSupported",
+ "ConnectionAllowedAudiencesGoogleOAuth2",
+ "ConnectionAppDomainAzureAd",
+ "ConnectionAttributeIdentifier",
+ "ConnectionAttributeMapAttributes",
+ "ConnectionAttributeMapOidc",
+ "ConnectionAttributeMapOkta",
+ "ConnectionAttributeMapUserinfoScope",
+ "ConnectionAttributes",
+ "ConnectionAuthParamsAdditionalPropertiesOAuth2",
+ "ConnectionAuthParamsMap",
+ "ConnectionAuthParamsOAuth2",
+ "ConnectionAuthenticationMethods",
+ "ConnectionAuthenticationPurpose",
+ "ConnectionAuthorizationEndpoint",
+ "ConnectionAuthorizationEndpointOAuth2",
+ "ConnectionBruteForceProtection",
+ "ConnectionClaimTypesSupported",
+ "ConnectionClaimsLocalesSupported",
+ "ConnectionClaimsParameterSupported",
+ "ConnectionClaimsSupported",
+ "ConnectionClientId",
+ "ConnectionClientIdAzureAd",
+ "ConnectionClientIdGoogleOAuth2",
+ "ConnectionClientIdOAuth2",
+ "ConnectionClientIdOidc",
+ "ConnectionClientSecret",
+ "ConnectionClientSecretAzureAd",
+ "ConnectionClientSecretGoogleOAuth2",
+ "ConnectionClientSecretOAuth2",
+ "ConnectionClientSecretOidc",
+ "ConnectionCommon",
+ "ConnectionConfiguration",
+ "ConnectionConnectedAccountsPurpose",
+ "ConnectionConnectionSettings",
+ "ConnectionConnectionSettingsPkceEnum",
+ "ConnectionCustomHeadersOAuth2",
+ "ConnectionCustomScripts",
+ "ConnectionDisableSelfServiceChangePassword",
+ "ConnectionDisableSignup",
+ "ConnectionDiscoveryUrl",
+ "ConnectionDisplayName",
+ "ConnectionDisplayValuesSupported",
+ "ConnectionDomainAliasesAzureAd",
+ "ConnectionDomainAliasesOne",
+ "ConnectionDomainOkta",
+ "ConnectionEnableScriptContext",
+ "ConnectionEnabledClient",
+ "ConnectionEnabledClients",
+ "ConnectionEnabledDatabaseCustomization",
+ "ConnectionEndSessionEndpoint",
+ "ConnectionEndSessionEndpointOAuth2",
+ "ConnectionExtAdmin",
+ "ConnectionExtAgreedTerms",
+ "ConnectionExtAssignedPlans",
+ "ConnectionExtGroups",
+ "ConnectionExtIsSuspended",
+ "ConnectionExtProfile",
+ "ConnectionFederatedConnectionsAccessTokens",
+ "ConnectionFieldsMap",
+ "ConnectionForList",
+ "ConnectionForOrganization",
+ "ConnectionFreeformScopesGoogleOAuth2",
+ "ConnectionGatewayAuthentication",
+ "ConnectionGrantTypesSupported",
+ "ConnectionHttpsUrlWithHttpFallback",
+ "ConnectionIconUrl",
+ "ConnectionIconUrlAzureAd",
+ "ConnectionIconUrlGoogleOAuth2",
+ "ConnectionId",
+ "ConnectionIdTokenEncryptionAlgValuesSupported",
+ "ConnectionIdTokenEncryptionEncValuesSupported",
+ "ConnectionIdTokenSignedResponseAlgEnum",
+ "ConnectionIdTokenSignedResponseAlgs",
+ "ConnectionIdTokenSigningAlgValuesSupported",
+ "ConnectionIdentifierPrecedence",
+ "ConnectionIdentifierPrecedenceEnum",
+ "ConnectionIdentityApiAzureAd",
+ "ConnectionIdentityApiEnumAzureAd",
+ "ConnectionIdentityProviderEnum",
+ "ConnectionImportMode",
+ "ConnectionIsDomainConnection",
+ "ConnectionIssuer",
+ "ConnectionJwksUri",
+ "ConnectionKey",
+ "ConnectionKeyUseEnum",
+ "ConnectionMappingModeEnumOidc",
+ "ConnectionMappingModeEnumOkta",
+ "ConnectionMaxGroupsToRetrieve",
+ "ConnectionMfa",
+ "ConnectionName",
+ "ConnectionNamePrefixTemplate",
+ "ConnectionNonPersistentAttrs",
+ "ConnectionOpPolicyUri",
+ "ConnectionOpTosUri",
+ "ConnectionOptions",
+ "ConnectionOptionsAd",
+ "ConnectionOptionsAdfs",
+ "ConnectionOptionsAmazon",
+ "ConnectionOptionsAol",
+ "ConnectionOptionsApple",
+ "ConnectionOptionsAuth0",
+ "ConnectionOptionsAuth0Oidc",
+ "ConnectionOptionsAzureAd",
+ "ConnectionOptionsBaidu",
+ "ConnectionOptionsBitbucket",
+ "ConnectionOptionsBitly",
+ "ConnectionOptionsBox",
+ "ConnectionOptionsCommon",
+ "ConnectionOptionsCommonOidc",
+ "ConnectionOptionsCustom",
+ "ConnectionOptionsDaccount",
+ "ConnectionOptionsDropbox",
+ "ConnectionOptionsDwolla",
+ "ConnectionOptionsEmail",
+ "ConnectionOptionsEvernote",
+ "ConnectionOptionsEvernoteCommon",
+ "ConnectionOptionsEvernoteSandbox",
+ "ConnectionOptionsExact",
+ "ConnectionOptionsFacebook",
+ "ConnectionOptionsFitbit",
+ "ConnectionOptionsFlickr",
+ "ConnectionOptionsGitHub",
+ "ConnectionOptionsGoogleApps",
+ "ConnectionOptionsGoogleOAuth2",
+ "ConnectionOptionsInstagram",
+ "ConnectionOptionsIp",
+ "ConnectionOptionsLine",
+ "ConnectionOptionsLinkedin",
+ "ConnectionOptionsMiicard",
+ "ConnectionOptionsOAuth1",
+ "ConnectionOptionsOAuth2",
+ "ConnectionOptionsOAuth2Common",
+ "ConnectionOptionsOffice365",
+ "ConnectionOptionsOidc",
+ "ConnectionOptionsOidcMetadata",
+ "ConnectionOptionsOkta",
+ "ConnectionOptionsPaypal",
+ "ConnectionOptionsPaypalSandbox",
+ "ConnectionOptionsPingFederate",
+ "ConnectionOptionsPlanningCenter",
+ "ConnectionOptionsRenren",
+ "ConnectionOptionsSalesforce",
+ "ConnectionOptionsSalesforceCommon",
+ "ConnectionOptionsSalesforceCommunity",
+ "ConnectionOptionsSalesforceSandbox",
+ "ConnectionOptionsSaml",
+ "ConnectionOptionsSharepoint",
+ "ConnectionOptionsShop",
+ "ConnectionOptionsShopify",
+ "ConnectionOptionsSms",
+ "ConnectionOptionsSoundcloud",
+ "ConnectionOptionsTheCity",
+ "ConnectionOptionsTheCitySandbox",
+ "ConnectionOptionsThirtySevenSignals",
+ "ConnectionOptionsTwitter",
+ "ConnectionOptionsUntappd",
+ "ConnectionOptionsVkontakte",
+ "ConnectionOptionsWeibo",
+ "ConnectionOptionsWindowsLive",
+ "ConnectionOptionsWordpress",
+ "ConnectionOptionsYahoo",
+ "ConnectionOptionsYammer",
+ "ConnectionOptionsYandex",
+ "ConnectionPasskeyAuthenticationMethod",
+ "ConnectionPasskeyChallengeUiEnum",
+ "ConnectionPasskeyOptions",
+ "ConnectionPasswordAuthenticationMethod",
+ "ConnectionPasswordComplexityOptions",
+ "ConnectionPasswordDictionaryOptions",
+ "ConnectionPasswordHistoryOptions",
+ "ConnectionPasswordNoPersonalInfoOptions",
+ "ConnectionPasswordPolicyEnum",
+ "ConnectionProfile",
+ "ConnectionProfileConfig",
+ "ConnectionProfileEnabledFeatures",
+ "ConnectionProfileId",
+ "ConnectionProfileName",
+ "ConnectionProfileOrganization",
+ "ConnectionProfileOrganizationAssignMembershipOnLoginEnum",
+ "ConnectionProfileOrganizationShowAsButtonEnum",
+ "ConnectionProfileStrategyOverride",
+ "ConnectionProfileStrategyOverrides",
+ "ConnectionProfileStrategyOverridesConnectionConfig",
+ "ConnectionProfileStrategyOverridesEnabledFeatures",
+ "ConnectionProfileTemplate",
+ "ConnectionProfileTemplateItem",
+ "ConnectionPropertiesOptions",
+ "ConnectionProvisioningTicket",
+ "ConnectionProvisioningTicketUrl",
+ "ConnectionRealmFallback",
+ "ConnectionRealms",
+ "ConnectionRegistrationEndpoint",
+ "ConnectionRequestObjectEncryptionAlgValuesSupported",
+ "ConnectionRequestObjectEncryptionEncValuesSupported",
+ "ConnectionRequestObjectSigningAlgValuesSupported",
+ "ConnectionRequestParameterSupported",
+ "ConnectionRequestUriParameterSupported",
+ "ConnectionRequireRequestUriRegistration",
+ "ConnectionRequiresUsername",
+ "ConnectionResponseCommon",
+ "ConnectionResponseContentAd",
+ "ConnectionResponseContentAdfs",
+ "ConnectionResponseContentAmazon",
+ "ConnectionResponseContentAol",
+ "ConnectionResponseContentApple",
+ "ConnectionResponseContentAuth0",
+ "ConnectionResponseContentAuth0Oidc",
+ "ConnectionResponseContentAzureAd",
+ "ConnectionResponseContentBaidu",
+ "ConnectionResponseContentBitbucket",
+ "ConnectionResponseContentBitly",
+ "ConnectionResponseContentBox",
+ "ConnectionResponseContentCustom",
+ "ConnectionResponseContentDaccount",
+ "ConnectionResponseContentDropbox",
+ "ConnectionResponseContentDwolla",
+ "ConnectionResponseContentEmail",
+ "ConnectionResponseContentEvernote",
+ "ConnectionResponseContentEvernoteSandbox",
+ "ConnectionResponseContentExact",
+ "ConnectionResponseContentFacebook",
+ "ConnectionResponseContentFitbit",
+ "ConnectionResponseContentFlickr",
+ "ConnectionResponseContentGitHub",
+ "ConnectionResponseContentGoogleApps",
+ "ConnectionResponseContentGoogleOAuth2",
+ "ConnectionResponseContentInstagram",
+ "ConnectionResponseContentIp",
+ "ConnectionResponseContentLine",
+ "ConnectionResponseContentLinkedin",
+ "ConnectionResponseContentMiicard",
+ "ConnectionResponseContentOAuth1",
+ "ConnectionResponseContentOAuth2",
+ "ConnectionResponseContentOffice365",
+ "ConnectionResponseContentOidc",
+ "ConnectionResponseContentOkta",
+ "ConnectionResponseContentPaypal",
+ "ConnectionResponseContentPaypalSandbox",
+ "ConnectionResponseContentPingFederate",
+ "ConnectionResponseContentPlanningCenter",
+ "ConnectionResponseContentRenren",
+ "ConnectionResponseContentSalesforce",
+ "ConnectionResponseContentSalesforceCommunity",
+ "ConnectionResponseContentSalesforceSandbox",
+ "ConnectionResponseContentSaml",
+ "ConnectionResponseContentSharepoint",
+ "ConnectionResponseContentShop",
+ "ConnectionResponseContentShopify",
+ "ConnectionResponseContentSms",
+ "ConnectionResponseContentSoundcloud",
+ "ConnectionResponseContentTheCity",
+ "ConnectionResponseContentTheCitySandbox",
+ "ConnectionResponseContentThirtySevenSignals",
+ "ConnectionResponseContentTwitter",
+ "ConnectionResponseContentUntappd",
+ "ConnectionResponseContentVkontakte",
+ "ConnectionResponseContentWeibo",
+ "ConnectionResponseContentWindowsLive",
+ "ConnectionResponseContentWordpress",
+ "ConnectionResponseContentYahoo",
+ "ConnectionResponseContentYammer",
+ "ConnectionResponseContentYandex",
+ "ConnectionResponseModesSupported",
+ "ConnectionResponseTypesSupported",
+ "ConnectionScopeArray",
+ "ConnectionScopeAzureAd",
+ "ConnectionScopeGoogleOAuth2",
+ "ConnectionScopeItem",
+ "ConnectionScopeOAuth2",
+ "ConnectionScopeOidc",
+ "ConnectionScopesSupported",
+ "ConnectionScriptsOAuth2",
+ "ConnectionSendBackChannelNonce",
+ "ConnectionServiceDocumentation",
+ "ConnectionSetUserRootAttributesEnum",
+ "ConnectionShouldTrustEmailVerifiedConnectionEnum",
+ "ConnectionShowAsButton",
+ "ConnectionStrategyEnum",
+ "ConnectionStrategyVersionEnumAzureAd",
+ "ConnectionSubjectTypesSupported",
+ "ConnectionTenantDomain",
+ "ConnectionTenantDomainAzureAdOne",
+ "ConnectionTenantIdAzureAd",
+ "ConnectionThumbprints",
+ "ConnectionTokenEndpoint",
+ "ConnectionTokenEndpointAuthMethodEnum",
+ "ConnectionTokenEndpointAuthMethodsSupported",
+ "ConnectionTokenEndpointAuthSigningAlgEnum",
+ "ConnectionTokenEndpointAuthSigningAlgValuesSupported",
+ "ConnectionTokenEndpointOAuth2",
+ "ConnectionTokenEndpointOidc",
+ "ConnectionTypeEnumOidc",
+ "ConnectionTypeEnumOkta",
+ "ConnectionUiLocalesSupported",
+ "ConnectionUpstreamAdditionalProperties",
+ "ConnectionUpstreamAlias",
+ "ConnectionUpstreamAliasEnum",
+ "ConnectionUpstreamParams",
+ "ConnectionUpstreamParamsAzureAd",
+ "ConnectionUpstreamParamsOidc",
+ "ConnectionUpstreamValue",
+ "ConnectionUseCommonEndpointAzureAd",
+ "ConnectionUseridAttributeAzureAd",
+ "ConnectionUseridAttributeEnumAzureAd",
+ "ConnectionUserinfoEncryptionAlgValuesSupported",
+ "ConnectionUserinfoEncryptionEncValuesSupported",
+ "ConnectionUserinfoEndpoint",
+ "ConnectionUserinfoEndpointOidc",
+ "ConnectionUserinfoSigningAlgValuesSupported",
+ "ConnectionUsernameValidationOptions",
+ "ConnectionValidationOptions",
+ "ConnectionWaadProtocol",
+ "ConnectionWaadProtocolEnumAzureAd",
+ "ConnectionsMetadata",
+ "CreateActionResponseContent",
+ "CreateBrandingPhoneProviderResponseContent",
+ "CreateBrandingThemeResponseContent",
+ "CreateClientGrantResponseContent",
+ "CreateClientResponseContent",
+ "CreateConnectionCommon",
+ "CreateConnectionProfileResponseContent",
+ "CreateConnectionRequestContentAd",
+ "CreateConnectionRequestContentAdfs",
+ "CreateConnectionRequestContentAmazon",
+ "CreateConnectionRequestContentAol",
+ "CreateConnectionRequestContentApple",
+ "CreateConnectionRequestContentAuth0",
+ "CreateConnectionRequestContentAuth0Oidc",
+ "CreateConnectionRequestContentAzureAd",
+ "CreateConnectionRequestContentBaidu",
+ "CreateConnectionRequestContentBitbucket",
+ "CreateConnectionRequestContentBitly",
+ "CreateConnectionRequestContentBox",
+ "CreateConnectionRequestContentCustom",
+ "CreateConnectionRequestContentDaccount",
+ "CreateConnectionRequestContentDropbox",
+ "CreateConnectionRequestContentDwolla",
+ "CreateConnectionRequestContentEmail",
+ "CreateConnectionRequestContentEvernote",
+ "CreateConnectionRequestContentEvernoteSandbox",
+ "CreateConnectionRequestContentExact",
+ "CreateConnectionRequestContentFacebook",
+ "CreateConnectionRequestContentFitbit",
+ "CreateConnectionRequestContentFlickr",
+ "CreateConnectionRequestContentGitHub",
+ "CreateConnectionRequestContentGoogleApps",
+ "CreateConnectionRequestContentGoogleOAuth2",
+ "CreateConnectionRequestContentInstagram",
+ "CreateConnectionRequestContentIp",
+ "CreateConnectionRequestContentLine",
+ "CreateConnectionRequestContentLinkedin",
+ "CreateConnectionRequestContentMiicard",
+ "CreateConnectionRequestContentOAuth1",
+ "CreateConnectionRequestContentOAuth2",
+ "CreateConnectionRequestContentOffice365",
+ "CreateConnectionRequestContentOidc",
+ "CreateConnectionRequestContentOkta",
+ "CreateConnectionRequestContentPaypal",
+ "CreateConnectionRequestContentPaypalSandbox",
+ "CreateConnectionRequestContentPingFederate",
+ "CreateConnectionRequestContentPlanningCenter",
+ "CreateConnectionRequestContentRenren",
+ "CreateConnectionRequestContentSalesforce",
+ "CreateConnectionRequestContentSalesforceCommunity",
+ "CreateConnectionRequestContentSalesforceSandbox",
+ "CreateConnectionRequestContentSaml",
+ "CreateConnectionRequestContentSharepoint",
+ "CreateConnectionRequestContentShop",
+ "CreateConnectionRequestContentShopify",
+ "CreateConnectionRequestContentSms",
+ "CreateConnectionRequestContentSoundcloud",
+ "CreateConnectionRequestContentTheCity",
+ "CreateConnectionRequestContentTheCitySandbox",
+ "CreateConnectionRequestContentThirtySevenSignals",
+ "CreateConnectionRequestContentTwitter",
+ "CreateConnectionRequestContentUntappd",
+ "CreateConnectionRequestContentVkontakte",
+ "CreateConnectionRequestContentWeibo",
+ "CreateConnectionRequestContentWindowsLive",
+ "CreateConnectionRequestContentWordpress",
+ "CreateConnectionRequestContentYahoo",
+ "CreateConnectionRequestContentYammer",
+ "CreateConnectionRequestContentYandex",
+ "CreateConnectionResponseContent",
+ "CreateCustomDomainResponseContent",
+ "CreateDirectoryProvisioningRequestContent",
+ "CreateDirectoryProvisioningResponseContent",
+ "CreateDirectorySynchronizationResponseContent",
+ "CreateEmailProviderResponseContent",
+ "CreateEmailTemplateResponseContent",
+ "CreateEncryptionKeyPublicWrappingResponseContent",
+ "CreateEncryptionKeyResponseContent",
+ "CreateEncryptionKeyType",
+ "CreateEventStreamActionRequestContent",
+ "CreateEventStreamEventBridgeRequestContent",
+ "CreateEventStreamRedeliveryResponseContent",
+ "CreateEventStreamResponseContent",
+ "CreateEventStreamTestEventResponseContent",
+ "CreateEventStreamWebHookRequestContent",
+ "CreateExportUsersFields",
+ "CreateExportUsersResponseContent",
+ "CreateFlowResponseContent",
+ "CreateFlowsVaultConnectionActivecampaign",
+ "CreateFlowsVaultConnectionActivecampaignApiKey",
+ "CreateFlowsVaultConnectionActivecampaignUninitialized",
+ "CreateFlowsVaultConnectionAirtable",
+ "CreateFlowsVaultConnectionAirtableApiKey",
+ "CreateFlowsVaultConnectionAirtableUninitialized",
+ "CreateFlowsVaultConnectionAuth0",
+ "CreateFlowsVaultConnectionAuth0OauthApp",
+ "CreateFlowsVaultConnectionAuth0Uninitialized",
+ "CreateFlowsVaultConnectionBigquery",
+ "CreateFlowsVaultConnectionBigqueryJwt",
+ "CreateFlowsVaultConnectionBigqueryUninitialized",
+ "CreateFlowsVaultConnectionClearbit",
+ "CreateFlowsVaultConnectionClearbitApiKey",
+ "CreateFlowsVaultConnectionClearbitUninitialized",
+ "CreateFlowsVaultConnectionDocusign",
+ "CreateFlowsVaultConnectionDocusignOauthCode",
+ "CreateFlowsVaultConnectionDocusignUninitialized",
+ "CreateFlowsVaultConnectionGoogleSheets",
+ "CreateFlowsVaultConnectionGoogleSheetsOauthCode",
+ "CreateFlowsVaultConnectionGoogleSheetsUninitialized",
+ "CreateFlowsVaultConnectionHttp",
+ "CreateFlowsVaultConnectionHttpBearer",
+ "CreateFlowsVaultConnectionHttpUninitialized",
+ "CreateFlowsVaultConnectionHubspot",
+ "CreateFlowsVaultConnectionHubspotApiKey",
+ "CreateFlowsVaultConnectionHubspotOauthCode",
+ "CreateFlowsVaultConnectionHubspotUninitialized",
+ "CreateFlowsVaultConnectionJwt",
+ "CreateFlowsVaultConnectionJwtJwt",
+ "CreateFlowsVaultConnectionJwtUninitialized",
+ "CreateFlowsVaultConnectionMailchimp",
+ "CreateFlowsVaultConnectionMailchimpApiKey",
+ "CreateFlowsVaultConnectionMailchimpOauthCode",
+ "CreateFlowsVaultConnectionMailchimpUninitialized",
+ "CreateFlowsVaultConnectionMailjet",
+ "CreateFlowsVaultConnectionMailjetApiKey",
+ "CreateFlowsVaultConnectionMailjetUninitialized",
+ "CreateFlowsVaultConnectionPipedrive",
+ "CreateFlowsVaultConnectionPipedriveOauthCode",
+ "CreateFlowsVaultConnectionPipedriveToken",
+ "CreateFlowsVaultConnectionPipedriveUninitialized",
+ "CreateFlowsVaultConnectionRequestContent",
+ "CreateFlowsVaultConnectionResponseContent",
+ "CreateFlowsVaultConnectionSalesforce",
+ "CreateFlowsVaultConnectionSalesforceOauthCode",
+ "CreateFlowsVaultConnectionSalesforceUninitialized",
+ "CreateFlowsVaultConnectionSendgrid",
+ "CreateFlowsVaultConnectionSendgridApiKey",
+ "CreateFlowsVaultConnectionSendgridUninitialized",
+ "CreateFlowsVaultConnectionSlack",
+ "CreateFlowsVaultConnectionSlackOauthCode",
+ "CreateFlowsVaultConnectionSlackUninitialized",
+ "CreateFlowsVaultConnectionSlackWebhook",
+ "CreateFlowsVaultConnectionStripe",
+ "CreateFlowsVaultConnectionStripeKeyPair",
+ "CreateFlowsVaultConnectionStripeOauthCode",
+ "CreateFlowsVaultConnectionStripeUninitialized",
+ "CreateFlowsVaultConnectionTelegram",
+ "CreateFlowsVaultConnectionTelegramToken",
+ "CreateFlowsVaultConnectionTelegramUninitialized",
+ "CreateFlowsVaultConnectionTwilio",
+ "CreateFlowsVaultConnectionTwilioApiKey",
+ "CreateFlowsVaultConnectionTwilioUninitialized",
+ "CreateFlowsVaultConnectionWhatsapp",
+ "CreateFlowsVaultConnectionWhatsappToken",
+ "CreateFlowsVaultConnectionWhatsappUninitialized",
+ "CreateFlowsVaultConnectionZapier",
+ "CreateFlowsVaultConnectionZapierUninitialized",
+ "CreateFlowsVaultConnectionZapierWebhook",
+ "CreateFormResponseContent",
+ "CreateGuardianEnrollmentTicketResponseContent",
+ "CreateHookResponseContent",
+ "CreateHookSecretRequestContent",
+ "CreateImportUsersResponseContent",
+ "CreateLogStreamDatadogRequestBody",
+ "CreateLogStreamEventBridgeRequestBody",
+ "CreateLogStreamEventGridRequestBody",
+ "CreateLogStreamHttpRequestBody",
+ "CreateLogStreamMixpanelRequestBody",
+ "CreateLogStreamRequestContent",
+ "CreateLogStreamResponseContent",
+ "CreateLogStreamSegmentRequestBody",
+ "CreateLogStreamSplunkRequestBody",
+ "CreateLogStreamSumoRequestBody",
+ "CreateOrganizationDiscoveryDomainResponseContent",
+ "CreateOrganizationInvitationResponseContent",
+ "CreateOrganizationResponseContent",
+ "CreatePhoneProviderSendTestResponseContent",
+ "CreatePhoneTemplateResponseContent",
+ "CreatePhoneTemplateTestNotificationResponseContent",
+ "CreatePublicKeyDeviceCredentialResponseContent",
+ "CreateResourceServerResponseContent",
+ "CreateRoleResponseContent",
+ "CreateRuleResponseContent",
+ "CreateScimConfigurationRequestContent",
+ "CreateScimConfigurationResponseContent",
+ "CreateScimTokenResponseContent",
+ "CreateSelfServiceProfileResponseContent",
+ "CreateSelfServiceProfileSsoTicketResponseContent",
+ "CreateTokenExchangeProfileResponseContent",
+ "CreateTokenQuota",
+ "CreateUserAttributeProfileResponseContent",
+ "CreateUserAuthenticationMethodResponseContent",
+ "CreateUserResponseContent",
+ "CreateVerifiableCredentialTemplateResponseContent",
+ "CreateVerificationEmailResponseContent",
+ "CreatedAuthenticationMethodTypeEnum",
+ "CreatedUserAuthenticationMethodTypeEnum",
+ "CredentialId",
+ "CustomDomain",
+ "CustomDomainCustomClientIpHeader",
+ "CustomDomainCustomClientIpHeaderEnum",
+ "CustomDomainProvisioningTypeEnum",
+ "CustomDomainStatusFilterEnum",
+ "CustomDomainTlsPolicyEnum",
+ "CustomDomainTypeEnum",
+ "CustomDomainVerificationMethodEnum",
+ "CustomProviderConfiguration",
+ "CustomProviderCredentials",
+ "CustomProviderDeliveryMethodEnum",
+ "CustomSigningKeyAlgorithmEnum",
+ "CustomSigningKeyCurveEnum",
+ "CustomSigningKeyJwk",
+ "CustomSigningKeyOperationEnum",
+ "CustomSigningKeyTypeEnum",
+ "CustomSigningKeyUseEnum",
+ "DailyStats",
+ "DefaultTokenQuota",
+ "DeleteHookSecretRequestContent",
+ "DeleteUserIdentityResponseContent",
+ "DeleteUserIdentityResponseContentItem",
+ "DeployActionResponseContent",
+ "DeployActionVersionRequestBodyParams",
+ "DeployActionVersionRequestContent",
+ "DeployActionVersionResponseContent",
+ "DeviceCredential",
+ "DeviceCredentialPublicKeyTypeEnum",
+ "DeviceCredentialTypeEnum",
+ "DirectoryProvisioningMappingItem",
+ "DomainCertificate",
+ "DomainCertificateAuthorityEnum",
+ "DomainCertificateStatusEnum",
+ "DomainMetadata",
+ "DomainVerification",
+ "DomainVerificationMethod",
+ "DomainVerificationMethodNameEnum",
+ "DomainVerificationStatusEnum",
+ "EmailAttribute",
+ "EmailMailgunRegionEnum",
+ "EmailProviderCredentials",
+ "EmailProviderCredentialsSchema",
+ "EmailProviderCredentialsSchemaAccessKeyId",
+ "EmailProviderCredentialsSchemaApiKey",
+ "EmailProviderCredentialsSchemaClientId",
+ "EmailProviderCredentialsSchemaConnectionString",
+ "EmailProviderCredentialsSchemaSmtpHost",
+ "EmailProviderCredentialsSchemaThree",
+ "EmailProviderCredentialsSchemaZero",
+ "EmailProviderNameEnum",
+ "EmailProviderSettings",
+ "EmailSmtpHost",
+ "EmailSparkPostRegionEnum",
+ "EmailSpecificProviderSettingsWithAdditionalProperties",
+ "EmailTemplateNameEnum",
+ "EnabledFeaturesEnum",
+ "EncryptionKey",
+ "EncryptionKeyPublicWrappingAlgorithm",
+ "EncryptionKeyState",
+ "EncryptionKeyType",
+ "EventStreamActionConfiguration",
+ "EventStreamActionDestination",
+ "EventStreamActionDestinationTypeEnum",
+ "EventStreamActionResponseContent",
+ "EventStreamCloudEvent",
+ "EventStreamDelivery",
+ "EventStreamDeliveryAttempt",
+ "EventStreamDeliveryEventTypeEnum",
+ "EventStreamDeliveryStatusEnum",
+ "EventStreamDestinationPatch",
+ "EventStreamEventBridgeAwsRegionEnum",
+ "EventStreamEventBridgeConfiguration",
+ "EventStreamEventBridgeDestination",
+ "EventStreamEventBridgeDestinationTypeEnum",
+ "EventStreamEventBridgeResponseContent",
+ "EventStreamEventTypeEnum",
+ "EventStreamResponseContent",
+ "EventStreamStatusEnum",
+ "EventStreamSubscription",
+ "EventStreamTestEventTypeEnum",
+ "EventStreamWebhookAuthorizationResponse",
+ "EventStreamWebhookBasicAuth",
+ "EventStreamWebhookBasicAuthMethodEnum",
+ "EventStreamWebhookBearerAuth",
+ "EventStreamWebhookBearerAuthMethodEnum",
+ "EventStreamWebhookConfiguration",
+ "EventStreamWebhookDestination",
+ "EventStreamWebhookDestinationTypeEnum",
+ "EventStreamWebhookResponseContent",
+ "ExpressConfiguration",
+ "ExpressConfigurationOrNull",
+ "ExtensibilityEmailProviderCredentials",
+ "FederatedConnectionTokenSet",
+ "FlowAction",
+ "FlowActionActivecampaign",
+ "FlowActionActivecampaignListContacts",
+ "FlowActionActivecampaignListContactsParams",
+ "FlowActionActivecampaignUpsertContact",
+ "FlowActionActivecampaignUpsertContactParams",
+ "FlowActionActivecampaignUpsertContactParamsCustomFields",
+ "FlowActionAirtable",
+ "FlowActionAirtableCreateRecord",
+ "FlowActionAirtableCreateRecordParams",
+ "FlowActionAirtableCreateRecordParamsFields",
+ "FlowActionAirtableListRecords",
+ "FlowActionAirtableListRecordsParams",
+ "FlowActionAirtableUpdateRecord",
+ "FlowActionAirtableUpdateRecordParams",
+ "FlowActionAirtableUpdateRecordParamsFields",
+ "FlowActionAuth0",
+ "FlowActionAuth0CreateUser",
+ "FlowActionAuth0CreateUserParams",
+ "FlowActionAuth0CreateUserParamsPayload",
+ "FlowActionAuth0GetUser",
+ "FlowActionAuth0GetUserParams",
+ "FlowActionAuth0SendEmail",
+ "FlowActionAuth0SendEmailParams",
+ "FlowActionAuth0SendEmailParamsFrom",
+ "FlowActionAuth0SendEmailParamsFromEmail",
+ "FlowActionAuth0SendEmailParamsTo",
+ "FlowActionAuth0SendRequest",
+ "FlowActionAuth0SendRequestParams",
+ "FlowActionAuth0SendRequestParamsCustomVars",
+ "FlowActionAuth0SendRequestParamsHeaders",
+ "FlowActionAuth0SendRequestParamsMethod",
+ "FlowActionAuth0SendRequestParamsPayload",
+ "FlowActionAuth0SendRequestParamsPayloadObject",
+ "FlowActionAuth0SendRequestParamsQueryParams",
+ "FlowActionAuth0SendRequestParamsQueryParamsValue",
+ "FlowActionAuth0UpdateUser",
+ "FlowActionAuth0UpdateUserParams",
+ "FlowActionAuth0UpdateUserParamsChanges",
+ "FlowActionBigquery",
+ "FlowActionBigqueryInsertRows",
+ "FlowActionBigqueryInsertRowsParams",
+ "FlowActionBigqueryInsertRowsParamsData",
+ "FlowActionClearbit",
+ "FlowActionClearbitFindCompany",
+ "FlowActionClearbitFindCompanyParams",
+ "FlowActionClearbitFindPerson",
+ "FlowActionClearbitFindPersonParams",
+ "FlowActionEmail",
+ "FlowActionEmailVerifyEmail",
+ "FlowActionEmailVerifyEmailParams",
+ "FlowActionEmailVerifyEmailParamsRules",
+ "FlowActionFlow",
+ "FlowActionFlowBooleanCondition",
+ "FlowActionFlowBooleanConditionParams",
+ "FlowActionFlowDelayFlow",
+ "FlowActionFlowDelayFlowParams",
+ "FlowActionFlowDelayFlowParamsNumber",
+ "FlowActionFlowDelayFlowParamsUnits",
+ "FlowActionFlowDoNothing",
+ "FlowActionFlowDoNothingParams",
+ "FlowActionFlowErrorMessage",
+ "FlowActionFlowErrorMessageParams",
+ "FlowActionFlowMapValue",
+ "FlowActionFlowMapValueParams",
+ "FlowActionFlowMapValueParamsCases",
+ "FlowActionFlowMapValueParamsFallback",
+ "FlowActionFlowMapValueParamsFallbackObject",
+ "FlowActionFlowMapValueParamsInput",
+ "FlowActionFlowReturnJson",
+ "FlowActionFlowReturnJsonParams",
+ "FlowActionFlowReturnJsonParamsPayload",
+ "FlowActionFlowReturnJsonParamsPayloadObject",
+ "FlowActionFlowStoreVars",
+ "FlowActionFlowStoreVarsParams",
+ "FlowActionFlowStoreVarsParamsVars",
+ "FlowActionGoogleSheets",
+ "FlowActionGoogleSheetsAddRow",
+ "FlowActionGoogleSheetsAddRowParams",
+ "FlowActionGoogleSheetsAddRowParamsSheetId",
+ "FlowActionGoogleSheetsAddRowParamsValues",
+ "FlowActionHttp",
+ "FlowActionHttpSendRequest",
+ "FlowActionHttpSendRequestParams",
+ "FlowActionHttpSendRequestParamsBasicAuth",
+ "FlowActionHttpSendRequestParamsContentType",
+ "FlowActionHttpSendRequestParamsHeaders",
+ "FlowActionHttpSendRequestParamsMethod",
+ "FlowActionHttpSendRequestParamsPayload",
+ "FlowActionHttpSendRequestParamsPayloadObject",
+ "FlowActionHttpSendRequestParamsQueryParams",
+ "FlowActionHttpSendRequestParamsQueryParamsValue",
+ "FlowActionHubspot",
+ "FlowActionHubspotEnrollContact",
+ "FlowActionHubspotEnrollContactParams",
+ "FlowActionHubspotEnrollContactParamsWorkflowId",
+ "FlowActionHubspotGetContact",
+ "FlowActionHubspotGetContactParams",
+ "FlowActionHubspotUpsertContact",
+ "FlowActionHubspotUpsertContactParams",
+ "FlowActionHubspotUpsertContactParamsProperty",
+ "FlowActionJson",
+ "FlowActionJsonCreateJson",
+ "FlowActionJsonCreateJsonParams",
+ "FlowActionJsonCreateJsonParamsObject",
+ "FlowActionJsonParseJson",
+ "FlowActionJsonParseJsonParams",
+ "FlowActionJsonSerializeJson",
+ "FlowActionJsonSerializeJsonParams",
+ "FlowActionJsonSerializeJsonParamsObject",
+ "FlowActionJsonSerializeJsonParamsObjectObject",
+ "FlowActionJwt",
+ "FlowActionJwtDecodeJwt",
+ "FlowActionJwtDecodeJwtParams",
+ "FlowActionJwtSignJwt",
+ "FlowActionJwtSignJwtParams",
+ "FlowActionJwtSignJwtParamsPayload",
+ "FlowActionJwtVerifyJwt",
+ "FlowActionJwtVerifyJwtParams",
+ "FlowActionMailchimp",
+ "FlowActionMailchimpUpsertMember",
+ "FlowActionMailchimpUpsertMemberParams",
+ "FlowActionMailchimpUpsertMemberParamsMember",
+ "FlowActionMailchimpUpsertMemberParamsMemberMergeFields",
+ "FlowActionMailjet",
+ "FlowActionMailjetSendEmail",
+ "FlowActionMailjetSendEmailParams",
+ "FlowActionMailjetSendEmailParamsContent",
+ "FlowActionMailjetSendEmailParamsTemplateId",
+ "FlowActionOtp",
+ "FlowActionOtpGenerateCode",
+ "FlowActionOtpGenerateCodeParams",
+ "FlowActionOtpVerifyCode",
+ "FlowActionOtpVerifyCodeParams",
+ "FlowActionOtpVerifyCodeParamsCode",
+ "FlowActionPipedrive",
+ "FlowActionPipedriveAddDeal",
+ "FlowActionPipedriveAddDealParams",
+ "FlowActionPipedriveAddDealParamsFields",
+ "FlowActionPipedriveAddDealParamsOrganizationId",
+ "FlowActionPipedriveAddDealParamsPersonId",
+ "FlowActionPipedriveAddDealParamsStageId",
+ "FlowActionPipedriveAddDealParamsUserId",
+ "FlowActionPipedriveAddOrganization",
+ "FlowActionPipedriveAddOrganizationParams",
+ "FlowActionPipedriveAddOrganizationParamsFields",
+ "FlowActionPipedriveAddOrganizationParamsOwnerId",
+ "FlowActionPipedriveAddPerson",
+ "FlowActionPipedriveAddPersonParams",
+ "FlowActionPipedriveAddPersonParamsFields",
+ "FlowActionPipedriveAddPersonParamsOrganizationId",
+ "FlowActionPipedriveAddPersonParamsOwnerId",
+ "FlowActionSalesforce",
+ "FlowActionSalesforceCreateLead",
+ "FlowActionSalesforceCreateLeadParams",
+ "FlowActionSalesforceCreateLeadParamsPayload",
+ "FlowActionSalesforceGetLead",
+ "FlowActionSalesforceGetLeadParams",
+ "FlowActionSalesforceSearchLeads",
+ "FlowActionSalesforceSearchLeadsParams",
+ "FlowActionSalesforceSearchLeadsParamsSearchField",
+ "FlowActionSalesforceUpdateLead",
+ "FlowActionSalesforceUpdateLeadParams",
+ "FlowActionSalesforceUpdateLeadParamsPayload",
+ "FlowActionSendgrid",
+ "FlowActionSendgridSendEmail",
+ "FlowActionSendgridSendEmailParams",
+ "FlowActionSendgridSendEmailParamsPerson",
+ "FlowActionSlack",
+ "FlowActionSlackPostMessage",
+ "FlowActionSlackPostMessageParams",
+ "FlowActionSlackPostMessageParamsAttachment",
+ "FlowActionSlackPostMessageParamsAttachmentColor",
+ "FlowActionSlackPostMessageParamsAttachmentField",
+ "FlowActionStripe",
+ "FlowActionStripeAddTaxId",
+ "FlowActionStripeAddTaxIdParams",
+ "FlowActionStripeAddress",
+ "FlowActionStripeCreateCustomer",
+ "FlowActionStripeCreateCustomerParams",
+ "FlowActionStripeCreatePortalSession",
+ "FlowActionStripeCreatePortalSessionParams",
+ "FlowActionStripeDeleteTaxId",
+ "FlowActionStripeDeleteTaxIdParams",
+ "FlowActionStripeFindCustomers",
+ "FlowActionStripeFindCustomersParams",
+ "FlowActionStripeGetCustomer",
+ "FlowActionStripeGetCustomerParams",
+ "FlowActionStripeMetadata",
+ "FlowActionStripeTaxId",
+ "FlowActionStripeUpdateCustomer",
+ "FlowActionStripeUpdateCustomerParams",
+ "FlowActionTelegram",
+ "FlowActionTelegramSendMessage",
+ "FlowActionTelegramSendMessageParams",
+ "FlowActionTwilio",
+ "FlowActionTwilioMakeCall",
+ "FlowActionTwilioMakeCallParams",
+ "FlowActionTwilioSendSms",
+ "FlowActionTwilioSendSmsParams",
+ "FlowActionWhatsapp",
+ "FlowActionWhatsappSendMessage",
+ "FlowActionWhatsappSendMessageParams",
+ "FlowActionWhatsappSendMessageParamsPayload",
+ "FlowActionWhatsappSendMessageParamsPayloadObject",
+ "FlowActionWhatsappSendMessageParamsType",
+ "FlowActionXml",
+ "FlowActionXmlParseXml",
+ "FlowActionXmlParseXmlParams",
+ "FlowActionXmlSerializeXml",
+ "FlowActionXmlSerializeXmlParams",
+ "FlowActionXmlSerializeXmlParamsObject",
+ "FlowActionXmlSerializeXmlParamsObjectObject",
+ "FlowActionZapier",
+ "FlowActionZapierTriggerWebhook",
+ "FlowActionZapierTriggerWebhookParams",
+ "FlowActionZapierTriggerWebhookParamsMethod",
+ "FlowExecutionDebug",
+ "FlowExecutionSummary",
+ "FlowSummary",
+ "FlowsVaultConnectioSetupApiKey",
+ "FlowsVaultConnectioSetupApiKeyWithBaseUrl",
+ "FlowsVaultConnectioSetupBigqueryOauthJwt",
+ "FlowsVaultConnectioSetupHttpBearer",
+ "FlowsVaultConnectioSetupJwt",
+ "FlowsVaultConnectioSetupJwtAlgorithmEnum",
+ "FlowsVaultConnectioSetupMailjetApiKey",
+ "FlowsVaultConnectioSetupOauthApp",
+ "FlowsVaultConnectioSetupOauthCode",
+ "FlowsVaultConnectioSetupSecretApiKey",
+ "FlowsVaultConnectioSetupStripeKeyPair",
+ "FlowsVaultConnectioSetupToken",
+ "FlowsVaultConnectioSetupTwilioApiKey",
+ "FlowsVaultConnectioSetupTypeApiKeyEnum",
+ "FlowsVaultConnectioSetupTypeBearerEnum",
+ "FlowsVaultConnectioSetupTypeJwtEnum",
+ "FlowsVaultConnectioSetupTypeKeyPairEnum",
+ "FlowsVaultConnectioSetupTypeOauthAppEnum",
+ "FlowsVaultConnectioSetupTypeOauthCodeEnum",
+ "FlowsVaultConnectioSetupTypeOauthJwtEnum",
+ "FlowsVaultConnectioSetupTypeTokenEnum",
+ "FlowsVaultConnectioSetupTypeWebhookEnum",
+ "FlowsVaultConnectioSetupWebhook",
+ "FlowsVaultConnectionAppIdActivecampaignEnum",
+ "FlowsVaultConnectionAppIdAirtableEnum",
+ "FlowsVaultConnectionAppIdAuth0Enum",
+ "FlowsVaultConnectionAppIdBigqueryEnum",
+ "FlowsVaultConnectionAppIdClearbitEnum",
+ "FlowsVaultConnectionAppIdDocusignEnum",
+ "FlowsVaultConnectionAppIdGoogleSheetsEnum",
+ "FlowsVaultConnectionAppIdHttpEnum",
+ "FlowsVaultConnectionAppIdHubspotEnum",
+ "FlowsVaultConnectionAppIdJwtEnum",
+ "FlowsVaultConnectionAppIdMailchimpEnum",
+ "FlowsVaultConnectionAppIdMailjetEnum",
+ "FlowsVaultConnectionAppIdPipedriveEnum",
+ "FlowsVaultConnectionAppIdSalesforceEnum",
+ "FlowsVaultConnectionAppIdSendgridEnum",
+ "FlowsVaultConnectionAppIdSlackEnum",
+ "FlowsVaultConnectionAppIdStripeEnum",
+ "FlowsVaultConnectionAppIdTelegramEnum",
+ "FlowsVaultConnectionAppIdTwilioEnum",
+ "FlowsVaultConnectionAppIdWhatsappEnum",
+ "FlowsVaultConnectionAppIdZapierEnum",
+ "FlowsVaultConnectionSummary",
+ "FormBlock",
+ "FormBlockDivider",
+ "FormBlockDividerConfig",
+ "FormBlockHtml",
+ "FormBlockHtmlConfig",
+ "FormBlockImage",
+ "FormBlockImageConfig",
+ "FormBlockImageConfigPositionEnum",
+ "FormBlockJumpButton",
+ "FormBlockJumpButtonConfig",
+ "FormBlockJumpButtonConfigStyle",
+ "FormBlockNextButton",
+ "FormBlockNextButtonConfig",
+ "FormBlockPreviousButton",
+ "FormBlockPreviousButtonConfig",
+ "FormBlockResendButton",
+ "FormBlockResendButtonConfig",
+ "FormBlockResendButtonConfigTextAlignmentEnum",
+ "FormBlockRichText",
+ "FormBlockRichTextConfig",
+ "FormBlockTypeDividerConst",
+ "FormBlockTypeHtmlConst",
+ "FormBlockTypeImageConst",
+ "FormBlockTypeJumpButtonConst",
+ "FormBlockTypeNextButtonConst",
+ "FormBlockTypePreviousButtonConst",
+ "FormBlockTypeResendButtonConst",
+ "FormBlockTypeRichTextConst",
+ "FormComponent",
+ "FormComponentCategoryBlockConst",
+ "FormComponentCategoryFieldConst",
+ "FormComponentCategoryWidgetConst",
+ "FormEndingNode",
+ "FormEndingNodeAfterSubmit",
+ "FormEndingNodeId",
+ "FormEndingNodeNullable",
+ "FormEndingNodeRedirection",
+ "FormEndingNodeResumeFlowTrueConst",
+ "FormField",
+ "FormFieldBoolean",
+ "FormFieldBooleanConfig",
+ "FormFieldBooleanConfigOptions",
+ "FormFieldCards",
+ "FormFieldCardsConfig",
+ "FormFieldCardsConfigOption",
+ "FormFieldChoice",
+ "FormFieldChoiceConfig",
+ "FormFieldChoiceConfigAllowOther",
+ "FormFieldChoiceConfigAllowOtherEnabledTrueEnum",
+ "FormFieldChoiceConfigOption",
+ "FormFieldCustom",
+ "FormFieldCustomConfig",
+ "FormFieldCustomConfigParams",
+ "FormFieldCustomConfigSchema",
+ "FormFieldDate",
+ "FormFieldDateConfig",
+ "FormFieldDateConfigFormatEnum",
+ "FormFieldDropdown",
+ "FormFieldDropdownConfig",
+ "FormFieldDropdownConfigOption",
+ "FormFieldEmail",
+ "FormFieldEmailConfig",
+ "FormFieldFile",
+ "FormFieldFileConfig",
+ "FormFieldFileConfigCategoryEnum",
+ "FormFieldFileConfigStorage",
+ "FormFieldFileConfigStorageTypeEnum",
+ "FormFieldLegal",
+ "FormFieldLegalConfig",
+ "FormFieldNumber",
+ "FormFieldNumberConfig",
+ "FormFieldPassword",
+ "FormFieldPasswordConfig",
+ "FormFieldPasswordConfigHashEnum",
+ "FormFieldPayment",
+ "FormFieldPaymentConfig",
+ "FormFieldPaymentConfigCharge",
+ "FormFieldPaymentConfigChargeOneOff",
+ "FormFieldPaymentConfigChargeOneOffCurrencyEnum",
+ "FormFieldPaymentConfigChargeOneOffOneOff",
+ "FormFieldPaymentConfigChargeOneOffOneOffAmount",
+ "FormFieldPaymentConfigChargeSubscription",
+ "FormFieldPaymentConfigChargeTypeOneOffConst",
+ "FormFieldPaymentConfigChargeTypeSubscriptionConst",
+ "FormFieldPaymentConfigCredentials",
+ "FormFieldPaymentConfigCustomer",
+ "FormFieldPaymentConfigFieldProperties",
+ "FormFieldPaymentConfigFields",
+ "FormFieldPaymentConfigProviderEnum",
+ "FormFieldPaymentConfigSubscription",
+ "FormFieldSocial",
+ "FormFieldSocialConfig",
+ "FormFieldTel",
+ "FormFieldTelConfig",
+ "FormFieldTelConfigStrings",
+ "FormFieldText",
+ "FormFieldTextConfig",
+ "FormFieldTypeBooleanConst",
+ "FormFieldTypeCardsConst",
+ "FormFieldTypeChoiceConst",
+ "FormFieldTypeCustomConst",
+ "FormFieldTypeDateConst",
+ "FormFieldTypeDropdownConst",
+ "FormFieldTypeEmailConst",
+ "FormFieldTypeFileConst",
+ "FormFieldTypeLegalConst",
+ "FormFieldTypeNumberConst",
+ "FormFieldTypePasswordConst",
+ "FormFieldTypePaymentConst",
+ "FormFieldTypeSocialConst",
+ "FormFieldTypeTelConst",
+ "FormFieldTypeTextConst",
+ "FormFieldTypeUrlConst",
+ "FormFieldUrl",
+ "FormFieldUrlConfig",
+ "FormFlow",
+ "FormFlowConfig",
+ "FormHiddenField",
+ "FormLanguages",
+ "FormLanguagesNullable",
+ "FormMessages",
+ "FormMessagesCustom",
+ "FormMessagesError",
+ "FormMessagesNullable",
+ "FormNode",
+ "FormNodeCoordinates",
+ "FormNodeList",
+ "FormNodeListNullable",
+ "FormNodePointer",
+ "FormNodeTypeFlowConst",
+ "FormNodeTypeRouterConst",
+ "FormNodeTypeStepConst",
+ "FormRouter",
+ "FormRouterConfig",
+ "FormRouterRule",
+ "FormStartNode",
+ "FormStartNodeNullable",
+ "FormStep",
+ "FormStepComponentList",
+ "FormStepConfig",
+ "FormStyle",
+ "FormStyleNullable",
+ "FormSummary",
+ "FormTranslations",
+ "FormTranslationsNullable",
+ "FormWidget",
+ "FormWidgetAuth0VerifiableCredentials",
+ "FormWidgetAuth0VerifiableCredentialsConfig",
+ "FormWidgetGMapsAddress",
+ "FormWidgetGMapsAddressConfig",
+ "FormWidgetRecaptcha",
+ "FormWidgetRecaptchaConfig",
+ "FormWidgetTypeAuth0VerifiableCredentialsConst",
+ "FormWidgetTypeGMapsAddressConst",
+ "FormWidgetTypeRecaptchaConst",
+ "FormsRequestParametersHydrateEnum",
+ "GetActionExecutionResponseContent",
+ "GetActionResponseContent",
+ "GetActionVersionResponseContent",
+ "GetActiveUsersCountStatsResponseContent",
+ "GetAculResponseContent",
+ "GetAttackProtectionCaptchaResponseContent",
+ "GetBotDetectionSettingsResponseContent",
+ "GetBrandingDefaultThemeResponseContent",
+ "GetBrandingPhoneProviderResponseContent",
+ "GetBrandingResponseContent",
+ "GetBrandingThemeResponseContent",
+ "GetBreachedPasswordDetectionSettingsResponseContent",
+ "GetBruteForceSettingsResponseContent",
+ "GetBruteForceSettingsResponseContentMode",
+ "GetBruteForceSettingsResponseContentShieldsItem",
+ "GetClientCredentialResponseContent",
+ "GetClientResponseContent",
+ "GetConnectionEnabledClientsResponseContent",
+ "GetConnectionProfileResponseContent",
+ "GetConnectionProfileTemplateResponseContent",
+ "GetConnectionResponseContent",
+ "GetCustomDomainResponseContent",
+ "GetCustomSigningKeysResponseContent",
+ "GetCustomTextsByLanguageResponseContent",
+ "GetDirectoryProvisioningDefaultMappingResponseContent",
+ "GetDirectoryProvisioningResponseContent",
+ "GetEmailProviderResponseContent",
+ "GetEmailTemplateResponseContent",
+ "GetEncryptionKeyResponseContent",
+ "GetEventStreamDeliveryHistoryResponseContent",
+ "GetEventStreamResponseContent",
+ "GetFlowExecutionResponseContent",
+ "GetFlowRequestParametersHydrateEnum",
+ "GetFlowResponseContent",
+ "GetFlowsVaultConnectionResponseContent",
+ "GetFormResponseContent",
+ "GetGuardianEnrollmentResponseContent",
+ "GetGuardianFactorDuoSettingsResponseContent",
+ "GetGuardianFactorPhoneMessageTypesResponseContent",
+ "GetGuardianFactorPhoneTemplatesResponseContent",
+ "GetGuardianFactorSmsTemplatesResponseContent",
+ "GetGuardianFactorsProviderApnsResponseContent",
+ "GetGuardianFactorsProviderPhoneResponseContent",
+ "GetGuardianFactorsProviderPhoneTwilioResponseContent",
+ "GetGuardianFactorsProviderPushNotificationResponseContent",
+ "GetGuardianFactorsProviderSmsResponseContent",
+ "GetGuardianFactorsProviderSmsTwilioResponseContent",
+ "GetGuardianFactorsProviderSnsResponseContent",
+ "GetHookResponseContent",
+ "GetHookSecretResponseContent",
+ "GetJobErrorResponseContent",
+ "GetJobGenericErrorResponseContent",
+ "GetJobImportUserError",
+ "GetJobResponseContent",
+ "GetJobUserError",
+ "GetLogResponseContent",
+ "GetLogStreamResponseContent",
+ "GetNetworkAclsResponseContent",
+ "GetOrganizationByNameResponseContent",
+ "GetOrganizationConnectionResponseContent",
+ "GetOrganizationDiscoveryDomainResponseContent",
+ "GetOrganizationInvitationResponseContent",
+ "GetOrganizationResponseContent",
+ "GetPartialsResponseContent",
+ "GetPhoneTemplateResponseContent",
+ "GetRefreshTokenResponseContent",
+ "GetResourceServerResponseContent",
+ "GetRiskAssessmentsSettingsNewDeviceResponseContent",
+ "GetRiskAssessmentsSettingsResponseContent",
+ "GetRoleResponseContent",
+ "GetRuleResponseContent",
+ "GetScimConfigurationDefaultMappingResponseContent",
+ "GetScimConfigurationResponseContent",
+ "GetScimTokensResponseContent",
+ "GetSelfServiceProfileResponseContent",
+ "GetSessionResponseContent",
+ "GetSettingsResponseContent",
+ "GetSigningKeysResponseContent",
+ "GetSupplementalSignalsResponseContent",
+ "GetSuspiciousIpThrottlingSettingsResponseContent",
+ "GetTenantSettingsResponseContent",
+ "GetTokenExchangeProfileResponseContent",
+ "GetUniversalLoginTemplate",
+ "GetUniversalLoginTemplateResponseContent",
+ "GetUserAttributeProfileResponseContent",
+ "GetUserAttributeProfileTemplateResponseContent",
+ "GetUserAuthenticationMethodResponseContent",
+ "GetUserResponseContent",
+ "GetVerifiableCredentialTemplateResponseContent",
+ "Group",
+ "GuardianEnrollmentDate",
+ "GuardianEnrollmentFactorEnum",
+ "GuardianEnrollmentStatus",
+ "GuardianFactor",
+ "GuardianFactorNameEnum",
+ "GuardianFactorPhoneFactorMessageTypeEnum",
+ "GuardianFactorsProviderPushNotificationProviderDataEnum",
+ "GuardianFactorsProviderSmsProviderEnum",
+ "Hook",
+ "HookDependencies",
+ "HookTriggerIdEnum",
+ "HttpCustomHeader",
+ "Identity",
+ "IdentityProviderEnum",
+ "IdentityProviderOnlyAuth0Enum",
+ "ImportEncryptionKeyResponseContent",
+ "Integration",
+ "IntegrationFeatureTypeEnum",
+ "IntegrationRelease",
+ "IntegrationRequiredParam",
+ "IntegrationRequiredParamOption",
+ "IntegrationRequiredParamTypeEnum",
+ "IntegrationSemVer",
+ "JobFileFormatEnum",
+ "LinkedClientConfiguration",
+ "ListActionBindingsPaginatedResponseContent",
+ "ListActionTriggersResponseContent",
+ "ListActionVersionsPaginatedResponseContent",
+ "ListActionsPaginatedResponseContent",
+ "ListAculsOffsetPaginatedResponseContent",
+ "ListBrandingPhoneProvidersResponseContent",
+ "ListClientConnectionsResponseContent",
+ "ListClientGrantOrganizationsPaginatedResponseContent",
+ "ListClientGrantPaginatedResponseContent",
+ "ListClientsOffsetPaginatedResponseContent",
+ "ListConnectionProfileTemplateResponseContent",
+ "ListConnectionProfilesPaginatedResponseContent",
+ "ListConnectionsCheckpointPaginatedResponseContent",
+ "ListCustomDomainsResponseContent",
+ "ListDeviceCredentialsOffsetPaginatedResponseContent",
+ "ListEncryptionKeyOffsetPaginatedResponseContent",
+ "ListFlowExecutionsPaginatedResponseContent",
+ "ListFlowsOffsetPaginatedResponseContent",
+ "ListFlowsVaultConnectionsOffsetPaginatedResponseContent",
+ "ListFormsOffsetPaginatedResponseContent",
+ "ListGuardianPoliciesResponseContent",
+ "ListHooksOffsetPaginatedResponseContent",
+ "ListLogOffsetPaginatedResponseContent",
+ "ListNetworkAclsOffsetPaginatedResponseContent",
+ "ListOrganizationClientGrantsOffsetPaginatedResponseContent",
+ "ListOrganizationConnectionsOffsetPaginatedResponseContent",
+ "ListOrganizationDiscoveryDomainsResponseContent",
+ "ListOrganizationInvitationsOffsetPaginatedResponseContent",
+ "ListOrganizationMemberRolesOffsetPaginatedResponseContent",
+ "ListOrganizationMembersPaginatedResponseContent",
+ "ListOrganizationsPaginatedResponseContent",
+ "ListPhoneTemplatesResponseContent",
+ "ListRefreshTokensPaginatedResponseContent",
+ "ListResourceServerOffsetPaginatedResponseContent",
+ "ListRolePermissionsOffsetPaginatedResponseContent",
+ "ListRoleUsersPaginatedResponseContent",
+ "ListRolesOffsetPaginatedResponseContent",
+ "ListRulesOffsetPaginatedResponseContent",
+ "ListSelfServiceProfileCustomTextResponseContent",
+ "ListSelfServiceProfilesPaginatedResponseContent",
+ "ListTokenExchangeProfileResponseContent",
+ "ListUserAttributeProfileTemplateResponseContent",
+ "ListUserAttributeProfilesPaginatedResponseContent",
+ "ListUserAuthenticationMethodsOffsetPaginatedResponseContent",
+ "ListUserBlocksByIdentifierResponseContent",
+ "ListUserBlocksResponseContent",
+ "ListUserConnectedAccountsResponseContent",
+ "ListUserGrantsOffsetPaginatedResponseContent",
+ "ListUserOrganizationsOffsetPaginatedResponseContent",
+ "ListUserPermissionsOffsetPaginatedResponseContent",
+ "ListUserRolesOffsetPaginatedResponseContent",
+ "ListUserSessionsPaginatedResponseContent",
+ "ListUsersOffsetPaginatedResponseContent",
+ "ListVerifiableCredentialTemplatesPaginatedResponseContent",
+ "Log",
+ "LogDate",
+ "LogDateObject",
+ "LogDetails",
+ "LogLocationInfo",
+ "LogSecurityContext",
+ "LogStreamDatadogEnum",
+ "LogStreamDatadogRegionEnum",
+ "LogStreamDatadogResponseSchema",
+ "LogStreamDatadogSink",
+ "LogStreamEventBridgeEnum",
+ "LogStreamEventBridgeResponseSchema",
+ "LogStreamEventBridgeSink",
+ "LogStreamEventBridgeSinkRegionEnum",
+ "LogStreamEventGridEnum",
+ "LogStreamEventGridRegionEnum",
+ "LogStreamEventGridResponseSchema",
+ "LogStreamEventGridSink",
+ "LogStreamFilter",
+ "LogStreamFilterGroupNameEnum",
+ "LogStreamFilterTypeEnum",
+ "LogStreamHttpContentFormatEnum",
+ "LogStreamHttpEnum",
+ "LogStreamHttpResponseSchema",
+ "LogStreamHttpSink",
+ "LogStreamMixpanelEnum",
+ "LogStreamMixpanelRegionEnum",
+ "LogStreamMixpanelResponseSchema",
+ "LogStreamMixpanelSink",
+ "LogStreamMixpanelSinkPatch",
+ "LogStreamPiiAlgorithmEnum",
+ "LogStreamPiiConfig",
+ "LogStreamPiiLogFieldsEnum",
+ "LogStreamPiiMethodEnum",
+ "LogStreamResponseSchema",
+ "LogStreamSegmentEnum",
+ "LogStreamSegmentResponseSchema",
+ "LogStreamSegmentSink",
+ "LogStreamSegmentSinkWriteKey",
+ "LogStreamSinkPatch",
+ "LogStreamSplunkEnum",
+ "LogStreamSplunkResponseSchema",
+ "LogStreamSplunkSink",
+ "LogStreamStatusEnum",
+ "LogStreamSumoEnum",
+ "LogStreamSumoResponseSchema",
+ "LogStreamSumoSink",
+ "MdlPresentationProperties",
+ "MdlPresentationRequest",
+ "MdlPresentationRequestProperties",
+ "MfaPolicyEnum",
+ "NativeSocialLogin",
+ "NativeSocialLoginApple",
+ "NativeSocialLoginFacebook",
+ "NativeSocialLoginGoogle",
+ "NetworkAclAction",
+ "NetworkAclActionAllowEnum",
+ "NetworkAclActionBlockEnum",
+ "NetworkAclActionLogEnum",
+ "NetworkAclActionRedirectEnum",
+ "NetworkAclMatch",
+ "NetworkAclMatchIpv4Cidr",
+ "NetworkAclMatchIpv6Cidr",
+ "NetworkAclRule",
+ "NetworkAclRuleScopeEnum",
+ "NetworkAclsResponseContent",
+ "OauthScope",
+ "Organization",
+ "OrganizationBranding",
+ "OrganizationBrandingColors",
+ "OrganizationClientGrant",
+ "OrganizationConnection",
+ "OrganizationConnectionInformation",
+ "OrganizationDiscoveryDomain",
+ "OrganizationDiscoveryDomainStatus",
+ "OrganizationEnabledConnection",
+ "OrganizationInvitation",
+ "OrganizationInvitationInvitee",
+ "OrganizationInvitationInviter",
+ "OrganizationMember",
+ "OrganizationMemberRole",
+ "OrganizationMetadata",
+ "OrganizationUsageEnum",
+ "PartialGroupsEnum",
+ "PartialPhoneTemplateContent",
+ "PatchClientCredentialResponseContent",
+ "PatchSupplementalSignalsResponseContent",
+ "PermissionRequestPayload",
+ "PermissionsResponsePayload",
+ "PhoneAttribute",
+ "PhoneProviderChannelEnum",
+ "PhoneProviderConfiguration",
+ "PhoneProviderCredentials",
+ "PhoneProviderDeliveryMethodEnum",
+ "PhoneProviderNameEnum",
+ "PhoneProviderSchemaMasked",
+ "PhoneTemplate",
+ "PhoneTemplateBody",
+ "PhoneTemplateContent",
+ "PhoneTemplateNotificationTypeEnum",
+ "PostClientCredentialResponseContent",
+ "PreferredAuthenticationMethodEnum",
+ "PrivateKeyJwt",
+ "PrivateKeyJwtCredentials",
+ "PromptGroupNameEnum",
+ "PromptLanguageEnum",
+ "PublicKeyCredential",
+ "PublicKeyCredentialAlgorithmEnum",
+ "PublicKeyCredentialTypeEnum",
+ "RefreshTokenDate",
+ "RefreshTokenDateObject",
+ "RefreshTokenDevice",
+ "RefreshTokenExpirationTypeEnum",
+ "RefreshTokenResourceServer",
+ "RefreshTokenResponseContent",
+ "RefreshTokenRotationTypeEnum",
+ "RefreshTokenSessionId",
+ "RegenerateUsersRecoveryCodeResponseContent",
+ "ResetPhoneTemplateRequestContent",
+ "ResetPhoneTemplateResponseContent",
+ "ResourceServer",
+ "ResourceServerConsentPolicyEnum",
+ "ResourceServerProofOfPossession",
+ "ResourceServerProofOfPossessionMechanismEnum",
+ "ResourceServerScope",
+ "ResourceServerSubjectTypeAuthorization",
+ "ResourceServerSubjectTypeAuthorizationClient",
+ "ResourceServerSubjectTypeAuthorizationClientPolicyEnum",
+ "ResourceServerSubjectTypeAuthorizationUser",
+ "ResourceServerSubjectTypeAuthorizationUserPolicyEnum",
+ "ResourceServerTokenDialectResponseEnum",
+ "ResourceServerTokenDialectSchemaEnum",
+ "ResourceServerTokenEncryption",
+ "ResourceServerTokenEncryptionAlgorithmEnum",
+ "ResourceServerTokenEncryptionFormatEnum",
+ "ResourceServerTokenEncryptionKey",
+ "ResourceServerVerificationKeyPemCertificate",
+ "RevokedSigningKeysResponseContent",
+ "Role",
+ "RoleUser",
+ "RotateClientSecretResponseContent",
+ "RotateConnectionKeysRequestContent",
+ "RotateConnectionKeysSigningAlgEnum",
+ "RotateConnectionsKeysResponseContent",
+ "RotateSigningKeysResponseContent",
+ "Rule",
+ "RulesConfig",
+ "ScimMappingItem",
+ "ScimTokenItem",
+ "ScreenGroupNameEnum",
+ "SearchEngineVersionsEnum",
+ "SelfServiceProfile",
+ "SelfServiceProfileAllowedStrategyEnum",
+ "SelfServiceProfileBranding",
+ "SelfServiceProfileBrandingColors",
+ "SelfServiceProfileBrandingProperties",
+ "SelfServiceProfileCustomTextLanguageEnum",
+ "SelfServiceProfileCustomTextPageEnum",
+ "SelfServiceProfileDescription",
+ "SelfServiceProfileSsoTicketConnectionConfig",
+ "SelfServiceProfileSsoTicketConnectionOptions",
+ "SelfServiceProfileSsoTicketDomainAliasesConfig",
+ "SelfServiceProfileSsoTicketDomainVerificationEnum",
+ "SelfServiceProfileSsoTicketEnabledOrganization",
+ "SelfServiceProfileSsoTicketGoogleWorkspaceConfig",
+ "SelfServiceProfileSsoTicketIdpInitiatedClientProtocolEnum",
+ "SelfServiceProfileSsoTicketIdpInitiatedOptions",
+ "SelfServiceProfileSsoTicketProvisioningConfig",
+ "SelfServiceProfileSsoTicketProvisioningScopeEnum",
+ "SelfServiceProfileUserAttribute",
+ "SelfServiceProfileUserAttributes",
+ "SessionAuthenticationSignal",
+ "SessionAuthenticationSignals",
+ "SessionClientMetadata",
+ "SessionCookieMetadata",
+ "SessionCookieMetadataModeEnum",
+ "SessionCookieModeEnum",
+ "SessionCookieSchema",
+ "SessionDate",
+ "SessionDeviceMetadata",
+ "SessionIp",
+ "SessionMetadata",
+ "SessionResponseContent",
+ "SetCustomSigningKeysResponseContent",
+ "SetEmailTemplateResponseContent",
+ "SetGuardianFactorDuoSettingsResponseContent",
+ "SetGuardianFactorPhoneMessageTypesResponseContent",
+ "SetGuardianFactorPhoneTemplatesResponseContent",
+ "SetGuardianFactorResponseContent",
+ "SetGuardianFactorSmsTemplatesResponseContent",
+ "SetGuardianFactorsProviderPhoneResponseContent",
+ "SetGuardianFactorsProviderPhoneTwilioResponseContent",
+ "SetGuardianFactorsProviderPushNotificationApnsRequestContent",
+ "SetGuardianFactorsProviderPushNotificationApnsResponseContent",
+ "SetGuardianFactorsProviderPushNotificationFcmRequestContent",
+ "SetGuardianFactorsProviderPushNotificationFcmResponseContent",
+ "SetGuardianFactorsProviderPushNotificationFcmv1RequestContent",
+ "SetGuardianFactorsProviderPushNotificationFcmv1ResponseContent",
+ "SetGuardianFactorsProviderPushNotificationResponseContent",
+ "SetGuardianFactorsProviderPushNotificationSnsResponseContent",
+ "SetGuardianFactorsProviderSmsResponseContent",
+ "SetGuardianFactorsProviderSmsTwilioResponseContent",
+ "SetGuardianPoliciesRequestContent",
+ "SetGuardianPoliciesResponseContent",
+ "SetNetworkAclsResponseContent",
+ "SetPartialsRequestContent",
+ "SetRulesConfigResponseContent",
+ "SetSelfServiceProfileCustomTextRequestContent",
+ "SetSelfServiceProfileCustomTextResponseContent",
+ "SetUserAuthenticationMethodResponseContent",
+ "SetUserAuthenticationMethods",
+ "SetUserAuthenticationMethodsRequestContent",
+ "SetsCustomTextsByLanguageRequestContent",
+ "SigningAlgorithmEnum",
+ "SigningKeys",
+ "SigningKeysDate",
+ "SignupSchema",
+ "SignupStatusEnum",
+ "SignupVerification",
+ "SignupVerified",
+ "SupportedLocales",
+ "SuspiciousIpThrottlingAllowlist",
+ "SuspiciousIpThrottlingAllowlistItem",
+ "SuspiciousIpThrottlingPreLoginStage",
+ "SuspiciousIpThrottlingPreUserRegistrationStage",
+ "SuspiciousIpThrottlingShieldsEnum",
+ "SuspiciousIpThrottlingStage",
+ "TenantOidcLogoutSettings",
+ "TenantSettingsDeviceFlow",
+ "TenantSettingsDeviceFlowCharset",
+ "TenantSettingsErrorPage",
+ "TenantSettingsFlags",
+ "TenantSettingsGuardianPage",
+ "TenantSettingsMtls",
+ "TenantSettingsPasswordPage",
+ "TenantSettingsResourceParameterProfile",
+ "TenantSettingsSessions",
+ "TestActionPayload",
+ "TestActionResponseContent",
+ "TestActionResultPayload",
+ "TestCustomDomainResponseContent",
+ "TestEventDataContent",
+ "TokenExchangeProfileResponseContent",
+ "TokenExchangeProfileTypeEnum",
+ "TokenQuota",
+ "TokenQuotaClientCredentials",
+ "TokenQuotaConfiguration",
+ "TwilioProviderConfiguration",
+ "TwilioProviderCredentials",
+ "TwilioProviderDeliveryMethodEnum",
+ "UniversalLoginExperienceEnum",
+ "UpdateActionBindingsResponseContent",
+ "UpdateActionResponseContent",
+ "UpdateAculResponseContent",
+ "UpdateAttackProtectionCaptchaResponseContent",
+ "UpdateBotDetectionSettingsResponseContent",
+ "UpdateBrandingColors",
+ "UpdateBrandingFont",
+ "UpdateBrandingPageBackground",
+ "UpdateBrandingPhoneProviderResponseContent",
+ "UpdateBrandingResponseContent",
+ "UpdateBrandingThemeResponseContent",
+ "UpdateBreachedPasswordDetectionSettingsResponseContent",
+ "UpdateBruteForceSettingsResponseContent",
+ "UpdateBruteForceSettingsResponseContentMode",
+ "UpdateBruteForceSettingsResponseContentShieldsItem",
+ "UpdateClientGrantResponseContent",
+ "UpdateClientResponseContent",
+ "UpdateConnectionOptions",
+ "UpdateConnectionProfileResponseContent",
+ "UpdateConnectionResponseContent",
+ "UpdateCustomDomainResponseContent",
+ "UpdateDirectoryProvisioningRequestContent",
+ "UpdateDirectoryProvisioningResponseContent",
+ "UpdateEmailProviderResponseContent",
+ "UpdateEmailTemplateResponseContent",
+ "UpdateEnabledClientConnectionsRequestContent",
+ "UpdateEnabledClientConnectionsRequestContentItem",
+ "UpdateEventStreamResponseContent",
+ "UpdateFlowResponseContent",
+ "UpdateFlowsVaultConnectionResponseContent",
+ "UpdateFlowsVaultConnectionSetup",
+ "UpdateFormResponseContent",
+ "UpdateGuardianFactorDuoSettingsResponseContent",
+ "UpdateGuardianFactorsProviderPushNotificationSnsResponseContent",
+ "UpdateHookResponseContent",
+ "UpdateHookSecretRequestContent",
+ "UpdateLogStreamResponseContent",
+ "UpdateNetworkAclResponseContent",
+ "UpdateOrganizationConnectionResponseContent",
+ "UpdateOrganizationDiscoveryDomainResponseContent",
+ "UpdateOrganizationResponseContent",
+ "UpdatePhoneTemplateResponseContent",
+ "UpdateResourceServerResponseContent",
+ "UpdateRiskAssessmentsSettingsNewDeviceResponseContent",
+ "UpdateRiskAssessmentsSettingsResponseContent",
+ "UpdateRoleResponseContent",
+ "UpdateRuleResponseContent",
+ "UpdateScimConfigurationResponseContent",
+ "UpdateSelfServiceProfileResponseContent",
+ "UpdateSessionResponseContent",
+ "UpdateSettingsResponseContent",
+ "UpdateSuspiciousIpThrottlingSettingsResponseContent",
+ "UpdateTenantSettingsResponseContent",
+ "UpdateTokenQuota",
+ "UpdateUniversalLoginTemplateRequestContent",
+ "UpdateUniversalLoginTemplateRequestContentTemplate",
+ "UpdateUserAttributeProfileResponseContent",
+ "UpdateUserAuthenticationMethodResponseContent",
+ "UpdateUserResponseContent",
+ "UpdateVerifiableCredentialTemplateResponseContent",
+ "UserAppMetadataSchema",
+ "UserAttributeProfile",
+ "UserAttributeProfileId",
+ "UserAttributeProfileName",
+ "UserAttributeProfileOidcMapping",
+ "UserAttributeProfilePatchUserId",
+ "UserAttributeProfileSamlMapping",
+ "UserAttributeProfileStrategyOverrides",
+ "UserAttributeProfileStrategyOverridesMapping",
+ "UserAttributeProfileStrategyOverridesUserId",
+ "UserAttributeProfileStrategyOverridesUserIdMapping",
+ "UserAttributeProfileTemplate",
+ "UserAttributeProfileTemplateItem",
+ "UserAttributeProfileUserAttributeAdditionalProperties",
+ "UserAttributeProfileUserAttributes",
+ "UserAttributeProfileUserId",
+ "UserAttributeProfileUserIdOidcMappingEnum",
+ "UserAttributeProfileUserIdOidcStrategyOverrideMapping",
+ "UserAttributeProfileUserIdSamlMapping",
+ "UserAuthenticationMethod",
+ "UserAuthenticationMethodProperties",
+ "UserAuthenticationMethodPropertiesEnum",
+ "UserBlockIdentifier",
+ "UserDateSchema",
+ "UserEnrollmentAuthMethodEnum",
+ "UserEnrollmentStatusEnum",
+ "UserGrant",
+ "UserGroupsResponseSchema",
+ "UserId",
+ "UserIdentity",
+ "UserIdentityProviderEnum",
+ "UserIdentitySchema",
+ "UserListLogOffsetPaginatedResponseContent",
+ "UserMetadata",
+ "UserMetadataSchema",
+ "UserMultifactorProviderEnum",
+ "UserPermissionSchema",
+ "UserProfileData",
+ "UserResponseSchema",
+ "UsernameAllowedTypes",
+ "UsernameAttribute",
+ "UsernameValidation",
+ "UsersEnrollment",
+ "VerifiableCredentialTemplateResponse",
+ "VerificationMethodEnum",
+ "VerifyCustomDomainResponseContent",
+ "VerifyEmailTicketResponseContent",
+]
diff --git a/src/auth0/management/types/action.py b/src/auth0/management/types/action.py
new file mode 100644
index 00000000..8fc8f26f
--- /dev/null
+++ b/src/auth0/management/types/action.py
@@ -0,0 +1,92 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_build_status_enum import ActionBuildStatusEnum
+from .action_deployed_version import ActionDeployedVersion
+from .action_secret_response import ActionSecretResponse
+from .action_trigger import ActionTrigger
+from .action_version_dependency import ActionVersionDependency
+from .integration import Integration
+
+
+class Action(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The unique ID of the action.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="my-action")
+ """
+ The name of an action.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this action supports. At this time, an action can only target a single trigger at a time.
+ """
+
+ all_changes_deployed: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if all of an Action's contents have been deployed.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was updated.
+ """
+
+ code: typing.Optional[str] = pydantic.Field(default="module.exports = () => {}")
+ """
+ The source code of the action.
+ """
+
+ dependencies: typing.Optional[typing.List[ActionVersionDependency]] = pydantic.Field(default=None)
+ """
+ The list of third party npm modules, and their versions, that this action depends on.
+ """
+
+ runtime: typing.Optional[str] = pydantic.Field(default="node22")
+ """
+ The Node runtime. For example: `node22`, defaults to `node22`
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretResponse]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ deployed_version: typing.Optional[ActionDeployedVersion] = None
+ installed_integration_id: typing.Optional[str] = pydantic.Field(default="7d2bc0c9-c0c2-433a-9f4e-86ef80270aad")
+ """
+ installed_integration_id is the fk reference to the InstalledIntegration entity.
+ """
+
+ integration: typing.Optional[Integration] = None
+ status: typing.Optional[ActionBuildStatusEnum] = None
+ built_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was built successfully.
+ """
+
+ deploy: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if the action should be deployed after creation.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_base.py b/src/auth0/management/types/action_base.py
new file mode 100644
index 00000000..18e8d42a
--- /dev/null
+++ b/src/auth0/management/types/action_base.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_trigger import ActionTrigger
+
+
+class ActionBase(UniversalBaseModel):
+ """
+ The action to which this version belongs.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The unique ID of the action.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="my-action")
+ """
+ The name of an action.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this action supports. At this time, an action can only target a single trigger at a time.
+ """
+
+ all_changes_deployed: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if all of an Action's contents have been deployed.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_binding.py b/src/auth0/management/types/action_binding.py
new file mode 100644
index 00000000..827d2c7b
--- /dev/null
+++ b/src/auth0/management/types/action_binding.py
@@ -0,0 +1,46 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action import Action
+from .action_trigger_type_enum import ActionTriggerTypeEnum
+
+
+class ActionBinding(UniversalBaseModel):
+ """
+ Binding is the associative entity joining a trigger, and an action together.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="4a881e22-0562-4178-bc91-b0f2b321dc13")
+ """
+ The unique ID of this binding.
+ """
+
+ trigger_id: typing.Optional[ActionTriggerTypeEnum] = None
+ display_name: typing.Optional[str] = pydantic.Field(default="my-action-1")
+ """
+ The name of the binding.
+ """
+
+ action: typing.Optional[Action] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when the binding was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when the binding was updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_binding_ref.py b/src/auth0/management/types/action_binding_ref.py
new file mode 100644
index 00000000..11af7f27
--- /dev/null
+++ b/src/auth0/management/types/action_binding_ref.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_binding_ref_type_enum import ActionBindingRefTypeEnum
+
+
+class ActionBindingRef(UniversalBaseModel):
+ """
+ A reference to an action. An action can be referred to by ID or by Name.
+ """
+
+ type: typing.Optional[ActionBindingRefTypeEnum] = None
+ value: typing.Optional[str] = pydantic.Field(default="my-action")
+ """
+ The id or name of an action that is being bound to a trigger.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_binding_ref_type_enum.py b/src/auth0/management/types/action_binding_ref_type_enum.py
new file mode 100644
index 00000000..4c72a777
--- /dev/null
+++ b/src/auth0/management/types/action_binding_ref_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ActionBindingRefTypeEnum = typing.Union[typing.Literal["binding_id", "action_id", "action_name"], typing.Any]
diff --git a/src/auth0/management/types/action_binding_type_enum.py b/src/auth0/management/types/action_binding_type_enum.py
new file mode 100644
index 00000000..ecaee8d8
--- /dev/null
+++ b/src/auth0/management/types/action_binding_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ActionBindingTypeEnum = typing.Union[typing.Literal["trigger-bound", "entity-bound"], typing.Any]
diff --git a/src/auth0/management/types/action_binding_with_ref.py b/src/auth0/management/types/action_binding_with_ref.py
new file mode 100644
index 00000000..0f689196
--- /dev/null
+++ b/src/auth0/management/types/action_binding_with_ref.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_binding_ref import ActionBindingRef
+from .action_secret_request import ActionSecretRequest
+
+
+class ActionBindingWithRef(UniversalBaseModel):
+ ref: ActionBindingRef
+ display_name: typing.Optional[str] = pydantic.Field(default="my-action-1")
+ """
+ The name of the binding.
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretRequest]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_build_status_enum.py b/src/auth0/management/types/action_build_status_enum.py
new file mode 100644
index 00000000..58ebfc17
--- /dev/null
+++ b/src/auth0/management/types/action_build_status_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ActionBuildStatusEnum = typing.Union[
+ typing.Literal["pending", "building", "packaged", "built", "retrying", "failed"], typing.Any
+]
diff --git a/src/auth0/management/types/action_deployed_version.py b/src/auth0/management/types/action_deployed_version.py
new file mode 100644
index 00000000..abc2526d
--- /dev/null
+++ b/src/auth0/management/types/action_deployed_version.py
@@ -0,0 +1,95 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_base import ActionBase
+from .action_error import ActionError
+from .action_secret_response import ActionSecretResponse
+from .action_trigger import ActionTrigger
+from .action_version_build_status_enum import ActionVersionBuildStatusEnum
+from .action_version_dependency import ActionVersionDependency
+
+
+class ActionDeployedVersion(UniversalBaseModel):
+ """
+ The version of the action that is currently deployed.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="12a3b9e6-06e6-4a29-96bf-90c82fe79a0d")
+ """
+ The unique id of an action version.
+ """
+
+ action_id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The id of the action to which this version belongs.
+ """
+
+ code: typing.Optional[str] = pydantic.Field(default="module.exports = () => {}")
+ """
+ The source code of this specific version of the action.
+ """
+
+ dependencies: typing.Optional[typing.List[ActionVersionDependency]] = pydantic.Field(default=None)
+ """
+ The list of third party npm modules, and their versions, that this specific version depends on.
+ """
+
+ deployed: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Indicates if this specific version is the currently one deployed.
+ """
+
+ runtime: typing.Optional[str] = pydantic.Field(default="node22")
+ """
+ The Node runtime. For example: `node22`
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretResponse]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ status: typing.Optional[ActionVersionBuildStatusEnum] = None
+ number: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ The index of this version in list of versions for the action.
+ """
+
+ errors: typing.Optional[typing.List[ActionError]] = pydantic.Field(default=None)
+ """
+ Any errors that occurred while the version was being built.
+ """
+
+ action: typing.Optional[ActionBase] = None
+ built_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was built successfully.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when a version was updated. Versions are never updated externally. Only Auth0 will update an action version as it is being built.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this version supports. At this time, a version can only target a single trigger at a time.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_error.py b/src/auth0/management/types/action_error.py
new file mode 100644
index 00000000..ec9369b4
--- /dev/null
+++ b/src/auth0/management/types/action_error.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ActionError(UniversalBaseModel):
+ """
+ Error is a generic error with a human readable id which should be easily referenced in support tickets.
+ """
+
+ id: typing.Optional[str] = None
+ msg: typing.Optional[str] = None
+ url: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_execution_result.py b/src/auth0/management/types/action_execution_result.py
new file mode 100644
index 00000000..f50720fb
--- /dev/null
+++ b/src/auth0/management/types/action_execution_result.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_error import ActionError
+
+
+class ActionExecutionResult(UniversalBaseModel):
+ """
+ Captures the results of a single action being executed.
+ """
+
+ action_name: typing.Optional[str] = pydantic.Field(default="my-action")
+ """
+ The name of the action that was executed.
+ """
+
+ error: typing.Optional[ActionError] = None
+ started_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when the action was started.
+ """
+
+ ended_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when the action finished executing.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_execution_status_enum.py b/src/auth0/management/types/action_execution_status_enum.py
new file mode 100644
index 00000000..95287e1a
--- /dev/null
+++ b/src/auth0/management/types/action_execution_status_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ActionExecutionStatusEnum = typing.Union[
+ typing.Literal["unspecified", "pending", "final", "partial", "canceled", "suspended"], typing.Any
+]
diff --git a/src/auth0/management/types/action_secret_request.py b/src/auth0/management/types/action_secret_request.py
new file mode 100644
index 00000000..b02248c0
--- /dev/null
+++ b/src/auth0/management/types/action_secret_request.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ActionSecretRequest(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="mySecret")
+ """
+ The name of the particular secret, e.g. API_KEY.
+ """
+
+ value: typing.Optional[str] = pydantic.Field(default="mySecretValue")
+ """
+ The value of the particular secret, e.g. secret123. A secret's value can only be set upon creation. A secret's value will never be returned by the API.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_secret_response.py b/src/auth0/management/types/action_secret_response.py
new file mode 100644
index 00000000..d32646c5
--- /dev/null
+++ b/src/auth0/management/types/action_secret_response.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ActionSecretResponse(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="mySecret")
+ """
+ The name of the particular secret, e.g. API_KEY.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when the secret was last updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_trigger.py b/src/auth0/management/types/action_trigger.py
new file mode 100644
index 00000000..e1868647
--- /dev/null
+++ b/src/auth0/management/types/action_trigger.py
@@ -0,0 +1,48 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_binding_type_enum import ActionBindingTypeEnum
+from .action_trigger_compatible_trigger import ActionTriggerCompatibleTrigger
+from .action_trigger_type_enum import ActionTriggerTypeEnum
+
+
+class ActionTrigger(UniversalBaseModel):
+ id: ActionTriggerTypeEnum
+ version: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The version of a trigger. v1, v2, etc.
+ """
+
+ status: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ status points to the trigger status.
+ """
+
+ runtimes: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ runtimes supported by this trigger.
+ """
+
+ default_runtime: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Runtime that will be used when none is specified when creating an action.
+ """
+
+ compatible_triggers: typing.Optional[typing.List[ActionTriggerCompatibleTrigger]] = pydantic.Field(default=None)
+ """
+ compatible_triggers informs which other trigger supports the same event and api.
+ """
+
+ binding_policy: typing.Optional[ActionBindingTypeEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_trigger_compatible_trigger.py b/src/auth0/management/types/action_trigger_compatible_trigger.py
new file mode 100644
index 00000000..63f02c48
--- /dev/null
+++ b/src/auth0/management/types/action_trigger_compatible_trigger.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_trigger_type_enum import ActionTriggerTypeEnum
+
+
+class ActionTriggerCompatibleTrigger(UniversalBaseModel):
+ id: ActionTriggerTypeEnum
+ version: str = pydantic.Field()
+ """
+ The version of a trigger. v1, v2, etc.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_trigger_type_enum.py b/src/auth0/management/types/action_trigger_type_enum.py
new file mode 100644
index 00000000..dfe0de88
--- /dev/null
+++ b/src/auth0/management/types/action_trigger_type_enum.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ActionTriggerTypeEnum = str
diff --git a/src/auth0/management/types/action_version.py b/src/auth0/management/types/action_version.py
new file mode 100644
index 00000000..9d324da7
--- /dev/null
+++ b/src/auth0/management/types/action_version.py
@@ -0,0 +1,91 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_base import ActionBase
+from .action_error import ActionError
+from .action_secret_response import ActionSecretResponse
+from .action_trigger import ActionTrigger
+from .action_version_build_status_enum import ActionVersionBuildStatusEnum
+from .action_version_dependency import ActionVersionDependency
+
+
+class ActionVersion(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="12a3b9e6-06e6-4a29-96bf-90c82fe79a0d")
+ """
+ The unique id of an action version.
+ """
+
+ action_id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The id of the action to which this version belongs.
+ """
+
+ code: typing.Optional[str] = pydantic.Field(default="module.exports = () => {}")
+ """
+ The source code of this specific version of the action.
+ """
+
+ dependencies: typing.Optional[typing.List[ActionVersionDependency]] = pydantic.Field(default=None)
+ """
+ The list of third party npm modules, and their versions, that this specific version depends on.
+ """
+
+ deployed: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Indicates if this specific version is the currently one deployed.
+ """
+
+ runtime: typing.Optional[str] = pydantic.Field(default="node22")
+ """
+ The Node runtime. For example: `node22`
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretResponse]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ status: typing.Optional[ActionVersionBuildStatusEnum] = None
+ number: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ The index of this version in list of versions for the action.
+ """
+
+ errors: typing.Optional[typing.List[ActionError]] = pydantic.Field(default=None)
+ """
+ Any errors that occurred while the version was being built.
+ """
+
+ action: typing.Optional[ActionBase] = None
+ built_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was built successfully.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when a version was updated. Versions are never updated externally. Only Auth0 will update an action version as it is being built.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this version supports. At this time, a version can only target a single trigger at a time.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/action_version_build_status_enum.py b/src/auth0/management/types/action_version_build_status_enum.py
new file mode 100644
index 00000000..be385d2a
--- /dev/null
+++ b/src/auth0/management/types/action_version_build_status_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ActionVersionBuildStatusEnum = typing.Union[
+ typing.Literal["pending", "building", "packaged", "built", "retrying", "failed"], typing.Any
+]
diff --git a/src/auth0/management/types/action_version_dependency.py b/src/auth0/management/types/action_version_dependency.py
new file mode 100644
index 00000000..5ec4f989
--- /dev/null
+++ b/src/auth0/management/types/action_version_dependency.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ActionVersionDependency(UniversalBaseModel):
+ """
+ Dependency is an npm module. These values are used to produce an immutable artifact, which manifests as a layer_id.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ name is the name of the npm module, e.g. lodash
+ """
+
+ version: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ description is the version of the npm module, e.g. 4.17.1
+ """
+
+ registry_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ registry_url is an optional value used primarily for private npm registries.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_client_filter.py b/src/auth0/management/types/acul_client_filter.py
new file mode 100644
index 00000000..5f490040
--- /dev/null
+++ b/src/auth0/management/types/acul_client_filter.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .acul_client_filter_by_id import AculClientFilterById
+from .acul_client_filter_by_metadata import AculClientFilterByMetadata
+
+AculClientFilter = typing.Union[AculClientFilterById, AculClientFilterByMetadata]
diff --git a/src/auth0/management/types/acul_client_filter_by_id.py b/src/auth0/management/types/acul_client_filter_by_id.py
new file mode 100644
index 00000000..2af6d0d1
--- /dev/null
+++ b/src/auth0/management/types/acul_client_filter_by_id.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AculClientFilterById(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Client ID
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_client_filter_by_metadata.py b/src/auth0/management/types/acul_client_filter_by_metadata.py
new file mode 100644
index 00000000..5753afb0
--- /dev/null
+++ b/src/auth0/management/types/acul_client_filter_by_metadata.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_client_metadata import AculClientMetadata
+
+
+class AculClientFilterByMetadata(UniversalBaseModel):
+ metadata: AculClientMetadata
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_client_metadata.py b/src/auth0/management/types/acul_client_metadata.py
new file mode 100644
index 00000000..4892f020
--- /dev/null
+++ b/src/auth0/management/types/acul_client_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AculClientMetadata = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/acul_configs.py b/src/auth0/management/types/acul_configs.py
new file mode 100644
index 00000000..73406e3a
--- /dev/null
+++ b/src/auth0/management/types/acul_configs.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .acul_configs_item import AculConfigsItem
+
+AculConfigs = typing.List[AculConfigsItem]
diff --git a/src/auth0/management/types/acul_configs_item.py b/src/auth0/management/types/acul_configs_item.py
new file mode 100644
index 00000000..d14003ec
--- /dev/null
+++ b/src/auth0/management/types/acul_configs_item.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_context_configuration import AculContextConfiguration
+from .acul_default_head_tags_disabled import AculDefaultHeadTagsDisabled
+from .acul_filters import AculFilters
+from .acul_head_tags import AculHeadTags
+from .acul_rendering_mode_enum import AculRenderingModeEnum
+from .acul_use_page_template import AculUsePageTemplate
+from .prompt_group_name_enum import PromptGroupNameEnum
+from .screen_group_name_enum import ScreenGroupNameEnum
+
+
+class AculConfigsItem(UniversalBaseModel):
+ prompt: PromptGroupNameEnum
+ screen: ScreenGroupNameEnum
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = None
+ context_configuration: typing.Optional[AculContextConfiguration] = None
+ default_head_tags_disabled: typing.Optional[AculDefaultHeadTagsDisabled] = False
+ use_page_template: typing.Optional[AculUsePageTemplate] = False
+ head_tags: typing.Optional[AculHeadTags] = None
+ filters: typing.Optional[AculFilters] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_context_configuration.py b/src/auth0/management/types/acul_context_configuration.py
new file mode 100644
index 00000000..cc167f47
--- /dev/null
+++ b/src/auth0/management/types/acul_context_configuration.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .acul_context_configuration_item import AculContextConfigurationItem
+
+AculContextConfiguration = typing.List[AculContextConfigurationItem]
diff --git a/src/auth0/management/types/acul_context_configuration_item.py b/src/auth0/management/types/acul_context_configuration_item.py
new file mode 100644
index 00000000..a76d7e2e
--- /dev/null
+++ b/src/auth0/management/types/acul_context_configuration_item.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .acul_context_enum import AculContextEnum
+
+AculContextConfigurationItem = typing.Union[AculContextEnum, str]
diff --git a/src/auth0/management/types/acul_context_enum.py b/src/auth0/management/types/acul_context_enum.py
new file mode 100644
index 00000000..9627470f
--- /dev/null
+++ b/src/auth0/management/types/acul_context_enum.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AculContextEnum = typing.Union[
+ typing.Literal[
+ "branding.settings",
+ "branding.themes.default",
+ "client.logo_uri",
+ "client.description",
+ "organization.display_name",
+ "organization.branding",
+ "screen.texts",
+ "tenant.name",
+ "tenant.friendly_name",
+ "tenant.logo_url",
+ "tenant.enabled_locales",
+ "untrusted_data.submitted_form_data",
+ "untrusted_data.authorization_params.login_hint",
+ "untrusted_data.authorization_params.screen_hint",
+ "untrusted_data.authorization_params.ui_locales",
+ "user.organizations",
+ "transaction.custom_domain.domain",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/acul_default_head_tags_disabled.py b/src/auth0/management/types/acul_default_head_tags_disabled.py
new file mode 100644
index 00000000..59b98a74
--- /dev/null
+++ b/src/auth0/management/types/acul_default_head_tags_disabled.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AculDefaultHeadTagsDisabled = typing.Optional[bool]
diff --git a/src/auth0/management/types/acul_domain_filter.py b/src/auth0/management/types/acul_domain_filter.py
new file mode 100644
index 00000000..f630ebf3
--- /dev/null
+++ b/src/auth0/management/types/acul_domain_filter.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .acul_domain_filter_by_id import AculDomainFilterById
+from .acul_domain_filter_by_metadata import AculDomainFilterByMetadata
+
+AculDomainFilter = typing.Union[AculDomainFilterById, AculDomainFilterByMetadata]
diff --git a/src/auth0/management/types/acul_domain_filter_by_id.py b/src/auth0/management/types/acul_domain_filter_by_id.py
new file mode 100644
index 00000000..ef16561d
--- /dev/null
+++ b/src/auth0/management/types/acul_domain_filter_by_id.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AculDomainFilterById(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Domain ID
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_domain_filter_by_metadata.py b/src/auth0/management/types/acul_domain_filter_by_metadata.py
new file mode 100644
index 00000000..3c403230
--- /dev/null
+++ b/src/auth0/management/types/acul_domain_filter_by_metadata.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_domain_metadata import AculDomainMetadata
+
+
+class AculDomainFilterByMetadata(UniversalBaseModel):
+ metadata: AculDomainMetadata
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_domain_metadata.py b/src/auth0/management/types/acul_domain_metadata.py
new file mode 100644
index 00000000..67b99faf
--- /dev/null
+++ b/src/auth0/management/types/acul_domain_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AculDomainMetadata = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/acul_filters.py b/src/auth0/management/types/acul_filters.py
new file mode 100644
index 00000000..fccbd79c
--- /dev/null
+++ b/src/auth0/management/types/acul_filters.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_client_filter import AculClientFilter
+from .acul_domain_filter import AculDomainFilter
+from .acul_match_type_enum import AculMatchTypeEnum
+from .acul_organization_filter import AculOrganizationFilter
+
+
+class AculFilters(UniversalBaseModel):
+ """
+ Optional filters to apply rendering rules to specific entities
+ """
+
+ match_type: typing.Optional[AculMatchTypeEnum] = None
+ clients: typing.Optional[typing.List[AculClientFilter]] = pydantic.Field(default=None)
+ """
+ Clients filter
+ """
+
+ organizations: typing.Optional[typing.List[AculOrganizationFilter]] = pydantic.Field(default=None)
+ """
+ Organizations filter
+ """
+
+ domains: typing.Optional[typing.List[AculDomainFilter]] = pydantic.Field(default=None)
+ """
+ Domains filter
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_head_tag.py b/src/auth0/management/types/acul_head_tag.py
new file mode 100644
index 00000000..3644d47d
--- /dev/null
+++ b/src/auth0/management/types/acul_head_tag.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_head_tag_attributes import AculHeadTagAttributes
+from .acul_head_tag_content import AculHeadTagContent
+
+
+class AculHeadTag(UniversalBaseModel):
+ tag: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Any HTML element valid for use in the head tag
+ """
+
+ attributes: typing.Optional[AculHeadTagAttributes] = None
+ content: typing.Optional[AculHeadTagContent] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_head_tag_attributes.py b/src/auth0/management/types/acul_head_tag_attributes.py
new file mode 100644
index 00000000..8b6540b9
--- /dev/null
+++ b/src/auth0/management/types/acul_head_tag_attributes.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AculHeadTagAttributes = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/acul_head_tag_content.py b/src/auth0/management/types/acul_head_tag_content.py
new file mode 100644
index 00000000..1f08c4a3
--- /dev/null
+++ b/src/auth0/management/types/acul_head_tag_content.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+AculHeadTagContent = str
diff --git a/src/auth0/management/types/acul_head_tags.py b/src/auth0/management/types/acul_head_tags.py
new file mode 100644
index 00000000..32c93002
--- /dev/null
+++ b/src/auth0/management/types/acul_head_tags.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .acul_head_tag import AculHeadTag
+
+AculHeadTags = typing.List[AculHeadTag]
diff --git a/src/auth0/management/types/acul_match_type_enum.py b/src/auth0/management/types/acul_match_type_enum.py
new file mode 100644
index 00000000..cd38912d
--- /dev/null
+++ b/src/auth0/management/types/acul_match_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AculMatchTypeEnum = typing.Union[typing.Literal["includes_any", "excludes_any"], typing.Any]
diff --git a/src/auth0/management/types/acul_organization_filter.py b/src/auth0/management/types/acul_organization_filter.py
new file mode 100644
index 00000000..29b7893a
--- /dev/null
+++ b/src/auth0/management/types/acul_organization_filter.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .acul_organization_filter_by_id import AculOrganizationFilterById
+from .acul_organization_filter_by_metadata import AculOrganizationFilterByMetadata
+
+AculOrganizationFilter = typing.Union[AculOrganizationFilterById, AculOrganizationFilterByMetadata]
diff --git a/src/auth0/management/types/acul_organization_filter_by_id.py b/src/auth0/management/types/acul_organization_filter_by_id.py
new file mode 100644
index 00000000..ce3d7485
--- /dev/null
+++ b/src/auth0/management/types/acul_organization_filter_by_id.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AculOrganizationFilterById(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Organization ID
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_organization_filter_by_metadata.py b/src/auth0/management/types/acul_organization_filter_by_metadata.py
new file mode 100644
index 00000000..d143d033
--- /dev/null
+++ b/src/auth0/management/types/acul_organization_filter_by_metadata.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_organization_metadata import AculOrganizationMetadata
+
+
+class AculOrganizationFilterByMetadata(UniversalBaseModel):
+ metadata: AculOrganizationMetadata
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_organization_metadata.py b/src/auth0/management/types/acul_organization_metadata.py
new file mode 100644
index 00000000..7494dd54
--- /dev/null
+++ b/src/auth0/management/types/acul_organization_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AculOrganizationMetadata = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/acul_rendering_mode_enum.py b/src/auth0/management/types/acul_rendering_mode_enum.py
new file mode 100644
index 00000000..25c3afd7
--- /dev/null
+++ b/src/auth0/management/types/acul_rendering_mode_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AculRenderingModeEnum = typing.Union[typing.Literal["advanced", "standard"], typing.Any]
diff --git a/src/auth0/management/types/acul_response_content.py b/src/auth0/management/types/acul_response_content.py
new file mode 100644
index 00000000..8bd90cdf
--- /dev/null
+++ b/src/auth0/management/types/acul_response_content.py
@@ -0,0 +1,43 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_filters import AculFilters
+from .acul_head_tag import AculHeadTag
+from .acul_rendering_mode_enum import AculRenderingModeEnum
+
+
+class AculResponseContent(UniversalBaseModel):
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = None
+ context_configuration: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Context values to make available
+ """
+
+ default_head_tags_disabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Override Universal Login default head tags
+ """
+
+ use_page_template: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Use page template with ACUL
+ """
+
+ head_tags: typing.Optional[typing.List[AculHeadTag]] = pydantic.Field(default=None)
+ """
+ An array of head tags
+ """
+
+ filters: typing.Optional[AculFilters] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/acul_use_page_template.py b/src/auth0/management/types/acul_use_page_template.py
new file mode 100644
index 00000000..0552d649
--- /dev/null
+++ b/src/auth0/management/types/acul_use_page_template.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AculUsePageTemplate = typing.Optional[bool]
diff --git a/src/auth0/management/types/add_organization_connection_response_content.py b/src/auth0/management/types/add_organization_connection_response_content.py
new file mode 100644
index 00000000..03e57796
--- /dev/null
+++ b/src/auth0/management/types/add_organization_connection_response_content.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_connection_information import OrganizationConnectionInformation
+
+
+class AddOrganizationConnectionResponseContent(UniversalBaseModel):
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the connection.
+ """
+
+ assign_membership_on_login: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+ """
+
+ is_signup_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+ """
+
+ connection: typing.Optional[OrganizationConnectionInformation] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/anomaly_ip_format.py b/src/auth0/management/types/anomaly_ip_format.py
new file mode 100644
index 00000000..f6eafee8
--- /dev/null
+++ b/src/auth0/management/types/anomaly_ip_format.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+AnomalyIpFormat = str
diff --git a/src/auth0/management/types/app_metadata.py b/src/auth0/management/types/app_metadata.py
new file mode 100644
index 00000000..ea77dbac
--- /dev/null
+++ b/src/auth0/management/types/app_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AppMetadata = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/assessors_type_enum.py b/src/auth0/management/types/assessors_type_enum.py
new file mode 100644
index 00000000..3e8211d9
--- /dev/null
+++ b/src/auth0/management/types/assessors_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AssessorsTypeEnum = typing.Literal["new-device"]
diff --git a/src/auth0/management/types/associate_organization_client_grant_response_content.py b/src/auth0/management/types/associate_organization_client_grant_response_content.py
new file mode 100644
index 00000000..da4f418d
--- /dev/null
+++ b/src/auth0/management/types/associate_organization_client_grant_response_content.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_usage_enum import OrganizationUsageEnum
+
+
+class AssociateOrganizationClientGrantResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the client grant.
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the client.
+ """
+
+ audience: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The audience (API identifier) of this client grant
+ """
+
+ scope: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Scopes allowed for this client grant.
+ """
+
+ organization_usage: typing.Optional[OrganizationUsageEnum] = None
+ allow_any_organization: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, any organization can be used with this grant. If disabled (default), the grant must be explicitly assigned to the desired organizations.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/async_approval_notifications_channels_enum.py b/src/auth0/management/types/async_approval_notifications_channels_enum.py
new file mode 100644
index 00000000..f012147e
--- /dev/null
+++ b/src/auth0/management/types/async_approval_notifications_channels_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AsyncApprovalNotificationsChannelsEnum = typing.Union[typing.Literal["guardian-push", "email"], typing.Any]
diff --git a/src/auth0/management/types/attack_protection_captcha_arkose_response_content.py b/src/auth0/management/types/attack_protection_captcha_arkose_response_content.py
new file mode 100644
index 00000000..8fb53b78
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_captcha_arkose_response_content.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionCaptchaArkoseResponseContent(UniversalBaseModel):
+ site_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The site key for the Arkose captcha provider.
+ """
+
+ fail_open: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the captcha should fail open.
+ """
+
+ client_subdomain: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The subdomain used for client requests to the Arkose captcha provider.
+ """
+
+ verify_subdomain: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The subdomain used for server-side verification requests to the Arkose captcha provider.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_captcha_auth_challenge_request.py b/src/auth0/management/types/attack_protection_captcha_auth_challenge_request.py
new file mode 100644
index 00000000..4804a7e5
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_captcha_auth_challenge_request.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionCaptchaAuthChallengeRequest(UniversalBaseModel):
+ fail_open: bool = pydantic.Field()
+ """
+ Whether the auth challenge should fail open.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_captcha_auth_challenge_response_content.py b/src/auth0/management/types/attack_protection_captcha_auth_challenge_response_content.py
new file mode 100644
index 00000000..34fb0201
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_captcha_auth_challenge_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionCaptchaAuthChallengeResponseContent(UniversalBaseModel):
+ fail_open: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the auth challenge should fail open.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_captcha_friendly_captcha_response_content.py b/src/auth0/management/types/attack_protection_captcha_friendly_captcha_response_content.py
new file mode 100644
index 00000000..2cec228a
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_captcha_friendly_captcha_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionCaptchaFriendlyCaptchaResponseContent(UniversalBaseModel):
+ site_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The site key for the Friendly Captcha provider.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_captcha_hcaptcha_response_content.py b/src/auth0/management/types/attack_protection_captcha_hcaptcha_response_content.py
new file mode 100644
index 00000000..193e2836
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_captcha_hcaptcha_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionCaptchaHcaptchaResponseContent(UniversalBaseModel):
+ site_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The site key for the hCaptcha provider.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_captcha_provider_id.py b/src/auth0/management/types/attack_protection_captcha_provider_id.py
new file mode 100644
index 00000000..09fd4736
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_captcha_provider_id.py
@@ -0,0 +1,16 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AttackProtectionCaptchaProviderId = typing.Union[
+ typing.Literal[
+ "arkose",
+ "auth_challenge",
+ "friendly_captcha",
+ "hcaptcha",
+ "recaptcha_v2",
+ "recaptcha_enterprise",
+ "simple_captcha",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/attack_protection_captcha_recaptcha_enterprise_response_content.py b/src/auth0/management/types/attack_protection_captcha_recaptcha_enterprise_response_content.py
new file mode 100644
index 00000000..0076577a
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_captcha_recaptcha_enterprise_response_content.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionCaptchaRecaptchaEnterpriseResponseContent(UniversalBaseModel):
+ site_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The site key for the reCAPTCHA Enterprise provider.
+ """
+
+ project_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The project ID for the reCAPTCHA Enterprise provider.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_captcha_recaptcha_v_2_response_content.py b/src/auth0/management/types/attack_protection_captcha_recaptcha_v_2_response_content.py
new file mode 100644
index 00000000..a750bf55
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_captcha_recaptcha_v_2_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionCaptchaRecaptchaV2ResponseContent(UniversalBaseModel):
+ site_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The site key for the reCAPTCHA v2 provider.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_captcha_simple_captcha_response_content.py b/src/auth0/management/types/attack_protection_captcha_simple_captcha_response_content.py
new file mode 100644
index 00000000..ca05a7c2
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_captcha_simple_captcha_response_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AttackProtectionCaptchaSimpleCaptchaResponseContent = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/attack_protection_update_captcha_arkose.py b/src/auth0/management/types/attack_protection_update_captcha_arkose.py
new file mode 100644
index 00000000..3843ac12
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_update_captcha_arkose.py
@@ -0,0 +1,42 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionUpdateCaptchaArkose(UniversalBaseModel):
+ site_key: str = pydantic.Field()
+ """
+ The site key for the Arkose captcha provider.
+ """
+
+ secret: str = pydantic.Field()
+ """
+ The secret key for the Arkose captcha provider.
+ """
+
+ client_subdomain: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The subdomain used for client requests to the Arkose captcha provider.
+ """
+
+ verify_subdomain: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The subdomain used for server-side verification requests to the Arkose captcha provider.
+ """
+
+ fail_open: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the captcha should fail open.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_update_captcha_friendly_captcha.py b/src/auth0/management/types/attack_protection_update_captcha_friendly_captcha.py
new file mode 100644
index 00000000..50cae225
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_update_captcha_friendly_captcha.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionUpdateCaptchaFriendlyCaptcha(UniversalBaseModel):
+ site_key: str = pydantic.Field()
+ """
+ The site key for the Friendly Captcha provider.
+ """
+
+ secret: str = pydantic.Field()
+ """
+ The secret key for the Friendly Captcha provider.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_update_captcha_hcaptcha.py b/src/auth0/management/types/attack_protection_update_captcha_hcaptcha.py
new file mode 100644
index 00000000..bfd5a62e
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_update_captcha_hcaptcha.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionUpdateCaptchaHcaptcha(UniversalBaseModel):
+ site_key: str = pydantic.Field()
+ """
+ The site key for the hCaptcha provider.
+ """
+
+ secret: str = pydantic.Field()
+ """
+ The secret key for the hCaptcha provider.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_update_captcha_recaptcha_enterprise.py b/src/auth0/management/types/attack_protection_update_captcha_recaptcha_enterprise.py
new file mode 100644
index 00000000..417631f3
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_update_captcha_recaptcha_enterprise.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionUpdateCaptchaRecaptchaEnterprise(UniversalBaseModel):
+ site_key: str = pydantic.Field()
+ """
+ The site key for the reCAPTCHA Enterprise provider.
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ The API key for the reCAPTCHA Enterprise provider.
+ """
+
+ project_id: str = pydantic.Field()
+ """
+ The project ID for the reCAPTCHA Enterprise provider.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/attack_protection_update_captcha_recaptcha_v_2.py b/src/auth0/management/types/attack_protection_update_captcha_recaptcha_v_2.py
new file mode 100644
index 00000000..1ad08cff
--- /dev/null
+++ b/src/auth0/management/types/attack_protection_update_captcha_recaptcha_v_2.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AttackProtectionUpdateCaptchaRecaptchaV2(UniversalBaseModel):
+ site_key: str = pydantic.Field()
+ """
+ The site key for the reCAPTCHA v2 provider.
+ """
+
+ secret: str = pydantic.Field()
+ """
+ The secret key for the reCAPTCHA v2 provider.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/authentication_method_type_enum.py b/src/auth0/management/types/authentication_method_type_enum.py
new file mode 100644
index 00000000..d81b469e
--- /dev/null
+++ b/src/auth0/management/types/authentication_method_type_enum.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AuthenticationMethodTypeEnum = typing.Union[
+ typing.Literal[
+ "recovery-code",
+ "totp",
+ "push",
+ "phone",
+ "email",
+ "email-verification",
+ "webauthn-roaming",
+ "webauthn-platform",
+ "guardian",
+ "passkey",
+ "password",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/authentication_type_enum.py b/src/auth0/management/types/authentication_type_enum.py
new file mode 100644
index 00000000..60a41e54
--- /dev/null
+++ b/src/auth0/management/types/authentication_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+AuthenticationTypeEnum = typing.Union[typing.Literal["phone", "email", "totp"], typing.Any]
diff --git a/src/auth0/management/types/bot_detection_allowlist.py b/src/auth0/management/types/bot_detection_allowlist.py
new file mode 100644
index 00000000..8a8b88bd
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_allowlist.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .bot_detection_ip_address_or_cidr_block import BotDetectionIpAddressOrCidrBlock
+
+BotDetectionAllowlist = typing.List[BotDetectionIpAddressOrCidrBlock]
diff --git a/src/auth0/management/types/bot_detection_challenge_policy_password_flow_enum.py b/src/auth0/management/types/bot_detection_challenge_policy_password_flow_enum.py
new file mode 100644
index 00000000..eb865e81
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_challenge_policy_password_flow_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BotDetectionChallengePolicyPasswordFlowEnum = typing.Union[typing.Literal["never", "when_risky", "always"], typing.Any]
diff --git a/src/auth0/management/types/bot_detection_challenge_policy_password_reset_flow_enum.py b/src/auth0/management/types/bot_detection_challenge_policy_password_reset_flow_enum.py
new file mode 100644
index 00000000..c49f1e8a
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_challenge_policy_password_reset_flow_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BotDetectionChallengePolicyPasswordResetFlowEnum = typing.Union[
+ typing.Literal["never", "when_risky", "always"], typing.Any
+]
diff --git a/src/auth0/management/types/bot_detection_challenge_policy_passwordless_flow_enum.py b/src/auth0/management/types/bot_detection_challenge_policy_passwordless_flow_enum.py
new file mode 100644
index 00000000..efb5ee55
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_challenge_policy_passwordless_flow_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BotDetectionChallengePolicyPasswordlessFlowEnum = typing.Union[
+ typing.Literal["never", "when_risky", "always"], typing.Any
+]
diff --git a/src/auth0/management/types/bot_detection_cidr_block.py b/src/auth0/management/types/bot_detection_cidr_block.py
new file mode 100644
index 00000000..bdfec003
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_cidr_block.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+BotDetectionCidrBlock = str
diff --git a/src/auth0/management/types/bot_detection_i_pv_4.py b/src/auth0/management/types/bot_detection_i_pv_4.py
new file mode 100644
index 00000000..1f3228c5
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_i_pv_4.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+BotDetectionIPv4 = str
diff --git a/src/auth0/management/types/bot_detection_i_pv_6.py b/src/auth0/management/types/bot_detection_i_pv_6.py
new file mode 100644
index 00000000..6b91530e
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_i_pv_6.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+BotDetectionIPv6 = str
diff --git a/src/auth0/management/types/bot_detection_i_pv_6_cidr_block.py b/src/auth0/management/types/bot_detection_i_pv_6_cidr_block.py
new file mode 100644
index 00000000..dd285954
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_i_pv_6_cidr_block.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+BotDetectionIPv6CidrBlock = str
diff --git a/src/auth0/management/types/bot_detection_ip_address_or_cidr_block.py b/src/auth0/management/types/bot_detection_ip_address_or_cidr_block.py
new file mode 100644
index 00000000..ea59dd1f
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_ip_address_or_cidr_block.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+BotDetectionIpAddressOrCidrBlock = str
diff --git a/src/auth0/management/types/bot_detection_level_enum.py b/src/auth0/management/types/bot_detection_level_enum.py
new file mode 100644
index 00000000..dc8870e8
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_level_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BotDetectionLevelEnum = typing.Union[typing.Literal["low", "medium", "high"], typing.Any]
diff --git a/src/auth0/management/types/bot_detection_monitoring_mode_enabled.py b/src/auth0/management/types/bot_detection_monitoring_mode_enabled.py
new file mode 100644
index 00000000..78fc45ff
--- /dev/null
+++ b/src/auth0/management/types/bot_detection_monitoring_mode_enabled.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+BotDetectionMonitoringModeEnabled = bool
diff --git a/src/auth0/management/types/branding_colors.py b/src/auth0/management/types/branding_colors.py
new file mode 100644
index 00000000..29dd23fd
--- /dev/null
+++ b/src/auth0/management/types/branding_colors.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .branding_page_background import BrandingPageBackground
+
+
+class BrandingColors(UniversalBaseModel):
+ """
+ Custom color settings.
+ """
+
+ primary: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Accent color.
+ """
+
+ page_background: typing.Optional[BrandingPageBackground] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_font.py b/src/auth0/management/types/branding_font.py
new file mode 100644
index 00000000..fdbe4cec
--- /dev/null
+++ b/src/auth0/management/types/branding_font.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BrandingFont(UniversalBaseModel):
+ """
+ Custom font settings.
+ """
+
+ url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL for the custom font. The URL must point to a font file and not a stylesheet. Must use HTTPS.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_page_background.py b/src/auth0/management/types/branding_page_background.py
new file mode 100644
index 00000000..cb60fced
--- /dev/null
+++ b/src/auth0/management/types/branding_page_background.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BrandingPageBackground = typing.Union[typing.Optional[str], typing.Optional[typing.Dict[str, typing.Any]]]
diff --git a/src/auth0/management/types/branding_theme_borders.py b/src/auth0/management/types/branding_theme_borders.py
new file mode 100644
index 00000000..198fcabe
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_borders.py
@@ -0,0 +1,56 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .branding_theme_borders_buttons_style_enum import BrandingThemeBordersButtonsStyleEnum
+from .branding_theme_borders_inputs_style_enum import BrandingThemeBordersInputsStyleEnum
+
+
+class BrandingThemeBorders(UniversalBaseModel):
+ button_border_radius: float = pydantic.Field()
+ """
+ Button border radius
+ """
+
+ button_border_weight: float = pydantic.Field()
+ """
+ Button border weight
+ """
+
+ buttons_style: BrandingThemeBordersButtonsStyleEnum
+ input_border_radius: float = pydantic.Field()
+ """
+ Input border radius
+ """
+
+ input_border_weight: float = pydantic.Field()
+ """
+ Input border weight
+ """
+
+ inputs_style: BrandingThemeBordersInputsStyleEnum
+ show_widget_shadow: bool = pydantic.Field()
+ """
+ Show widget shadow
+ """
+
+ widget_border_weight: float = pydantic.Field()
+ """
+ Widget border weight
+ """
+
+ widget_corner_radius: float = pydantic.Field()
+ """
+ Widget corner radius
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_borders_buttons_style_enum.py b/src/auth0/management/types/branding_theme_borders_buttons_style_enum.py
new file mode 100644
index 00000000..d5e26e8b
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_borders_buttons_style_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BrandingThemeBordersButtonsStyleEnum = typing.Union[typing.Literal["pill", "rounded", "sharp"], typing.Any]
diff --git a/src/auth0/management/types/branding_theme_borders_inputs_style_enum.py b/src/auth0/management/types/branding_theme_borders_inputs_style_enum.py
new file mode 100644
index 00000000..879f659a
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_borders_inputs_style_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BrandingThemeBordersInputsStyleEnum = typing.Union[typing.Literal["pill", "rounded", "sharp"], typing.Any]
diff --git a/src/auth0/management/types/branding_theme_colors.py b/src/auth0/management/types/branding_theme_colors.py
new file mode 100644
index 00000000..8965bc7a
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_colors.py
@@ -0,0 +1,114 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .branding_theme_colors_captcha_widget_theme_enum import BrandingThemeColorsCaptchaWidgetThemeEnum
+
+
+class BrandingThemeColors(UniversalBaseModel):
+ base_focus_color: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Base Focus Color
+ """
+
+ base_hover_color: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Base Hover Color
+ """
+
+ body_text: str = pydantic.Field()
+ """
+ Body text
+ """
+
+ captcha_widget_theme: typing.Optional[BrandingThemeColorsCaptchaWidgetThemeEnum] = None
+ error: str = pydantic.Field()
+ """
+ Error
+ """
+
+ header: str = pydantic.Field()
+ """
+ Header
+ """
+
+ icons: str = pydantic.Field()
+ """
+ Icons
+ """
+
+ input_background: str = pydantic.Field()
+ """
+ Input background
+ """
+
+ input_border: str = pydantic.Field()
+ """
+ Input border
+ """
+
+ input_filled_text: str = pydantic.Field()
+ """
+ Input filled text
+ """
+
+ input_labels_placeholders: str = pydantic.Field()
+ """
+ Input labels & placeholders
+ """
+
+ links_focused_components: str = pydantic.Field()
+ """
+ Links & focused components
+ """
+
+ primary_button: str = pydantic.Field()
+ """
+ Primary button
+ """
+
+ primary_button_label: str = pydantic.Field()
+ """
+ Primary button label
+ """
+
+ read_only_background: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Read only background
+ """
+
+ secondary_button_border: str = pydantic.Field()
+ """
+ Secondary button border
+ """
+
+ secondary_button_label: str = pydantic.Field()
+ """
+ Secondary button label
+ """
+
+ success: str = pydantic.Field()
+ """
+ Success
+ """
+
+ widget_background: str = pydantic.Field()
+ """
+ Widget background
+ """
+
+ widget_border: str = pydantic.Field()
+ """
+ Widget border
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_colors_captcha_widget_theme_enum.py b/src/auth0/management/types/branding_theme_colors_captcha_widget_theme_enum.py
new file mode 100644
index 00000000..5bd01a5f
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_colors_captcha_widget_theme_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BrandingThemeColorsCaptchaWidgetThemeEnum = typing.Union[typing.Literal["auto", "dark", "light"], typing.Any]
diff --git a/src/auth0/management/types/branding_theme_font_body_text.py b/src/auth0/management/types/branding_theme_font_body_text.py
new file mode 100644
index 00000000..7e5e3e9a
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_font_body_text.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BrandingThemeFontBodyText(UniversalBaseModel):
+ """
+ Body text
+ """
+
+ bold: bool = pydantic.Field()
+ """
+ Body text bold
+ """
+
+ size: float = pydantic.Field()
+ """
+ Body text size
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_font_buttons_text.py b/src/auth0/management/types/branding_theme_font_buttons_text.py
new file mode 100644
index 00000000..b25c3677
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_font_buttons_text.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BrandingThemeFontButtonsText(UniversalBaseModel):
+ """
+ Buttons text
+ """
+
+ bold: bool = pydantic.Field()
+ """
+ Buttons text bold
+ """
+
+ size: float = pydantic.Field()
+ """
+ Buttons text size
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_font_input_labels.py b/src/auth0/management/types/branding_theme_font_input_labels.py
new file mode 100644
index 00000000..264cb0eb
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_font_input_labels.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BrandingThemeFontInputLabels(UniversalBaseModel):
+ """
+ Input Labels
+ """
+
+ bold: bool = pydantic.Field()
+ """
+ Input Labels bold
+ """
+
+ size: float = pydantic.Field()
+ """
+ Input Labels size
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_font_links.py b/src/auth0/management/types/branding_theme_font_links.py
new file mode 100644
index 00000000..5bb31a6b
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_font_links.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BrandingThemeFontLinks(UniversalBaseModel):
+ """
+ Links
+ """
+
+ bold: bool = pydantic.Field()
+ """
+ Links bold
+ """
+
+ size: float = pydantic.Field()
+ """
+ Links size
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_font_links_style_enum.py b/src/auth0/management/types/branding_theme_font_links_style_enum.py
new file mode 100644
index 00000000..ab5c1efa
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_font_links_style_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BrandingThemeFontLinksStyleEnum = typing.Union[typing.Literal["normal", "underlined"], typing.Any]
diff --git a/src/auth0/management/types/branding_theme_font_subtitle.py b/src/auth0/management/types/branding_theme_font_subtitle.py
new file mode 100644
index 00000000..b2d2f155
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_font_subtitle.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BrandingThemeFontSubtitle(UniversalBaseModel):
+ """
+ Subtitle
+ """
+
+ bold: bool = pydantic.Field()
+ """
+ Subtitle bold
+ """
+
+ size: float = pydantic.Field()
+ """
+ Subtitle size
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_font_title.py b/src/auth0/management/types/branding_theme_font_title.py
new file mode 100644
index 00000000..a753ed77
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_font_title.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BrandingThemeFontTitle(UniversalBaseModel):
+ """
+ Title
+ """
+
+ bold: bool = pydantic.Field()
+ """
+ Title bold
+ """
+
+ size: float = pydantic.Field()
+ """
+ Title size
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_fonts.py b/src/auth0/management/types/branding_theme_fonts.py
new file mode 100644
index 00000000..1adf02a3
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_fonts.py
@@ -0,0 +1,42 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .branding_theme_font_body_text import BrandingThemeFontBodyText
+from .branding_theme_font_buttons_text import BrandingThemeFontButtonsText
+from .branding_theme_font_input_labels import BrandingThemeFontInputLabels
+from .branding_theme_font_links import BrandingThemeFontLinks
+from .branding_theme_font_links_style_enum import BrandingThemeFontLinksStyleEnum
+from .branding_theme_font_subtitle import BrandingThemeFontSubtitle
+from .branding_theme_font_title import BrandingThemeFontTitle
+
+
+class BrandingThemeFonts(UniversalBaseModel):
+ body_text: BrandingThemeFontBodyText
+ buttons_text: BrandingThemeFontButtonsText
+ font_url: str = pydantic.Field()
+ """
+ Font URL
+ """
+
+ input_labels: BrandingThemeFontInputLabels
+ links: BrandingThemeFontLinks
+ links_style: BrandingThemeFontLinksStyleEnum
+ reference_text_size: float = pydantic.Field()
+ """
+ Reference text size
+ """
+
+ subtitle: BrandingThemeFontSubtitle
+ title: BrandingThemeFontTitle
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_page_background.py b/src/auth0/management/types/branding_theme_page_background.py
new file mode 100644
index 00000000..dee35fa3
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_page_background.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .branding_theme_page_background_page_layout_enum import BrandingThemePageBackgroundPageLayoutEnum
+
+
+class BrandingThemePageBackground(UniversalBaseModel):
+ background_color: str = pydantic.Field()
+ """
+ Background color
+ """
+
+ background_image_url: str = pydantic.Field()
+ """
+ Background image url
+ """
+
+ page_layout: BrandingThemePageBackgroundPageLayoutEnum
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_page_background_page_layout_enum.py b/src/auth0/management/types/branding_theme_page_background_page_layout_enum.py
new file mode 100644
index 00000000..695e9b76
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_page_background_page_layout_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BrandingThemePageBackgroundPageLayoutEnum = typing.Union[typing.Literal["center", "left", "right"], typing.Any]
diff --git a/src/auth0/management/types/branding_theme_widget.py b/src/auth0/management/types/branding_theme_widget.py
new file mode 100644
index 00000000..1a94b2cd
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_widget.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .branding_theme_widget_header_text_alignment_enum import BrandingThemeWidgetHeaderTextAlignmentEnum
+from .branding_theme_widget_logo_position_enum import BrandingThemeWidgetLogoPositionEnum
+from .branding_theme_widget_social_buttons_layout_enum import BrandingThemeWidgetSocialButtonsLayoutEnum
+
+
+class BrandingThemeWidget(UniversalBaseModel):
+ header_text_alignment: BrandingThemeWidgetHeaderTextAlignmentEnum
+ logo_height: float = pydantic.Field()
+ """
+ Logo height
+ """
+
+ logo_position: BrandingThemeWidgetLogoPositionEnum
+ logo_url: str = pydantic.Field()
+ """
+ Logo url
+ """
+
+ social_buttons_layout: BrandingThemeWidgetSocialButtonsLayoutEnum
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/branding_theme_widget_header_text_alignment_enum.py b/src/auth0/management/types/branding_theme_widget_header_text_alignment_enum.py
new file mode 100644
index 00000000..bcda0cf7
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_widget_header_text_alignment_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BrandingThemeWidgetHeaderTextAlignmentEnum = typing.Union[typing.Literal["center", "left", "right"], typing.Any]
diff --git a/src/auth0/management/types/branding_theme_widget_logo_position_enum.py b/src/auth0/management/types/branding_theme_widget_logo_position_enum.py
new file mode 100644
index 00000000..dd1bfb8b
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_widget_logo_position_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BrandingThemeWidgetLogoPositionEnum = typing.Union[typing.Literal["center", "left", "none", "right"], typing.Any]
diff --git a/src/auth0/management/types/branding_theme_widget_social_buttons_layout_enum.py b/src/auth0/management/types/branding_theme_widget_social_buttons_layout_enum.py
new file mode 100644
index 00000000..1bfd872e
--- /dev/null
+++ b/src/auth0/management/types/branding_theme_widget_social_buttons_layout_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BrandingThemeWidgetSocialButtonsLayoutEnum = typing.Union[typing.Literal["bottom", "top"], typing.Any]
diff --git a/src/auth0/management/types/breached_password_detection_admin_notification_frequency_enum.py b/src/auth0/management/types/breached_password_detection_admin_notification_frequency_enum.py
new file mode 100644
index 00000000..b5c262d1
--- /dev/null
+++ b/src/auth0/management/types/breached_password_detection_admin_notification_frequency_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BreachedPasswordDetectionAdminNotificationFrequencyEnum = typing.Union[
+ typing.Literal["immediately", "daily", "weekly", "monthly"], typing.Any
+]
diff --git a/src/auth0/management/types/breached_password_detection_method_enum.py b/src/auth0/management/types/breached_password_detection_method_enum.py
new file mode 100644
index 00000000..d0cb6e1d
--- /dev/null
+++ b/src/auth0/management/types/breached_password_detection_method_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BreachedPasswordDetectionMethodEnum = typing.Union[typing.Literal["standard", "enhanced"], typing.Any]
diff --git a/src/auth0/management/types/breached_password_detection_pre_change_password_shields_enum.py b/src/auth0/management/types/breached_password_detection_pre_change_password_shields_enum.py
new file mode 100644
index 00000000..f518abdf
--- /dev/null
+++ b/src/auth0/management/types/breached_password_detection_pre_change_password_shields_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BreachedPasswordDetectionPreChangePasswordShieldsEnum = typing.Union[
+ typing.Literal["block", "admin_notification"], typing.Any
+]
diff --git a/src/auth0/management/types/breached_password_detection_pre_change_password_stage.py b/src/auth0/management/types/breached_password_detection_pre_change_password_stage.py
new file mode 100644
index 00000000..3a71f9ae
--- /dev/null
+++ b/src/auth0/management/types/breached_password_detection_pre_change_password_stage.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .breached_password_detection_pre_change_password_shields_enum import (
+ BreachedPasswordDetectionPreChangePasswordShieldsEnum,
+)
+
+
+class BreachedPasswordDetectionPreChangePasswordStage(UniversalBaseModel):
+ shields: typing.Optional[typing.List[BreachedPasswordDetectionPreChangePasswordShieldsEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ Action to take when a breached password is detected during a password reset.
+ Possible values: block, admin_notification.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/breached_password_detection_pre_user_registration_shields_enum.py b/src/auth0/management/types/breached_password_detection_pre_user_registration_shields_enum.py
new file mode 100644
index 00000000..2d4e500c
--- /dev/null
+++ b/src/auth0/management/types/breached_password_detection_pre_user_registration_shields_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BreachedPasswordDetectionPreUserRegistrationShieldsEnum = typing.Union[
+ typing.Literal["block", "admin_notification"], typing.Any
+]
diff --git a/src/auth0/management/types/breached_password_detection_pre_user_registration_stage.py b/src/auth0/management/types/breached_password_detection_pre_user_registration_stage.py
new file mode 100644
index 00000000..1dbf7152
--- /dev/null
+++ b/src/auth0/management/types/breached_password_detection_pre_user_registration_stage.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .breached_password_detection_pre_user_registration_shields_enum import (
+ BreachedPasswordDetectionPreUserRegistrationShieldsEnum,
+)
+
+
+class BreachedPasswordDetectionPreUserRegistrationStage(UniversalBaseModel):
+ shields: typing.Optional[typing.List[BreachedPasswordDetectionPreUserRegistrationShieldsEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ Action to take when a breached password is detected during a signup.
+ Possible values: block, admin_notification.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/breached_password_detection_shields_enum.py b/src/auth0/management/types/breached_password_detection_shields_enum.py
new file mode 100644
index 00000000..b4de32c9
--- /dev/null
+++ b/src/auth0/management/types/breached_password_detection_shields_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BreachedPasswordDetectionShieldsEnum = typing.Union[
+ typing.Literal["block", "user_notification", "admin_notification"], typing.Any
+]
diff --git a/src/auth0/management/types/breached_password_detection_stage.py b/src/auth0/management/types/breached_password_detection_stage.py
new file mode 100644
index 00000000..7af3e625
--- /dev/null
+++ b/src/auth0/management/types/breached_password_detection_stage.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .breached_password_detection_pre_change_password_stage import BreachedPasswordDetectionPreChangePasswordStage
+from .breached_password_detection_pre_user_registration_stage import BreachedPasswordDetectionPreUserRegistrationStage
+
+
+class BreachedPasswordDetectionStage(UniversalBaseModel):
+ pre_user_registration: typing_extensions.Annotated[
+ typing.Optional[BreachedPasswordDetectionPreUserRegistrationStage], FieldMetadata(alias="pre-user-registration")
+ ] = None
+ pre_change_password: typing_extensions.Annotated[
+ typing.Optional[BreachedPasswordDetectionPreChangePasswordStage], FieldMetadata(alias="pre-change-password")
+ ] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/bulk_update_acul_response_content.py b/src/auth0/management/types/bulk_update_acul_response_content.py
new file mode 100644
index 00000000..1f99746d
--- /dev/null
+++ b/src/auth0/management/types/bulk_update_acul_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_configs import AculConfigs
+
+
+class BulkUpdateAculResponseContent(UniversalBaseModel):
+ configs: AculConfigs
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/change_password_ticket_identity.py b/src/auth0/management/types/change_password_ticket_identity.py
new file mode 100644
index 00000000..3979180c
--- /dev/null
+++ b/src/auth0/management/types/change_password_ticket_identity.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .identity_provider_only_auth_0_enum import IdentityProviderOnlyAuth0Enum
+
+
+class ChangePasswordTicketIdentity(UniversalBaseModel):
+ """
+ The user's identity. If you set this value, you must also send the user_id parameter.
+ """
+
+ user_id: str = pydantic.Field(default="5457edea1b8f22891a000004")
+ """
+ user_id of the identity.
+ """
+
+ provider: IdentityProviderOnlyAuth0Enum = "auth0"
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ connection_id of the identity.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/change_password_ticket_response_content.py b/src/auth0/management/types/change_password_ticket_response_content.py
new file mode 100644
index 00000000..e171b4d6
--- /dev/null
+++ b/src/auth0/management/types/change_password_ticket_response_content.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ChangePasswordTicketResponseContent(UniversalBaseModel):
+ ticket: str = pydantic.Field(
+ default="https://login.auth0.com/lo/reset?client_id=nsaPS2p3cargoFy82WT7betaOPOt3qSh&tenant=mdocs&bewit=bmNlR01CcDNOUE1GeXVzODJXVDdyY1RUT1BPdDNxU2hcMTQzMDY2MjE4MVxuRTcxM0RSeUNlbEpzUUJmaFVaS3A1NEdJbWFzSUZMYzRTdEFtY2NMMXhZPVx7ImVtYWloojoiZGFtaWtww2NoQGhvdG1haWwuY29tIiwidGVuYW50IjoiZHNjaGVua2tjwWFuIiwiY2xpZW50X2lkIjoibmNlR01CcDNOUE1GeXVzODJXVDdyY1RUT1BPiiqxU2giLCJjb25uZWN0aW9uIjoiRGFtaWmsdiwicmVzdWx0VXJsIjoiIn0"
+ )
+ """
+ URL representing the ticket.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client.py b/src/auth0/management/types/client.py
new file mode 100644
index 00000000..d6099a67
--- /dev/null
+++ b/src/auth0/management/types/client.py
@@ -0,0 +1,235 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .client_addons import ClientAddons
+from .client_app_type_enum import ClientAppTypeEnum
+from .client_async_approval_notifications_channels_api_post_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration,
+)
+from .client_authentication_method import ClientAuthenticationMethod
+from .client_compliance_level_enum import ClientComplianceLevelEnum
+from .client_default_organization import ClientDefaultOrganization
+from .client_encryption_key import ClientEncryptionKey
+from .client_jwt_configuration import ClientJwtConfiguration
+from .client_metadata import ClientMetadata
+from .client_mobile import ClientMobile
+from .client_oidc_backchannel_logout_settings import ClientOidcBackchannelLogoutSettings
+from .client_organization_discovery_enum import ClientOrganizationDiscoveryEnum
+from .client_organization_require_behavior_enum import ClientOrganizationRequireBehaviorEnum
+from .client_organization_usage_enum import ClientOrganizationUsageEnum
+from .client_refresh_token_configuration import ClientRefreshTokenConfiguration
+from .client_session_transfer_configuration import ClientSessionTransferConfiguration
+from .client_signed_request_object_with_credential_id import ClientSignedRequestObjectWithCredentialId
+from .client_signing_keys import ClientSigningKeys
+from .client_token_endpoint_auth_method_enum import ClientTokenEndpointAuthMethodEnum
+from .client_token_exchange_configuration import ClientTokenExchangeConfiguration
+from .express_configuration import ExpressConfiguration
+from .token_quota import TokenQuota
+
+
+class Client(UniversalBaseModel):
+ client_id: typing.Optional[str] = pydantic.Field(default="AaiyAPdpYdesoKnqjj8HJqRn4T5titww")
+ """
+ ID of this client.
+ """
+
+ tenant: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Name of the tenant this client belongs to.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="My application")
+ """
+ Name of this client (min length: 1 character, does not allow `<` or `>`).
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Free text description of this client (max length: 140 characters).
+ """
+
+ global_: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="global")] = pydantic.Field(
+ default=False
+ )
+ """
+ Whether this is your global 'All Applications' client representing legacy tenant settings (true) or a regular client (false).
+ """
+
+ client_secret: typing.Optional[str] = pydantic.Field(
+ default="MG_TNT2ver-SylNat-_VeMmd-4m0Waba0jr1troztBniSChEw0glxEmgEi2Kw40H"
+ )
+ """
+ Client secret (which you must not make public).
+ """
+
+ app_type: typing.Optional[ClientAppTypeEnum] = None
+ logo_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL of the logo to display for this client. Recommended size is 150x150 pixels.
+ """
+
+ is_first_party: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this client a first party client (true) or not (false).
+ """
+
+ oidc_conformant: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this client conforms to strict OIDC specifications (true) or uses legacy features (false).
+ """
+
+ callbacks: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs whitelisted for Auth0 to use as a callback to the client after authentication.
+ """
+
+ allowed_origins: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs allowed to make requests from JavaScript to Auth0 API (typically used with CORS). By default, all your callback URLs will be allowed. This field allows you to enter other origins if necessary. You can also use wildcards at the subdomain level (e.g., https://*.contoso.com). Query strings and hash information are not taken into account when validating these URLs.
+ """
+
+ web_origins: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of allowed origins for use with Cross-Origin Authentication, Device Flow, and web message response mode.
+ """
+
+ client_aliases: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of audiences/realms for SAML protocol. Used by the wsfed addon.
+ """
+
+ allowed_clients: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of allow clients and API ids that are allowed to make delegation requests. Empty means all all your clients are allowed.
+ """
+
+ allowed_logout_urls: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs that are valid to redirect to after logout from Auth0. Wildcards are allowed for subdomains.
+ """
+
+ session_transfer: typing.Optional[ClientSessionTransferConfiguration] = None
+ oidc_logout: typing.Optional[ClientOidcBackchannelLogoutSettings] = None
+ grant_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of grant types supported for this application. Can include `authorization_code`, `implicit`, `refresh_token`, `client_credentials`, `password`, `http://auth0.com/oauth/grant-type/password-realm`, `http://auth0.com/oauth/grant-type/mfa-oob`, `http://auth0.com/oauth/grant-type/mfa-otp`, `http://auth0.com/oauth/grant-type/mfa-recovery-code`, `urn:openid:params:grant-type:ciba`, `urn:ietf:params:oauth:grant-type:device_code`, and `urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token`.
+ """
+
+ jwt_configuration: typing.Optional[ClientJwtConfiguration] = None
+ signing_keys: typing.Optional[ClientSigningKeys] = None
+ encryption_key: typing.Optional[ClientEncryptionKey] = None
+ sso: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Applies only to SSO clients and determines whether Auth0 will handle Single Sign On (true) or whether the Identity Provider will (false).
+ """
+
+ sso_disabled: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether Single Sign On is disabled (true) or enabled (true). Defaults to true.
+ """
+
+ cross_origin_authentication: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this client can be used to make cross-origin authentication requests (true) or it is not allowed to make such requests (false).
+ """
+
+ cross_origin_loc: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL of the location in your site where the cross origin verification takes place for the cross-origin auth flow when performing Auth in your own domain instead of Auth0 hosted login page.
+ """
+
+ custom_login_page_on: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether a custom login page is to be used (true) or the default provided login page (false).
+ """
+
+ custom_login_page: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The content (HTML, CSS, JS) of the custom login page.
+ """
+
+ custom_login_page_preview: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The content (HTML, CSS, JS) of the custom login page. (Used on Previews)
+ """
+
+ form_template: typing.Optional[str] = pydantic.Field(default="")
+ """
+ HTML form template to be used for WS-Federation.
+ """
+
+ addons: typing.Optional[ClientAddons] = None
+ token_endpoint_auth_method: typing.Optional[ClientTokenEndpointAuthMethodEnum] = None
+ is_token_endpoint_ip_header_trusted: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ If true, trust that the IP specified in the `auth0-forwarded-for` header is the end-user's IP for brute-force-protection on token endpoint.
+ """
+
+ client_metadata: typing.Optional[ClientMetadata] = None
+ mobile: typing.Optional[ClientMobile] = None
+ initiate_login_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Initiate login uri, must be https
+ """
+
+ refresh_token: typing.Optional[ClientRefreshTokenConfiguration] = None
+ default_organization: typing.Optional[ClientDefaultOrganization] = None
+ organization_usage: typing.Optional[ClientOrganizationUsageEnum] = None
+ organization_require_behavior: typing.Optional[ClientOrganizationRequireBehaviorEnum] = None
+ organization_discovery_methods: typing.Optional[typing.List[ClientOrganizationDiscoveryEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+ """
+
+ client_authentication_methods: typing.Optional[ClientAuthenticationMethod] = None
+ require_pushed_authorization_requests: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Makes the use of Pushed Authorization Requests mandatory for this client
+ """
+
+ require_proof_of_possession: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Makes the use of Proof-of-Possession mandatory for this client
+ """
+
+ signed_request_object: typing.Optional[ClientSignedRequestObjectWithCredentialId] = None
+ compliance_level: typing.Optional[ClientComplianceLevelEnum] = None
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+ """
+
+ token_exchange: typing.Optional[ClientTokenExchangeConfiguration] = None
+ par_request_expiry: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+ """
+
+ token_quota: typing.Optional[TokenQuota] = None
+ express_configuration: typing.Optional[ExpressConfiguration] = None
+ resource_server_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The identifier of the resource server that this client is linked to.
+ """
+
+ async_approval_notification_channels: typing.Optional[
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration
+ ] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_aws.py b/src/auth0/management/types/client_addon_aws.py
new file mode 100644
index 00000000..65879814
--- /dev/null
+++ b/src/auth0/management/types/client_addon_aws.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonAws(UniversalBaseModel):
+ """
+ AWS addon configuration.
+ """
+
+ principal: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ AWS principal ARN, e.g. `arn:aws:iam::010616021751:saml-provider/idpname`
+ """
+
+ role: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ AWS role ARN, e.g. `arn:aws:iam::010616021751:role/foo`
+ """
+
+ lifetime_in_seconds: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ AWS token lifetime in seconds
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_azure_blob.py b/src/auth0/management/types/client_addon_azure_blob.py
new file mode 100644
index 00000000..9cfb6635
--- /dev/null
+++ b/src/auth0/management/types/client_addon_azure_blob.py
@@ -0,0 +1,98 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ClientAddonAzureBlob(UniversalBaseModel):
+ """
+ Azure Blob Storage addon configuration.
+ """
+
+ account_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountName")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Your Azure storage account name. Usually first segment in your Azure storage URL. e.g. `https://acme-org.blob.core.windows.net` would be the account name `acme-org`.
+ """
+
+ storage_access_key: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="storageAccessKey")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Access key associated with this storage account.
+ """
+
+ container_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="containerName")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Container to request a token for. e.g. `my-container`.
+ """
+
+ blob_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="blobName")] = pydantic.Field(
+ default=None
+ )
+ """
+ Entity to request a token for. e.g. `my-blob`. If blank the computed SAS will apply to the entire storage container.
+ """
+
+ expiration: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Expiration in minutes for the generated token (default of 5 minutes).
+ """
+
+ signed_identifier: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="signedIdentifier")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Shared access policy identifier defined in your storage account resource.
+ """
+
+ blob_read: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates if the issued token has permission to read the content, properties, metadata and block list. Use the blob as the source of a copy operation.
+ """
+
+ blob_write: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates if the issued token has permission to create or write content, properties, metadata, or block list. Snapshot or lease the blob. Resize the blob (page blob only). Use the blob as the destination of a copy operation within the same account.
+ """
+
+ blob_delete: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates if the issued token has permission to delete the blob.
+ """
+
+ container_read: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates if the issued token has permission to read the content, properties, metadata or block list of any blob in the container. Use any blob in the container as the source of a copy operation
+ """
+
+ container_write: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates that for any blob in the container if the issued token has permission to create or write content, properties, metadata, or block list. Snapshot or lease the blob. Resize the blob (page blob only). Use the blob as the destination of a copy operation within the same account.
+ """
+
+ container_delete: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates if issued token has permission to delete any blob in the container.
+ """
+
+ container_list: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates if the issued token has permission to list blobs in the container.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_azure_sb.py b/src/auth0/management/types/client_addon_azure_sb.py
new file mode 100644
index 00000000..cb6318a9
--- /dev/null
+++ b/src/auth0/management/types/client_addon_azure_sb.py
@@ -0,0 +1,54 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ClientAddonAzureSb(UniversalBaseModel):
+ """
+ Azure Storage Bus addon configuration.
+ """
+
+ namespace: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Your Azure Service Bus namespace. Usually the first segment of your Service Bus URL (e.g. `https://acme-org.servicebus.windows.net` would be `acme-org`).
+ """
+
+ sas_key_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="sasKeyName")] = pydantic.Field(
+ default=None
+ )
+ """
+ Your shared access policy name defined in your Service Bus entity.
+ """
+
+ sas_key: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="sasKey")] = pydantic.Field(
+ default=None
+ )
+ """
+ Primary Key associated with your shared access policy.
+ """
+
+ entity_path: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="entityPath")] = pydantic.Field(
+ default=None
+ )
+ """
+ Entity you want to request a token for. e.g. `my-queue`.'
+ """
+
+ expiration: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Optional expiration in minutes for the generated token. Defaults to 5 minutes.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_box.py b/src/auth0/management/types/client_addon_box.py
new file mode 100644
index 00000000..ff1fb19c
--- /dev/null
+++ b/src/auth0/management/types/client_addon_box.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientAddonBox = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/client_addon_cloud_bees.py b/src/auth0/management/types/client_addon_cloud_bees.py
new file mode 100644
index 00000000..53906117
--- /dev/null
+++ b/src/auth0/management/types/client_addon_cloud_bees.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientAddonCloudBees = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/client_addon_concur.py b/src/auth0/management/types/client_addon_concur.py
new file mode 100644
index 00000000..97a44fc2
--- /dev/null
+++ b/src/auth0/management/types/client_addon_concur.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientAddonConcur = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/client_addon_dropbox.py b/src/auth0/management/types/client_addon_dropbox.py
new file mode 100644
index 00000000..fae54921
--- /dev/null
+++ b/src/auth0/management/types/client_addon_dropbox.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientAddonDropbox = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/client_addon_echo_sign.py b/src/auth0/management/types/client_addon_echo_sign.py
new file mode 100644
index 00000000..a16ed54d
--- /dev/null
+++ b/src/auth0/management/types/client_addon_echo_sign.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonEchoSign(UniversalBaseModel):
+ """
+ Adobe EchoSign SSO configuration.
+ """
+
+ domain: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Your custom domain found in your EchoSign URL. e.g. `https://acme-org.echosign.com` would be `acme-org`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_egnyte.py b/src/auth0/management/types/client_addon_egnyte.py
new file mode 100644
index 00000000..dfd85e05
--- /dev/null
+++ b/src/auth0/management/types/client_addon_egnyte.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonEgnyte(UniversalBaseModel):
+ """
+ Egnyte SSO configuration.
+ """
+
+ domain: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Your custom domain found in your Egnyte URL. e.g. `https://acme-org.egnyte.com` would be `acme-org`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_firebase.py b/src/auth0/management/types/client_addon_firebase.py
new file mode 100644
index 00000000..aff4f42d
--- /dev/null
+++ b/src/auth0/management/types/client_addon_firebase.py
@@ -0,0 +1,46 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonFirebase(UniversalBaseModel):
+ """
+ Google Firebase addon configuration.
+ """
+
+ secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Google Firebase Secret. (SDK 2 only).
+ """
+
+ private_key_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Optional ID of the private key to obtain kid header in the issued token (SDK v3+ tokens only).
+ """
+
+ private_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Private Key for signing the token (SDK v3+ tokens only).
+ """
+
+ client_email: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the Service Account you have created (shown as `client_email` in the generated JSON file, SDK v3+ tokens only).
+ """
+
+ lifetime_in_seconds: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Optional expiration in seconds for the generated token. Defaults to 3600 seconds (SDK v3+ tokens only).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_layer.py b/src/auth0/management/types/client_addon_layer.py
new file mode 100644
index 00000000..0f7a6b9d
--- /dev/null
+++ b/src/auth0/management/types/client_addon_layer.py
@@ -0,0 +1,48 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ClientAddonLayer(UniversalBaseModel):
+ """
+ Layer addon configuration.
+ """
+
+ provider_id: typing_extensions.Annotated[str, FieldMetadata(alias="providerId")] = pydantic.Field()
+ """
+ Provider ID of your Layer account
+ """
+
+ key_id: typing_extensions.Annotated[str, FieldMetadata(alias="keyId")] = pydantic.Field()
+ """
+ Authentication Key identifier used to sign the Layer token.
+ """
+
+ private_key: typing_extensions.Annotated[str, FieldMetadata(alias="privateKey")] = pydantic.Field()
+ """
+ Private key for signing the Layer token.
+ """
+
+ principal: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the property used as the unique user id in Layer. If not specified `user_id` is used.
+ """
+
+ expiration: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Optional expiration in minutes for the generated token. Defaults to 5 minutes.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_mscrm.py b/src/auth0/management/types/client_addon_mscrm.py
new file mode 100644
index 00000000..27d8696e
--- /dev/null
+++ b/src/auth0/management/types/client_addon_mscrm.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonMscrm(UniversalBaseModel):
+ """
+ Microsoft Dynamics CRM SSO configuration.
+ """
+
+ url: str = pydantic.Field()
+ """
+ Microsoft Dynamics CRM application URL.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_new_relic.py b/src/auth0/management/types/client_addon_new_relic.py
new file mode 100644
index 00000000..29047cce
--- /dev/null
+++ b/src/auth0/management/types/client_addon_new_relic.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonNewRelic(UniversalBaseModel):
+ """
+ New Relic SSO configuration.
+ """
+
+ account: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Your New Relic Account ID found in your New Relic URL after the `/accounts/` path. e.g. `https://rpm.newrelic.com/accounts/123456/query` would be `123456`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_oag.py b/src/auth0/management/types/client_addon_oag.py
new file mode 100644
index 00000000..9c893b9f
--- /dev/null
+++ b/src/auth0/management/types/client_addon_oag.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonOag(UniversalBaseModel):
+ """
+ Okta Access Gateway SSO configuration
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_office_365.py b/src/auth0/management/types/client_addon_office_365.py
new file mode 100644
index 00000000..b4748a23
--- /dev/null
+++ b/src/auth0/management/types/client_addon_office_365.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonOffice365(UniversalBaseModel):
+ """
+ Microsoft Office 365 SSO configuration.
+ """
+
+ domain: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Your Office 365 domain name. e.g. `acme-org.com`.
+ """
+
+ connection: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Optional Auth0 database connection for testing an already-configured Office 365 tenant.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_rms.py b/src/auth0/management/types/client_addon_rms.py
new file mode 100644
index 00000000..d988b11d
--- /dev/null
+++ b/src/auth0/management/types/client_addon_rms.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonRms(UniversalBaseModel):
+ """
+ Active Directory Rights Management Service SSO configuration.
+ """
+
+ url: str = pydantic.Field()
+ """
+ URL of your Rights Management Server. It can be internal or external, but users will have to be able to reach it.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_salesforce.py b/src/auth0/management/types/client_addon_salesforce.py
new file mode 100644
index 00000000..aee3bf32
--- /dev/null
+++ b/src/auth0/management/types/client_addon_salesforce.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonSalesforce(UniversalBaseModel):
+ """
+ Salesforce SSO configuration.
+ """
+
+ entity_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Arbitrary logical URL that identifies the Saleforce resource. e.g. `https://acme-org.com`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_salesforce_api.py b/src/auth0/management/types/client_addon_salesforce_api.py
new file mode 100644
index 00000000..c0ccf381
--- /dev/null
+++ b/src/auth0/management/types/client_addon_salesforce_api.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ClientAddonSalesforceApi(UniversalBaseModel):
+ """
+ Salesforce API addon configuration.
+ """
+
+ clientid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Consumer Key assigned by Salesforce to the Connected App.
+ """
+
+ principal: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the property in the user object that maps to a Salesforce username. e.g. `email`.
+ """
+
+ community_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="communityName")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Community name.
+ """
+
+ community_url_section: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Community url section.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_salesforce_sandbox_api.py b/src/auth0/management/types/client_addon_salesforce_sandbox_api.py
new file mode 100644
index 00000000..d3cdeef6
--- /dev/null
+++ b/src/auth0/management/types/client_addon_salesforce_sandbox_api.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ClientAddonSalesforceSandboxApi(UniversalBaseModel):
+ """
+ Salesforce Sandbox addon configuration.
+ """
+
+ clientid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Consumer Key assigned by Salesforce to the Connected App.
+ """
+
+ principal: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the property in the user object that maps to a Salesforce username. e.g. `email`.
+ """
+
+ community_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="communityName")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Community name.
+ """
+
+ community_url_section: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Community url section.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_saml.py b/src/auth0/management/types/client_addon_saml.py
new file mode 100644
index 00000000..0e2f16e1
--- /dev/null
+++ b/src/auth0/management/types/client_addon_saml.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .client_addon_saml_mapping import ClientAddonSamlMapping
+
+
+class ClientAddonSaml(UniversalBaseModel):
+ """
+ SAML2 addon indicator (no configuration settings needed for SAML2 addon).
+ """
+
+ mappings: typing.Optional[ClientAddonSamlMapping] = None
+ audience: typing.Optional[str] = None
+ recipient: typing.Optional[str] = None
+ create_upn_claim: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="createUpnClaim")] = None
+ map_unknown_claims_as_is: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="mapUnknownClaimsAsIs")
+ ] = None
+ passthrough_claims_with_no_mapping: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="passthroughClaimsWithNoMapping")
+ ] = None
+ map_identities: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="mapIdentities")] = None
+ signature_algorithm: typing_extensions.Annotated[
+ typing.Optional[str], FieldMetadata(alias="signatureAlgorithm")
+ ] = None
+ digest_algorithm: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="digestAlgorithm")] = None
+ issuer: typing.Optional[str] = None
+ destination: typing.Optional[str] = None
+ lifetime_in_seconds: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="lifetimeInSeconds")] = (
+ None
+ )
+ sign_response: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="signResponse")] = None
+ name_identifier_format: typing_extensions.Annotated[
+ typing.Optional[str], FieldMetadata(alias="nameIdentifierFormat")
+ ] = None
+ name_identifier_probes: typing_extensions.Annotated[
+ typing.Optional[typing.List[str]], FieldMetadata(alias="nameIdentifierProbes")
+ ] = None
+ authn_context_class_ref: typing_extensions.Annotated[
+ typing.Optional[str], FieldMetadata(alias="authnContextClassRef")
+ ] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_saml_mapping.py b/src/auth0/management/types/client_addon_saml_mapping.py
new file mode 100644
index 00000000..00a9bc9b
--- /dev/null
+++ b/src/auth0/management/types/client_addon_saml_mapping.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientAddonSamlMapping = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/client_addon_sapapi.py b/src/auth0/management/types/client_addon_sapapi.py
new file mode 100644
index 00000000..50453999
--- /dev/null
+++ b/src/auth0/management/types/client_addon_sapapi.py
@@ -0,0 +1,61 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ClientAddonSapapi(UniversalBaseModel):
+ """
+ SAP API addon configuration.
+ """
+
+ clientid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ If activated in the OAuth 2.0 client configuration (transaction SOAUTH2) the SAML attribute client_id must be set and equal the client_id form parameter of the access token request.
+ """
+
+ username_attribute: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="usernameAttribute")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Name of the property in the user object that maps to a SAP username. e.g. `email`.
+ """
+
+ token_endpoint_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tokenEndpointUrl")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Your SAP OData server OAuth2 token endpoint URL.
+ """
+
+ scope: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Requested scope for SAP APIs.
+ """
+
+ service_password: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="servicePassword")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Service account password to use to authenticate API calls to the token endpoint.
+ """
+
+ name_identifier_format: typing_extensions.Annotated[
+ typing.Optional[str], FieldMetadata(alias="nameIdentifierFormat")
+ ] = pydantic.Field(default=None)
+ """
+ NameID element of the Subject which can be used to express the user's identity. Defaults to `urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_sentry.py b/src/auth0/management/types/client_addon_sentry.py
new file mode 100644
index 00000000..c80fbfc7
--- /dev/null
+++ b/src/auth0/management/types/client_addon_sentry.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonSentry(UniversalBaseModel):
+ """
+ Sentry SSO configuration.
+ """
+
+ org_slug: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Generated slug for your Sentry organization. Found in your Sentry URL. e.g. `https://sentry.acme.com/acme-org/` would be `acme-org`.
+ """
+
+ base_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL prefix only if running Sentry Community Edition, otherwise leave should be blank.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_share_point.py b/src/auth0/management/types/client_addon_share_point.py
new file mode 100644
index 00000000..ae87d875
--- /dev/null
+++ b/src/auth0/management/types/client_addon_share_point.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_addon_share_point_external_url import ClientAddonSharePointExternalUrl
+
+
+class ClientAddonSharePoint(UniversalBaseModel):
+ """
+ SharePoint SSO configuration.
+ """
+
+ url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Internal SharePoint application URL.
+ """
+
+ external_url: typing.Optional[ClientAddonSharePointExternalUrl] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_share_point_external_url.py b/src/auth0/management/types/client_addon_share_point_external_url.py
new file mode 100644
index 00000000..dc42cd04
--- /dev/null
+++ b/src/auth0/management/types/client_addon_share_point_external_url.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientAddonSharePointExternalUrl = typing.Union[typing.List[str], str]
diff --git a/src/auth0/management/types/client_addon_slack.py b/src/auth0/management/types/client_addon_slack.py
new file mode 100644
index 00000000..df0b0ec4
--- /dev/null
+++ b/src/auth0/management/types/client_addon_slack.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonSlack(UniversalBaseModel):
+ """
+ Slack team or workspace name usually first segment in your Slack URL. e.g. `https://acme-org.slack.com` would be `acme-org`.
+ """
+
+ team: str = pydantic.Field()
+ """
+ Slack team name.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_spring_cm.py b/src/auth0/management/types/client_addon_spring_cm.py
new file mode 100644
index 00000000..f38aa5ec
--- /dev/null
+++ b/src/auth0/management/types/client_addon_spring_cm.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonSpringCm(UniversalBaseModel):
+ """
+ SpringCM SSO configuration.
+ """
+
+ acsurl: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SpringCM ACS URL, e.g. `https://na11.springcm.com/atlas/sso/SSOEndpoint.ashx`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_sso_integration.py b/src/auth0/management/types/client_addon_sso_integration.py
new file mode 100644
index 00000000..696a92f9
--- /dev/null
+++ b/src/auth0/management/types/client_addon_sso_integration.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonSsoIntegration(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SSO integration name
+ """
+
+ version: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SSO integration version installed
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_wams.py b/src/auth0/management/types/client_addon_wams.py
new file mode 100644
index 00000000..c2fc6617
--- /dev/null
+++ b/src/auth0/management/types/client_addon_wams.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonWams(UniversalBaseModel):
+ """
+ Windows Azure Mobile Services addon configuration.
+ """
+
+ masterkey: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Your master key for Windows Azure Mobile Services.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_ws_fed.py b/src/auth0/management/types/client_addon_ws_fed.py
new file mode 100644
index 00000000..34fdb142
--- /dev/null
+++ b/src/auth0/management/types/client_addon_ws_fed.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientAddonWsFed = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/client_addon_zendesk.py b/src/auth0/management/types/client_addon_zendesk.py
new file mode 100644
index 00000000..1dfd7ba1
--- /dev/null
+++ b/src/auth0/management/types/client_addon_zendesk.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ClientAddonZendesk(UniversalBaseModel):
+ """
+ Zendesk SSO configuration.
+ """
+
+ account_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountName")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Zendesk account name usually first segment in your Zendesk URL. e.g. `https://acme-org.zendesk.com` would be `acme-org`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addon_zoom.py b/src/auth0/management/types/client_addon_zoom.py
new file mode 100644
index 00000000..51c1c3e4
--- /dev/null
+++ b/src/auth0/management/types/client_addon_zoom.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientAddonZoom(UniversalBaseModel):
+ """
+ Zoom SSO configuration.
+ """
+
+ account: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Zoom account name usually first segment of your Zoom URL, e.g. `https://acme-org.zoom.us` would be `acme-org`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_addons.py b/src/auth0/management/types/client_addons.py
new file mode 100644
index 00000000..be615185
--- /dev/null
+++ b/src/auth0/management/types/client_addons.py
@@ -0,0 +1,86 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .client_addon_aws import ClientAddonAws
+from .client_addon_azure_blob import ClientAddonAzureBlob
+from .client_addon_azure_sb import ClientAddonAzureSb
+from .client_addon_box import ClientAddonBox
+from .client_addon_cloud_bees import ClientAddonCloudBees
+from .client_addon_concur import ClientAddonConcur
+from .client_addon_dropbox import ClientAddonDropbox
+from .client_addon_echo_sign import ClientAddonEchoSign
+from .client_addon_egnyte import ClientAddonEgnyte
+from .client_addon_firebase import ClientAddonFirebase
+from .client_addon_layer import ClientAddonLayer
+from .client_addon_mscrm import ClientAddonMscrm
+from .client_addon_new_relic import ClientAddonNewRelic
+from .client_addon_oag import ClientAddonOag
+from .client_addon_office_365 import ClientAddonOffice365
+from .client_addon_rms import ClientAddonRms
+from .client_addon_salesforce import ClientAddonSalesforce
+from .client_addon_salesforce_api import ClientAddonSalesforceApi
+from .client_addon_salesforce_sandbox_api import ClientAddonSalesforceSandboxApi
+from .client_addon_saml import ClientAddonSaml
+from .client_addon_sapapi import ClientAddonSapapi
+from .client_addon_sentry import ClientAddonSentry
+from .client_addon_share_point import ClientAddonSharePoint
+from .client_addon_slack import ClientAddonSlack
+from .client_addon_spring_cm import ClientAddonSpringCm
+from .client_addon_sso_integration import ClientAddonSsoIntegration
+from .client_addon_wams import ClientAddonWams
+from .client_addon_ws_fed import ClientAddonWsFed
+from .client_addon_zendesk import ClientAddonZendesk
+from .client_addon_zoom import ClientAddonZoom
+
+
+class ClientAddons(UniversalBaseModel):
+ """
+ Addons enabled for this client and their associated configurations.
+ """
+
+ aws: typing.Optional[ClientAddonAws] = None
+ azure_blob: typing.Optional[ClientAddonAzureBlob] = None
+ azure_sb: typing.Optional[ClientAddonAzureSb] = None
+ rms: typing.Optional[ClientAddonRms] = None
+ mscrm: typing.Optional[ClientAddonMscrm] = None
+ slack: typing.Optional[ClientAddonSlack] = None
+ sentry: typing.Optional[ClientAddonSentry] = None
+ box: typing.Optional[ClientAddonBox] = None
+ cloudbees: typing.Optional[ClientAddonCloudBees] = None
+ concur: typing.Optional[ClientAddonConcur] = None
+ dropbox: typing.Optional[ClientAddonDropbox] = None
+ echosign: typing.Optional[ClientAddonEchoSign] = None
+ egnyte: typing.Optional[ClientAddonEgnyte] = None
+ firebase: typing.Optional[ClientAddonFirebase] = None
+ newrelic: typing.Optional[ClientAddonNewRelic] = None
+ office_365: typing_extensions.Annotated[typing.Optional[ClientAddonOffice365], FieldMetadata(alias="office365")] = (
+ None
+ )
+ salesforce: typing.Optional[ClientAddonSalesforce] = None
+ salesforce_api: typing.Optional[ClientAddonSalesforceApi] = None
+ salesforce_sandbox_api: typing.Optional[ClientAddonSalesforceSandboxApi] = None
+ samlp: typing.Optional[ClientAddonSaml] = None
+ layer: typing.Optional[ClientAddonLayer] = None
+ sap_api: typing.Optional[ClientAddonSapapi] = None
+ sharepoint: typing.Optional[ClientAddonSharePoint] = None
+ springcm: typing.Optional[ClientAddonSpringCm] = None
+ wams: typing.Optional[ClientAddonWams] = None
+ wsfed: typing.Optional[ClientAddonWsFed] = None
+ zendesk: typing.Optional[ClientAddonZendesk] = None
+ zoom: typing.Optional[ClientAddonZoom] = None
+ sso_integration: typing.Optional[ClientAddonSsoIntegration] = None
+ oag: typing.Optional[ClientAddonOag] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_app_type_enum.py b/src/auth0/management/types/client_app_type_enum.py
new file mode 100644
index 00000000..28094665
--- /dev/null
+++ b/src/auth0/management/types/client_app_type_enum.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientAppTypeEnum = typing.Union[
+ typing.Literal[
+ "native",
+ "spa",
+ "regular_web",
+ "non_interactive",
+ "resource_server",
+ "express_configuration",
+ "rms",
+ "box",
+ "cloudbees",
+ "concur",
+ "dropbox",
+ "mscrm",
+ "echosign",
+ "egnyte",
+ "newrelic",
+ "office365",
+ "salesforce",
+ "sentry",
+ "sharepoint",
+ "slack",
+ "springcm",
+ "zendesk",
+ "zoom",
+ "sso_integration",
+ "oag",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/client_async_approval_notifications_channels_api_patch_configuration.py b/src/auth0/management/types/client_async_approval_notifications_channels_api_patch_configuration.py
new file mode 100644
index 00000000..a9824c34
--- /dev/null
+++ b/src/auth0/management/types/client_async_approval_notifications_channels_api_patch_configuration.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .async_approval_notifications_channels_enum import AsyncApprovalNotificationsChannelsEnum
+
+ClientAsyncApprovalNotificationsChannelsApiPatchConfiguration = typing.List[AsyncApprovalNotificationsChannelsEnum]
diff --git a/src/auth0/management/types/client_async_approval_notifications_channels_api_post_configuration.py b/src/auth0/management/types/client_async_approval_notifications_channels_api_post_configuration.py
new file mode 100644
index 00000000..deb4e42b
--- /dev/null
+++ b/src/auth0/management/types/client_async_approval_notifications_channels_api_post_configuration.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .async_approval_notifications_channels_enum import AsyncApprovalNotificationsChannelsEnum
+
+ClientAsyncApprovalNotificationsChannelsApiPostConfiguration = typing.List[AsyncApprovalNotificationsChannelsEnum]
diff --git a/src/auth0/management/types/client_authentication_method.py b/src/auth0/management/types/client_authentication_method.py
new file mode 100644
index 00000000..11f6b56f
--- /dev/null
+++ b/src/auth0/management/types/client_authentication_method.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_authentication_method_self_signed_tls_client_auth import ClientAuthenticationMethodSelfSignedTlsClientAuth
+from .client_authentication_method_tls_client_auth import ClientAuthenticationMethodTlsClientAuth
+from .private_key_jwt import PrivateKeyJwt
+
+
+class ClientAuthenticationMethod(UniversalBaseModel):
+ """
+ Defines client authentication methods.
+ """
+
+ private_key_jwt: typing.Optional[PrivateKeyJwt] = None
+ tls_client_auth: typing.Optional[ClientAuthenticationMethodTlsClientAuth] = None
+ self_signed_tls_client_auth: typing.Optional[ClientAuthenticationMethodSelfSignedTlsClientAuth] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_authentication_method_self_signed_tls_client_auth.py b/src/auth0/management/types/client_authentication_method_self_signed_tls_client_auth.py
new file mode 100644
index 00000000..345310d1
--- /dev/null
+++ b/src/auth0/management/types/client_authentication_method_self_signed_tls_client_auth.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .credential_id import CredentialId
+
+
+class ClientAuthenticationMethodSelfSignedTlsClientAuth(UniversalBaseModel):
+ """
+ Defines `self_signed_tls_client_auth` client authentication method. If the property is defined, the client is configured to use mTLS authentication method utilizing self-signed certificate.
+ """
+
+ credentials: typing.List[CredentialId] = pydantic.Field()
+ """
+ A list of unique and previously created credential IDs enabled on the client for mTLS authentication utilizing self-signed certificate.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_authentication_method_tls_client_auth.py b/src/auth0/management/types/client_authentication_method_tls_client_auth.py
new file mode 100644
index 00000000..2f59dcbf
--- /dev/null
+++ b/src/auth0/management/types/client_authentication_method_tls_client_auth.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .credential_id import CredentialId
+
+
+class ClientAuthenticationMethodTlsClientAuth(UniversalBaseModel):
+ """
+ Defines `tls_client_auth` client authentication method. If the property is defined, the client is configured to use CA-based mTLS authentication method.
+ """
+
+ credentials: typing.List[CredentialId] = pydantic.Field()
+ """
+ A list of unique and previously created credential IDs enabled on the client for CA-based mTLS authentication.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_compliance_level_enum.py b/src/auth0/management/types/client_compliance_level_enum.py
new file mode 100644
index 00000000..cd916dac
--- /dev/null
+++ b/src/auth0/management/types/client_compliance_level_enum.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientComplianceLevelEnum = typing.Union[
+ typing.Literal["none", "fapi1_adv_pkj_par", "fapi1_adv_mtls_par", "fapi2_sp_pkj_mtls", "fapi2_sp_mtls_mtls"],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/client_create_authentication_method.py b/src/auth0/management/types/client_create_authentication_method.py
new file mode 100644
index 00000000..fbda478c
--- /dev/null
+++ b/src/auth0/management/types/client_create_authentication_method.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_authentication_method_self_signed_tls_client_auth import ClientAuthenticationMethodSelfSignedTlsClientAuth
+from .client_authentication_method_tls_client_auth import ClientAuthenticationMethodTlsClientAuth
+from .private_key_jwt import PrivateKeyJwt
+
+
+class ClientCreateAuthenticationMethod(UniversalBaseModel):
+ """
+ Defines client authentication methods.
+ """
+
+ private_key_jwt: typing.Optional[PrivateKeyJwt] = None
+ tls_client_auth: typing.Optional[ClientAuthenticationMethodTlsClientAuth] = None
+ self_signed_tls_client_auth: typing.Optional[ClientAuthenticationMethodSelfSignedTlsClientAuth] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_credential.py b/src/auth0/management/types/client_credential.py
new file mode 100644
index 00000000..7eed9511
--- /dev/null
+++ b/src/auth0/management/types/client_credential.py
@@ -0,0 +1,66 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .client_credential_algorithm_enum import ClientCredentialAlgorithmEnum
+from .client_credential_type_enum import ClientCredentialTypeEnum
+
+
+class ClientCredential(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="cred_1m7sfABoNTTKYwTQ8qt6tX")
+ """
+ ID of the credential. Generated on creation.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The name given to the credential by the user.
+ """
+
+ kid: typing.Optional[str] = pydantic.Field(default="IZSSTECp...")
+ """
+ The key identifier of the credential, generated on creation.
+ """
+
+ alg: typing.Optional[ClientCredentialAlgorithmEnum] = None
+ credential_type: typing.Optional[ClientCredentialTypeEnum] = None
+ subject_dn: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The X509 certificate's Subject Distinguished Name
+ """
+
+ thumbprint_sha_256: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="thumbprint_sha256")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ The X509 certificate's SHA256 thumbprint
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date the credential was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date the credential was updated.
+ """
+
+ expires_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date representing the expiration of the credential.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_credential_algorithm_enum.py b/src/auth0/management/types/client_credential_algorithm_enum.py
new file mode 100644
index 00000000..88f6f3fa
--- /dev/null
+++ b/src/auth0/management/types/client_credential_algorithm_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientCredentialAlgorithmEnum = typing.Union[typing.Literal["RS256", "RS384", "PS256"], typing.Any]
diff --git a/src/auth0/management/types/client_credential_type_enum.py b/src/auth0/management/types/client_credential_type_enum.py
new file mode 100644
index 00000000..89f9217a
--- /dev/null
+++ b/src/auth0/management/types/client_credential_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientCredentialTypeEnum = typing.Union[typing.Literal["public_key", "cert_subject_dn", "x509_cert"], typing.Any]
diff --git a/src/auth0/management/types/client_default_organization.py b/src/auth0/management/types/client_default_organization.py
new file mode 100644
index 00000000..6b337c60
--- /dev/null
+++ b/src/auth0/management/types/client_default_organization.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_default_organization_flows_enum import ClientDefaultOrganizationFlowsEnum
+
+
+class ClientDefaultOrganization(UniversalBaseModel):
+ """
+ Defines the default Organization ID and flows
+ """
+
+ organization_id: str = pydantic.Field()
+ """
+ The default Organization ID to be used
+ """
+
+ flows: typing.List[ClientDefaultOrganizationFlowsEnum] = pydantic.Field()
+ """
+ The default Organization usage
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_default_organization_flows_enum.py b/src/auth0/management/types/client_default_organization_flows_enum.py
new file mode 100644
index 00000000..6d78e66f
--- /dev/null
+++ b/src/auth0/management/types/client_default_organization_flows_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientDefaultOrganizationFlowsEnum = typing.Literal["client_credentials"]
diff --git a/src/auth0/management/types/client_encryption_key.py b/src/auth0/management/types/client_encryption_key.py
new file mode 100644
index 00000000..d448444c
--- /dev/null
+++ b/src/auth0/management/types/client_encryption_key.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientEncryptionKey(UniversalBaseModel):
+ """
+ Encryption used for WsFed responses with this client.
+ """
+
+ pub: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Encryption Public RSA Key.
+ """
+
+ cert: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Encryption certificate for public key in X.509 (.CER) format.
+ """
+
+ subject: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Encryption certificate name for this certificate in the format `/CN={domain}`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_grant_allow_any_organization_enum.py b/src/auth0/management/types/client_grant_allow_any_organization_enum.py
new file mode 100644
index 00000000..19c94966
--- /dev/null
+++ b/src/auth0/management/types/client_grant_allow_any_organization_enum.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ClientGrantAllowAnyOrganizationEnum = bool
diff --git a/src/auth0/management/types/client_grant_organization_nullable_usage_enum.py b/src/auth0/management/types/client_grant_organization_nullable_usage_enum.py
new file mode 100644
index 00000000..70a5cd3d
--- /dev/null
+++ b/src/auth0/management/types/client_grant_organization_nullable_usage_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientGrantOrganizationNullableUsageEnum = typing.Union[typing.Literal["deny", "allow", "require"], typing.Any]
diff --git a/src/auth0/management/types/client_grant_organization_usage_enum.py b/src/auth0/management/types/client_grant_organization_usage_enum.py
new file mode 100644
index 00000000..e6fac0ce
--- /dev/null
+++ b/src/auth0/management/types/client_grant_organization_usage_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientGrantOrganizationUsageEnum = typing.Union[typing.Literal["deny", "allow", "require"], typing.Any]
diff --git a/src/auth0/management/types/client_grant_response_content.py b/src/auth0/management/types/client_grant_response_content.py
new file mode 100644
index 00000000..498aa078
--- /dev/null
+++ b/src/auth0/management/types/client_grant_response_content.py
@@ -0,0 +1,56 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_grant_organization_usage_enum import ClientGrantOrganizationUsageEnum
+from .client_grant_subject_type_enum import ClientGrantSubjectTypeEnum
+
+
+class ClientGrantResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the client grant.
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the client.
+ """
+
+ audience: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The audience (API identifier) of this client grant.
+ """
+
+ scope: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Scopes allowed for this client grant.
+ """
+
+ organization_usage: typing.Optional[ClientGrantOrganizationUsageEnum] = None
+ allow_any_organization: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, any organization can be used with this grant. If disabled (default), the grant must be explicitly assigned to the desired organizations.
+ """
+
+ is_system: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, this grant is a special grant created by Auth0. It cannot be modified or deleted directly.
+ """
+
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = None
+ authorization_details_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_grant_subject_type_enum.py b/src/auth0/management/types/client_grant_subject_type_enum.py
new file mode 100644
index 00000000..f38b5895
--- /dev/null
+++ b/src/auth0/management/types/client_grant_subject_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientGrantSubjectTypeEnum = typing.Union[typing.Literal["client", "user"], typing.Any]
diff --git a/src/auth0/management/types/client_jwt_configuration.py b/src/auth0/management/types/client_jwt_configuration.py
new file mode 100644
index 00000000..550665c4
--- /dev/null
+++ b/src/auth0/management/types/client_jwt_configuration.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_jwt_configuration_scopes import ClientJwtConfigurationScopes
+from .signing_algorithm_enum import SigningAlgorithmEnum
+
+
+class ClientJwtConfiguration(UniversalBaseModel):
+ """
+ Configuration related to JWTs for the client.
+ """
+
+ lifetime_in_seconds: typing.Optional[int] = pydantic.Field(default=36000)
+ """
+ Number of seconds the JWT will be valid for (affects `exp` claim).
+ """
+
+ secret_encoded: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether the client secret is base64 encoded (true) or unencoded (false).
+ """
+
+ scopes: typing.Optional[ClientJwtConfigurationScopes] = None
+ alg: typing.Optional[SigningAlgorithmEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_jwt_configuration_scopes.py b/src/auth0/management/types/client_jwt_configuration_scopes.py
new file mode 100644
index 00000000..da847f10
--- /dev/null
+++ b/src/auth0/management/types/client_jwt_configuration_scopes.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientJwtConfigurationScopes = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/client_metadata.py b/src/auth0/management/types/client_metadata.py
new file mode 100644
index 00000000..4b8e00e9
--- /dev/null
+++ b/src/auth0/management/types/client_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientMetadata = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/client_mobile.py b/src/auth0/management/types/client_mobile.py
new file mode 100644
index 00000000..07b0c241
--- /dev/null
+++ b/src/auth0/management/types/client_mobile.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_mobile_android import ClientMobileAndroid
+from .client_mobilei_os import ClientMobileiOs
+
+
+class ClientMobile(UniversalBaseModel):
+ """
+ Additional configuration for native mobile apps.
+ """
+
+ android: typing.Optional[ClientMobileAndroid] = None
+ ios: typing.Optional[ClientMobileiOs] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_mobile_android.py b/src/auth0/management/types/client_mobile_android.py
new file mode 100644
index 00000000..265901b2
--- /dev/null
+++ b/src/auth0/management/types/client_mobile_android.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ClientMobileAndroid(UniversalBaseModel):
+ """
+ Android native app configuration.
+ """
+
+ app_package_name: typing.Optional[str] = pydantic.Field(default="")
+ """
+ App package name found in AndroidManifest.xml.
+ """
+
+ sha_256_cert_fingerprints: typing_extensions.Annotated[
+ typing.Optional[typing.List[str]], FieldMetadata(alias="sha256_cert_fingerprints")
+ ] = pydantic.Field(default=None)
+ """
+ SHA256 fingerprints of the app's signing certificate. Multiple fingerprints can be used to support different versions of your app, such as debug and production builds.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_mobilei_os.py b/src/auth0/management/types/client_mobilei_os.py
new file mode 100644
index 00000000..72f7792d
--- /dev/null
+++ b/src/auth0/management/types/client_mobilei_os.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientMobileiOs(UniversalBaseModel):
+ """
+ iOS native app configuration.
+ """
+
+ team_id: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Identifier assigned to the Apple account that signs and uploads the app to the store.
+ """
+
+ app_bundle_identifier: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Assigned by developer to the app as its unique identifier inside the store. Usually this is a reverse domain plus the app name, e.g. `com.you.MyApp`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_oidc_backchannel_logout_initiators.py b/src/auth0/management/types/client_oidc_backchannel_logout_initiators.py
new file mode 100644
index 00000000..a85e80ba
--- /dev/null
+++ b/src/auth0/management/types/client_oidc_backchannel_logout_initiators.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_oidc_backchannel_logout_initiators_enum import ClientOidcBackchannelLogoutInitiatorsEnum
+from .client_oidc_backchannel_logout_initiators_mode_enum import ClientOidcBackchannelLogoutInitiatorsModeEnum
+
+
+class ClientOidcBackchannelLogoutInitiators(UniversalBaseModel):
+ """
+ Configuration for OIDC backchannel logout initiators
+ """
+
+ mode: typing.Optional[ClientOidcBackchannelLogoutInitiatorsModeEnum] = None
+ selected_initiators: typing.Optional[typing.List[ClientOidcBackchannelLogoutInitiatorsEnum]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_oidc_backchannel_logout_initiators_enum.py b/src/auth0/management/types/client_oidc_backchannel_logout_initiators_enum.py
new file mode 100644
index 00000000..9ed1eb90
--- /dev/null
+++ b/src/auth0/management/types/client_oidc_backchannel_logout_initiators_enum.py
@@ -0,0 +1,18 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientOidcBackchannelLogoutInitiatorsEnum = typing.Union[
+ typing.Literal[
+ "rp-logout",
+ "idp-logout",
+ "password-changed",
+ "session-expired",
+ "session-revoked",
+ "account-deleted",
+ "email-identifier-changed",
+ "mfa-phone-unenrolled",
+ "account-deactivated",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/client_oidc_backchannel_logout_initiators_mode_enum.py b/src/auth0/management/types/client_oidc_backchannel_logout_initiators_mode_enum.py
new file mode 100644
index 00000000..940ab094
--- /dev/null
+++ b/src/auth0/management/types/client_oidc_backchannel_logout_initiators_mode_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientOidcBackchannelLogoutInitiatorsModeEnum = typing.Union[typing.Literal["custom", "all"], typing.Any]
diff --git a/src/auth0/management/types/client_oidc_backchannel_logout_session_metadata.py b/src/auth0/management/types/client_oidc_backchannel_logout_session_metadata.py
new file mode 100644
index 00000000..74dfa63f
--- /dev/null
+++ b/src/auth0/management/types/client_oidc_backchannel_logout_session_metadata.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ClientOidcBackchannelLogoutSessionMetadata(UniversalBaseModel):
+ """
+ Controls whether session metadata is included in the logout token. Default value is null.
+ """
+
+ include: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ The `include` property determines whether session metadata is included in the logout token.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_oidc_backchannel_logout_settings.py b/src/auth0/management/types/client_oidc_backchannel_logout_settings.py
new file mode 100644
index 00000000..ed624981
--- /dev/null
+++ b/src/auth0/management/types/client_oidc_backchannel_logout_settings.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_oidc_backchannel_logout_initiators import ClientOidcBackchannelLogoutInitiators
+from .client_oidc_backchannel_logout_session_metadata import ClientOidcBackchannelLogoutSessionMetadata
+
+
+class ClientOidcBackchannelLogoutSettings(UniversalBaseModel):
+ """
+ Configuration for OIDC backchannel logout
+ """
+
+ backchannel_logout_urls: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs that are valid to call back from Auth0 for OIDC backchannel logout. Currently only one URL is allowed.
+ """
+
+ backchannel_logout_initiators: typing.Optional[ClientOidcBackchannelLogoutInitiators] = None
+ backchannel_logout_session_metadata: typing.Optional[ClientOidcBackchannelLogoutSessionMetadata] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_organization_discovery_enum.py b/src/auth0/management/types/client_organization_discovery_enum.py
new file mode 100644
index 00000000..e7830ec0
--- /dev/null
+++ b/src/auth0/management/types/client_organization_discovery_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientOrganizationDiscoveryEnum = typing.Union[typing.Literal["email", "organization_name"], typing.Any]
diff --git a/src/auth0/management/types/client_organization_require_behavior_enum.py b/src/auth0/management/types/client_organization_require_behavior_enum.py
new file mode 100644
index 00000000..4d4ed7f0
--- /dev/null
+++ b/src/auth0/management/types/client_organization_require_behavior_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientOrganizationRequireBehaviorEnum = typing.Union[
+ typing.Literal["no_prompt", "pre_login_prompt", "post_login_prompt"], typing.Any
+]
diff --git a/src/auth0/management/types/client_organization_require_behavior_patch_enum.py b/src/auth0/management/types/client_organization_require_behavior_patch_enum.py
new file mode 100644
index 00000000..21d50cd4
--- /dev/null
+++ b/src/auth0/management/types/client_organization_require_behavior_patch_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientOrganizationRequireBehaviorPatchEnum = typing.Union[
+ typing.Literal["no_prompt", "pre_login_prompt", "post_login_prompt"], typing.Any
+]
diff --git a/src/auth0/management/types/client_organization_usage_enum.py b/src/auth0/management/types/client_organization_usage_enum.py
new file mode 100644
index 00000000..646c4286
--- /dev/null
+++ b/src/auth0/management/types/client_organization_usage_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientOrganizationUsageEnum = typing.Union[typing.Literal["deny", "allow", "require"], typing.Any]
diff --git a/src/auth0/management/types/client_organization_usage_patch_enum.py b/src/auth0/management/types/client_organization_usage_patch_enum.py
new file mode 100644
index 00000000..2ce9818d
--- /dev/null
+++ b/src/auth0/management/types/client_organization_usage_patch_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientOrganizationUsagePatchEnum = typing.Union[typing.Literal["deny", "allow", "require"], typing.Any]
diff --git a/src/auth0/management/types/client_refresh_token_configuration.py b/src/auth0/management/types/client_refresh_token_configuration.py
new file mode 100644
index 00000000..999ef2ba
--- /dev/null
+++ b/src/auth0/management/types/client_refresh_token_configuration.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .refresh_token_expiration_type_enum import RefreshTokenExpirationTypeEnum
+from .refresh_token_rotation_type_enum import RefreshTokenRotationTypeEnum
+
+
+class ClientRefreshTokenConfiguration(UniversalBaseModel):
+ """
+ Refresh token configuration
+ """
+
+ rotation_type: RefreshTokenRotationTypeEnum
+ expiration_type: RefreshTokenExpirationTypeEnum
+ leeway: typing.Optional[int] = pydantic.Field(default=0)
+ """
+ Period in seconds where the previous refresh token can be exchanged without triggering breach detection
+ """
+
+ token_lifetime: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Period (in seconds) for which refresh tokens will remain valid
+ """
+
+ infinite_token_lifetime: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Prevents tokens from having a set lifetime when `true` (takes precedence over `token_lifetime` values)
+ """
+
+ idle_token_lifetime: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Period (in seconds) for which refresh tokens will remain valid without use
+ """
+
+ infinite_idle_token_lifetime: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Prevents tokens from expiring without use when `true` (takes precedence over `idle_token_lifetime` values)
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_session_transfer_allowed_authentication_methods_enum.py b/src/auth0/management/types/client_session_transfer_allowed_authentication_methods_enum.py
new file mode 100644
index 00000000..fecb79f9
--- /dev/null
+++ b/src/auth0/management/types/client_session_transfer_allowed_authentication_methods_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientSessionTransferAllowedAuthenticationMethodsEnum = typing.Union[typing.Literal["cookie", "query"], typing.Any]
diff --git a/src/auth0/management/types/client_session_transfer_configuration.py b/src/auth0/management/types/client_session_transfer_configuration.py
new file mode 100644
index 00000000..80b912b8
--- /dev/null
+++ b/src/auth0/management/types/client_session_transfer_configuration.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_session_transfer_allowed_authentication_methods_enum import (
+ ClientSessionTransferAllowedAuthenticationMethodsEnum,
+)
+from .client_session_transfer_device_binding_enum import ClientSessionTransferDeviceBindingEnum
+
+
+class ClientSessionTransferConfiguration(UniversalBaseModel):
+ """
+ Native to Web SSO Configuration
+ """
+
+ can_create_session_transfer_token: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Indicates whether an app can issue a Session Transfer Token through Token Exchange. If set to 'false', the app will not be able to issue a Session Transfer Token. Usually configured in the native application.
+ """
+
+ enforce_cascade_revocation: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Indicates whether revoking the parent Refresh Token that initiated a Native to Web flow and was used to issue a Session Transfer Token should trigger a cascade revocation affecting its dependent child entities. Usually configured in the native application.
+ """
+
+ allowed_authentication_methods: typing.Optional[
+ typing.List[ClientSessionTransferAllowedAuthenticationMethodsEnum]
+ ] = pydantic.Field(default=None)
+ """
+ Indicates whether an app can create a session from a Session Transfer Token received via indicated methods. Can include `cookie` and/or `query`. Usually configured in the web application.
+ """
+
+ enforce_device_binding: typing.Optional[ClientSessionTransferDeviceBindingEnum] = None
+ allow_refresh_token: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Indicates whether Refresh Tokens are allowed to be issued when authenticating with a Session Transfer Token. Usually configured in the web application.
+ """
+
+ enforce_online_refresh_tokens: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Indicates whether Refresh Tokens created during a native-to-web session are tied to that session's lifetime. This determines if such refresh tokens should be automatically revoked when their corresponding sessions are. Usually configured in the web application.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_session_transfer_device_binding_enum.py b/src/auth0/management/types/client_session_transfer_device_binding_enum.py
new file mode 100644
index 00000000..98e8da9f
--- /dev/null
+++ b/src/auth0/management/types/client_session_transfer_device_binding_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientSessionTransferDeviceBindingEnum = typing.Union[typing.Literal["ip", "asn", "none"], typing.Any]
diff --git a/src/auth0/management/types/client_signed_request_object_with_credential_id.py b/src/auth0/management/types/client_signed_request_object_with_credential_id.py
new file mode 100644
index 00000000..185aa3e4
--- /dev/null
+++ b/src/auth0/management/types/client_signed_request_object_with_credential_id.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .credential_id import CredentialId
+
+
+class ClientSignedRequestObjectWithCredentialId(UniversalBaseModel):
+ """
+ JWT-secured Authorization Requests (JAR) settings.
+ """
+
+ required: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Indicates whether the JAR requests are mandatory
+ """
+
+ credentials: typing.Optional[typing.List[CredentialId]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_signed_request_object_with_public_key.py b/src/auth0/management/types/client_signed_request_object_with_public_key.py
new file mode 100644
index 00000000..d0ce9240
--- /dev/null
+++ b/src/auth0/management/types/client_signed_request_object_with_public_key.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .public_key_credential import PublicKeyCredential
+
+
+class ClientSignedRequestObjectWithPublicKey(UniversalBaseModel):
+ """
+ JWT-secured Authorization Requests (JAR) settings.
+ """
+
+ required: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Indicates whether the JAR requests are mandatory
+ """
+
+ credentials: typing.Optional[typing.List[PublicKeyCredential]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_signing_key.py b/src/auth0/management/types/client_signing_key.py
new file mode 100644
index 00000000..9d46e952
--- /dev/null
+++ b/src/auth0/management/types/client_signing_key.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ClientSigningKey(UniversalBaseModel):
+ pkcs_7: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="pkcs7")] = pydantic.Field(default="")
+ """
+ Signing certificate public key and chain in PKCS#7 (.P7B) format.
+ """
+
+ cert: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Signing certificate public key in X.509 (.CER) format.
+ """
+
+ subject: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Subject name for this certificate in the format `/CN={domain}`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_signing_keys.py b/src/auth0/management/types/client_signing_keys.py
new file mode 100644
index 00000000..bc71004d
--- /dev/null
+++ b/src/auth0/management/types/client_signing_keys.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .client_signing_key import ClientSigningKey
+
+ClientSigningKeys = typing.List[ClientSigningKey]
diff --git a/src/auth0/management/types/client_token_endpoint_auth_method_enum.py b/src/auth0/management/types/client_token_endpoint_auth_method_enum.py
new file mode 100644
index 00000000..9c145c3f
--- /dev/null
+++ b/src/auth0/management/types/client_token_endpoint_auth_method_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientTokenEndpointAuthMethodEnum = typing.Union[
+ typing.Literal["none", "client_secret_post", "client_secret_basic"], typing.Any
+]
diff --git a/src/auth0/management/types/client_token_endpoint_auth_method_or_null_enum.py b/src/auth0/management/types/client_token_endpoint_auth_method_or_null_enum.py
new file mode 100644
index 00000000..6d5417a0
--- /dev/null
+++ b/src/auth0/management/types/client_token_endpoint_auth_method_or_null_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientTokenEndpointAuthMethodOrNullEnum = typing.Union[
+ typing.Literal["none", "client_secret_post", "client_secret_basic"], typing.Any
+]
diff --git a/src/auth0/management/types/client_token_exchange_configuration.py b/src/auth0/management/types/client_token_exchange_configuration.py
new file mode 100644
index 00000000..e70b3627
--- /dev/null
+++ b/src/auth0/management/types/client_token_exchange_configuration.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_token_exchange_type_enum import ClientTokenExchangeTypeEnum
+
+
+class ClientTokenExchangeConfiguration(UniversalBaseModel):
+ """
+ Configuration for token exchange.
+ """
+
+ allow_any_profile_of_type: typing.Optional[typing.List[ClientTokenExchangeTypeEnum]] = pydantic.Field(default=None)
+ """
+ List the enabled token exchange types for this client.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_token_exchange_configuration_or_null.py b/src/auth0/management/types/client_token_exchange_configuration_or_null.py
new file mode 100644
index 00000000..2c6c9665
--- /dev/null
+++ b/src/auth0/management/types/client_token_exchange_configuration_or_null.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_token_exchange_type_enum import ClientTokenExchangeTypeEnum
+
+
+class ClientTokenExchangeConfigurationOrNull(UniversalBaseModel):
+ """
+ Configuration for token exchange.
+ """
+
+ allow_any_profile_of_type: typing.Optional[typing.List[ClientTokenExchangeTypeEnum]] = pydantic.Field(default=None)
+ """
+ List the enabled token exchange types for this client.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/client_token_exchange_type_enum.py b/src/auth0/management/types/client_token_exchange_type_enum.py
new file mode 100644
index 00000000..d6bc2860
--- /dev/null
+++ b/src/auth0/management/types/client_token_exchange_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ClientTokenExchangeTypeEnum = typing.Literal["custom_authentication"]
diff --git a/src/auth0/management/types/connected_account.py b/src/auth0/management/types/connected_account.py
new file mode 100644
index 00000000..31fd5e8b
--- /dev/null
+++ b/src/auth0/management/types/connected_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connected_account_access_type_enum import ConnectedAccountAccessTypeEnum
+
+
+class ConnectedAccount(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ The unique identifier for the connected account.
+ """
+
+ connection: str = pydantic.Field()
+ """
+ The name of the connection associated with the account.
+ """
+
+ connection_id: str = pydantic.Field()
+ """
+ The unique identifier of the connection associated with the account.
+ """
+
+ strategy: str = pydantic.Field()
+ """
+ The authentication strategy used by the connection.
+ """
+
+ access_type: ConnectedAccountAccessTypeEnum = "offline"
+ scopes: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ The scopes granted for this connected account.
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ ISO 8601 timestamp when the connected account was created.
+ """
+
+ expires_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ ISO 8601 timestamp when the connected account expires.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connected_account_access_type_enum.py b/src/auth0/management/types/connected_account_access_type_enum.py
new file mode 100644
index 00000000..08b8981a
--- /dev/null
+++ b/src/auth0/management/types/connected_account_access_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectedAccountAccessTypeEnum = typing.Literal["offline"]
diff --git a/src/auth0/management/types/connection_acr_values_supported.py b/src/auth0/management/types/connection_acr_values_supported.py
new file mode 100644
index 00000000..1b99a26f
--- /dev/null
+++ b/src/auth0/management/types/connection_acr_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionAcrValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_allowed_audiences_google_o_auth_2.py b/src/auth0/management/types/connection_allowed_audiences_google_o_auth_2.py
new file mode 100644
index 00000000..775dc347
--- /dev/null
+++ b/src/auth0/management/types/connection_allowed_audiences_google_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionAllowedAudiencesGoogleOAuth2 = typing.List[str]
diff --git a/src/auth0/management/types/connection_app_domain_azure_ad.py b/src/auth0/management/types/connection_app_domain_azure_ad.py
new file mode 100644
index 00000000..cd58ddac
--- /dev/null
+++ b/src/auth0/management/types/connection_app_domain_azure_ad.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionAppDomainAzureAd = str
diff --git a/src/auth0/management/types/connection_attribute_identifier.py b/src/auth0/management/types/connection_attribute_identifier.py
new file mode 100644
index 00000000..958ddf5e
--- /dev/null
+++ b/src/auth0/management/types/connection_attribute_identifier.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionAttributeIdentifier(UniversalBaseModel):
+ active: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines if the attribute is used for identification
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_attribute_map_attributes.py b/src/auth0/management/types/connection_attribute_map_attributes.py
new file mode 100644
index 00000000..c08b9a41
--- /dev/null
+++ b/src/auth0/management/types/connection_attribute_map_attributes.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionAttributeMapAttributes = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_attribute_map_oidc.py b/src/auth0/management/types/connection_attribute_map_oidc.py
new file mode 100644
index 00000000..3e84f398
--- /dev/null
+++ b/src/auth0/management/types/connection_attribute_map_oidc.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_attribute_map_attributes import ConnectionAttributeMapAttributes
+from .connection_attribute_map_userinfo_scope import ConnectionAttributeMapUserinfoScope
+from .connection_mapping_mode_enum_oidc import ConnectionMappingModeEnumOidc
+
+
+class ConnectionAttributeMapOidc(UniversalBaseModel):
+ """
+ Mapping of claims received from the identity provider (IdP)
+ """
+
+ attributes: typing.Optional[ConnectionAttributeMapAttributes] = None
+ mapping_mode: typing.Optional[ConnectionMappingModeEnumOidc] = None
+ userinfo_scope: typing.Optional[ConnectionAttributeMapUserinfoScope] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_attribute_map_okta.py b/src/auth0/management/types/connection_attribute_map_okta.py
new file mode 100644
index 00000000..764cd295
--- /dev/null
+++ b/src/auth0/management/types/connection_attribute_map_okta.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_attribute_map_attributes import ConnectionAttributeMapAttributes
+from .connection_attribute_map_userinfo_scope import ConnectionAttributeMapUserinfoScope
+from .connection_mapping_mode_enum_okta import ConnectionMappingModeEnumOkta
+
+
+class ConnectionAttributeMapOkta(UniversalBaseModel):
+ """
+ Mapping of claims received from the identity provider (IdP)
+ """
+
+ attributes: typing.Optional[ConnectionAttributeMapAttributes] = None
+ mapping_mode: typing.Optional[ConnectionMappingModeEnumOkta] = None
+ userinfo_scope: typing.Optional[ConnectionAttributeMapUserinfoScope] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_attribute_map_userinfo_scope.py b/src/auth0/management/types/connection_attribute_map_userinfo_scope.py
new file mode 100644
index 00000000..5b2f5bd9
--- /dev/null
+++ b/src/auth0/management/types/connection_attribute_map_userinfo_scope.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionAttributeMapUserinfoScope = str
diff --git a/src/auth0/management/types/connection_attributes.py b/src/auth0/management/types/connection_attributes.py
new file mode 100644
index 00000000..9590aeb9
--- /dev/null
+++ b/src/auth0/management/types/connection_attributes.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .email_attribute import EmailAttribute
+from .phone_attribute import PhoneAttribute
+from .username_attribute import UsernameAttribute
+
+
+class ConnectionAttributes(UniversalBaseModel):
+ """
+ Attribute configuration
+ """
+
+ email: typing.Optional[EmailAttribute] = None
+ phone_number: typing.Optional[PhoneAttribute] = None
+ username: typing.Optional[UsernameAttribute] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_auth_params_additional_properties_o_auth_2.py b/src/auth0/management/types/connection_auth_params_additional_properties_o_auth_2.py
new file mode 100644
index 00000000..fcead152
--- /dev/null
+++ b/src/auth0/management/types/connection_auth_params_additional_properties_o_auth_2.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionAuthParamsAdditionalPropertiesOAuth2 = str
diff --git a/src/auth0/management/types/connection_auth_params_map.py b/src/auth0/management/types/connection_auth_params_map.py
new file mode 100644
index 00000000..ce7ea31d
--- /dev/null
+++ b/src/auth0/management/types/connection_auth_params_map.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionAuthParamsMap = typing.Dict[str, str]
diff --git a/src/auth0/management/types/connection_auth_params_o_auth_2.py b/src/auth0/management/types/connection_auth_params_o_auth_2.py
new file mode 100644
index 00000000..c6a31cb5
--- /dev/null
+++ b/src/auth0/management/types/connection_auth_params_o_auth_2.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .connection_auth_params_additional_properties_o_auth_2 import ConnectionAuthParamsAdditionalPropertiesOAuth2
+
+ConnectionAuthParamsOAuth2 = typing.Dict[str, ConnectionAuthParamsAdditionalPropertiesOAuth2]
diff --git a/src/auth0/management/types/connection_authentication_methods.py b/src/auth0/management/types/connection_authentication_methods.py
new file mode 100644
index 00000000..97733650
--- /dev/null
+++ b/src/auth0/management/types/connection_authentication_methods.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_passkey_authentication_method import ConnectionPasskeyAuthenticationMethod
+from .connection_password_authentication_method import ConnectionPasswordAuthenticationMethod
+
+
+class ConnectionAuthenticationMethods(UniversalBaseModel):
+ """
+ Options for enabling authentication methods.
+ """
+
+ password: typing.Optional[ConnectionPasswordAuthenticationMethod] = None
+ passkey: typing.Optional[ConnectionPasskeyAuthenticationMethod] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_authentication_purpose.py b/src/auth0/management/types/connection_authentication_purpose.py
new file mode 100644
index 00000000..d278158b
--- /dev/null
+++ b/src/auth0/management/types/connection_authentication_purpose.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionAuthenticationPurpose(UniversalBaseModel):
+ """
+ Configure the purpose of a connection to be used for authentication during login.
+ """
+
+ active: bool
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_authorization_endpoint.py b/src/auth0/management/types/connection_authorization_endpoint.py
new file mode 100644
index 00000000..5da23209
--- /dev/null
+++ b/src/auth0/management/types/connection_authorization_endpoint.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionAuthorizationEndpoint = str
diff --git a/src/auth0/management/types/connection_authorization_endpoint_o_auth_2.py b/src/auth0/management/types/connection_authorization_endpoint_o_auth_2.py
new file mode 100644
index 00000000..797da3f0
--- /dev/null
+++ b/src/auth0/management/types/connection_authorization_endpoint_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_authorization_endpoint import ConnectionAuthorizationEndpoint
+
+ConnectionAuthorizationEndpointOAuth2 = ConnectionAuthorizationEndpoint
diff --git a/src/auth0/management/types/connection_brute_force_protection.py b/src/auth0/management/types/connection_brute_force_protection.py
new file mode 100644
index 00000000..1a6fff2d
--- /dev/null
+++ b/src/auth0/management/types/connection_brute_force_protection.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionBruteForceProtection = bool
diff --git a/src/auth0/management/types/connection_claim_types_supported.py b/src/auth0/management/types/connection_claim_types_supported.py
new file mode 100644
index 00000000..cab5c24b
--- /dev/null
+++ b/src/auth0/management/types/connection_claim_types_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionClaimTypesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_claims_locales_supported.py b/src/auth0/management/types/connection_claims_locales_supported.py
new file mode 100644
index 00000000..7a86041a
--- /dev/null
+++ b/src/auth0/management/types/connection_claims_locales_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionClaimsLocalesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_claims_parameter_supported.py b/src/auth0/management/types/connection_claims_parameter_supported.py
new file mode 100644
index 00000000..56304e20
--- /dev/null
+++ b/src/auth0/management/types/connection_claims_parameter_supported.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionClaimsParameterSupported = bool
diff --git a/src/auth0/management/types/connection_claims_supported.py b/src/auth0/management/types/connection_claims_supported.py
new file mode 100644
index 00000000..4f8663c8
--- /dev/null
+++ b/src/auth0/management/types/connection_claims_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionClaimsSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_client_id.py b/src/auth0/management/types/connection_client_id.py
new file mode 100644
index 00000000..b7955f06
--- /dev/null
+++ b/src/auth0/management/types/connection_client_id.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionClientId = str
diff --git a/src/auth0/management/types/connection_client_id_azure_ad.py b/src/auth0/management/types/connection_client_id_azure_ad.py
new file mode 100644
index 00000000..4e1d2f9d
--- /dev/null
+++ b/src/auth0/management/types/connection_client_id_azure_ad.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_client_id import ConnectionClientId
+
+ConnectionClientIdAzureAd = ConnectionClientId
diff --git a/src/auth0/management/types/connection_client_id_google_o_auth_2.py b/src/auth0/management/types/connection_client_id_google_o_auth_2.py
new file mode 100644
index 00000000..88bf2a8b
--- /dev/null
+++ b/src/auth0/management/types/connection_client_id_google_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionClientIdGoogleOAuth2 = typing.Optional[str]
diff --git a/src/auth0/management/types/connection_client_id_o_auth_2.py b/src/auth0/management/types/connection_client_id_o_auth_2.py
new file mode 100644
index 00000000..bb9db483
--- /dev/null
+++ b/src/auth0/management/types/connection_client_id_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_client_id import ConnectionClientId
+
+ConnectionClientIdOAuth2 = ConnectionClientId
diff --git a/src/auth0/management/types/connection_client_id_oidc.py b/src/auth0/management/types/connection_client_id_oidc.py
new file mode 100644
index 00000000..efab6cfe
--- /dev/null
+++ b/src/auth0/management/types/connection_client_id_oidc.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_client_id import ConnectionClientId
+
+ConnectionClientIdOidc = ConnectionClientId
diff --git a/src/auth0/management/types/connection_client_secret.py b/src/auth0/management/types/connection_client_secret.py
new file mode 100644
index 00000000..027856a4
--- /dev/null
+++ b/src/auth0/management/types/connection_client_secret.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionClientSecret = str
diff --git a/src/auth0/management/types/connection_client_secret_azure_ad.py b/src/auth0/management/types/connection_client_secret_azure_ad.py
new file mode 100644
index 00000000..eea0d483
--- /dev/null
+++ b/src/auth0/management/types/connection_client_secret_azure_ad.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionClientSecretAzureAd = str
diff --git a/src/auth0/management/types/connection_client_secret_google_o_auth_2.py b/src/auth0/management/types/connection_client_secret_google_o_auth_2.py
new file mode 100644
index 00000000..806e5768
--- /dev/null
+++ b/src/auth0/management/types/connection_client_secret_google_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionClientSecretGoogleOAuth2 = typing.Optional[str]
diff --git a/src/auth0/management/types/connection_client_secret_o_auth_2.py b/src/auth0/management/types/connection_client_secret_o_auth_2.py
new file mode 100644
index 00000000..5787a8f6
--- /dev/null
+++ b/src/auth0/management/types/connection_client_secret_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_client_secret import ConnectionClientSecret
+
+ConnectionClientSecretOAuth2 = ConnectionClientSecret
diff --git a/src/auth0/management/types/connection_client_secret_oidc.py b/src/auth0/management/types/connection_client_secret_oidc.py
new file mode 100644
index 00000000..d9e9fbd8
--- /dev/null
+++ b/src/auth0/management/types/connection_client_secret_oidc.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_client_secret import ConnectionClientSecret
+
+ConnectionClientSecretOidc = ConnectionClientSecret
diff --git a/src/auth0/management/types/connection_common.py b/src/auth0/management/types/connection_common.py
new file mode 100644
index 00000000..648ff0d4
--- /dev/null
+++ b/src/auth0/management/types/connection_common.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_authentication_purpose import ConnectionAuthenticationPurpose
+from .connection_connected_accounts_purpose import ConnectionConnectedAccountsPurpose
+from .connection_display_name import ConnectionDisplayName
+from .connection_enabled_clients import ConnectionEnabledClients
+from .connection_is_domain_connection import ConnectionIsDomainConnection
+from .connection_realms import ConnectionRealms
+from .connection_show_as_button import ConnectionShowAsButton
+from .connections_metadata import ConnectionsMetadata
+
+
+class ConnectionCommon(UniversalBaseModel):
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = None
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = None
+ display_name: typing.Optional[ConnectionDisplayName] = None
+ enabled_clients: typing.Optional[ConnectionEnabledClients] = None
+ is_domain_connection: typing.Optional[ConnectionIsDomainConnection] = None
+ metadata: typing.Optional[ConnectionsMetadata] = None
+ realms: typing.Optional[ConnectionRealms] = None
+ show_as_button: typing.Optional[ConnectionShowAsButton] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_configuration.py b/src/auth0/management/types/connection_configuration.py
new file mode 100644
index 00000000..54d6428a
--- /dev/null
+++ b/src/auth0/management/types/connection_configuration.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionConfiguration = typing.Dict[str, str]
diff --git a/src/auth0/management/types/connection_connected_accounts_purpose.py b/src/auth0/management/types/connection_connected_accounts_purpose.py
new file mode 100644
index 00000000..f04483fc
--- /dev/null
+++ b/src/auth0/management/types/connection_connected_accounts_purpose.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionConnectedAccountsPurpose(UniversalBaseModel):
+ """
+ Configure the purpose of a connection to be used for connected accounts and Token Vault.
+ """
+
+ active: bool
+ cross_app_access: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_connection_settings.py b/src/auth0/management/types/connection_connection_settings.py
new file mode 100644
index 00000000..825235bc
--- /dev/null
+++ b/src/auth0/management/types/connection_connection_settings.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_connection_settings_pkce_enum import ConnectionConnectionSettingsPkceEnum
+
+
+class ConnectionConnectionSettings(UniversalBaseModel):
+ """
+ PKCE configuration for the connection
+ """
+
+ pkce: typing.Optional[ConnectionConnectionSettingsPkceEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_connection_settings_pkce_enum.py b/src/auth0/management/types/connection_connection_settings_pkce_enum.py
new file mode 100644
index 00000000..339bca27
--- /dev/null
+++ b/src/auth0/management/types/connection_connection_settings_pkce_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionConnectionSettingsPkceEnum = typing.Union[typing.Literal["auto", "S256", "plain", "disabled"], typing.Any]
diff --git a/src/auth0/management/types/connection_custom_headers_o_auth_2.py b/src/auth0/management/types/connection_custom_headers_o_auth_2.py
new file mode 100644
index 00000000..691f7d1c
--- /dev/null
+++ b/src/auth0/management/types/connection_custom_headers_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionCustomHeadersOAuth2 = typing.Dict[str, str]
diff --git a/src/auth0/management/types/connection_custom_scripts.py b/src/auth0/management/types/connection_custom_scripts.py
new file mode 100644
index 00000000..4147f120
--- /dev/null
+++ b/src/auth0/management/types/connection_custom_scripts.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionCustomScripts(UniversalBaseModel):
+ """
+ A map of scripts used to integrate with a custom database.
+ """
+
+ login: typing.Optional[str] = None
+ get_user: typing.Optional[str] = None
+ delete: typing.Optional[str] = None
+ change_password: typing.Optional[str] = None
+ verify: typing.Optional[str] = None
+ create: typing.Optional[str] = None
+ change_username: typing.Optional[str] = None
+ change_email: typing.Optional[str] = None
+ change_phone_number: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_disable_self_service_change_password.py b/src/auth0/management/types/connection_disable_self_service_change_password.py
new file mode 100644
index 00000000..383fe079
--- /dev/null
+++ b/src/auth0/management/types/connection_disable_self_service_change_password.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionDisableSelfServiceChangePassword = bool
diff --git a/src/auth0/management/types/connection_disable_signup.py b/src/auth0/management/types/connection_disable_signup.py
new file mode 100644
index 00000000..b35db190
--- /dev/null
+++ b/src/auth0/management/types/connection_disable_signup.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionDisableSignup = bool
diff --git a/src/auth0/management/types/connection_discovery_url.py b/src/auth0/management/types/connection_discovery_url.py
new file mode 100644
index 00000000..df2d9e1b
--- /dev/null
+++ b/src/auth0/management/types/connection_discovery_url.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionDiscoveryUrl = str
diff --git a/src/auth0/management/types/connection_display_name.py b/src/auth0/management/types/connection_display_name.py
new file mode 100644
index 00000000..a3506f08
--- /dev/null
+++ b/src/auth0/management/types/connection_display_name.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionDisplayName = str
diff --git a/src/auth0/management/types/connection_display_values_supported.py b/src/auth0/management/types/connection_display_values_supported.py
new file mode 100644
index 00000000..eba56ed2
--- /dev/null
+++ b/src/auth0/management/types/connection_display_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionDisplayValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_domain_aliases_azure_ad.py b/src/auth0/management/types/connection_domain_aliases_azure_ad.py
new file mode 100644
index 00000000..ba492cdb
--- /dev/null
+++ b/src/auth0/management/types/connection_domain_aliases_azure_ad.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionDomainAliasesAzureAd = typing.List[str]
diff --git a/src/auth0/management/types/connection_domain_aliases_one.py b/src/auth0/management/types/connection_domain_aliases_one.py
new file mode 100644
index 00000000..88913d08
--- /dev/null
+++ b/src/auth0/management/types/connection_domain_aliases_one.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionDomainAliasesOne = typing.List[str]
diff --git a/src/auth0/management/types/connection_domain_okta.py b/src/auth0/management/types/connection_domain_okta.py
new file mode 100644
index 00000000..9140d748
--- /dev/null
+++ b/src/auth0/management/types/connection_domain_okta.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionDomainOkta = str
diff --git a/src/auth0/management/types/connection_enable_script_context.py b/src/auth0/management/types/connection_enable_script_context.py
new file mode 100644
index 00000000..4574bf90
--- /dev/null
+++ b/src/auth0/management/types/connection_enable_script_context.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionEnableScriptContext = bool
diff --git a/src/auth0/management/types/connection_enabled_client.py b/src/auth0/management/types/connection_enabled_client.py
new file mode 100644
index 00000000..3d5910e2
--- /dev/null
+++ b/src/auth0/management/types/connection_enabled_client.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionEnabledClient(UniversalBaseModel):
+ client_id: str = pydantic.Field()
+ """
+ The client id
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_enabled_clients.py b/src/auth0/management/types/connection_enabled_clients.py
new file mode 100644
index 00000000..204ee79c
--- /dev/null
+++ b/src/auth0/management/types/connection_enabled_clients.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionEnabledClients = typing.List[str]
diff --git a/src/auth0/management/types/connection_enabled_database_customization.py b/src/auth0/management/types/connection_enabled_database_customization.py
new file mode 100644
index 00000000..c32b3792
--- /dev/null
+++ b/src/auth0/management/types/connection_enabled_database_customization.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionEnabledDatabaseCustomization = bool
diff --git a/src/auth0/management/types/connection_end_session_endpoint.py b/src/auth0/management/types/connection_end_session_endpoint.py
new file mode 100644
index 00000000..34326356
--- /dev/null
+++ b/src/auth0/management/types/connection_end_session_endpoint.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionEndSessionEndpoint = str
diff --git a/src/auth0/management/types/connection_end_session_endpoint_o_auth_2.py b/src/auth0/management/types/connection_end_session_endpoint_o_auth_2.py
new file mode 100644
index 00000000..12a51687
--- /dev/null
+++ b/src/auth0/management/types/connection_end_session_endpoint_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_end_session_endpoint import ConnectionEndSessionEndpoint
+
+ConnectionEndSessionEndpointOAuth2 = ConnectionEndSessionEndpoint
diff --git a/src/auth0/management/types/connection_ext_admin.py b/src/auth0/management/types/connection_ext_admin.py
new file mode 100644
index 00000000..801168ff
--- /dev/null
+++ b/src/auth0/management/types/connection_ext_admin.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionExtAdmin = bool
diff --git a/src/auth0/management/types/connection_ext_agreed_terms.py b/src/auth0/management/types/connection_ext_agreed_terms.py
new file mode 100644
index 00000000..27411941
--- /dev/null
+++ b/src/auth0/management/types/connection_ext_agreed_terms.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionExtAgreedTerms = bool
diff --git a/src/auth0/management/types/connection_ext_assigned_plans.py b/src/auth0/management/types/connection_ext_assigned_plans.py
new file mode 100644
index 00000000..918a6929
--- /dev/null
+++ b/src/auth0/management/types/connection_ext_assigned_plans.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionExtAssignedPlans = bool
diff --git a/src/auth0/management/types/connection_ext_groups.py b/src/auth0/management/types/connection_ext_groups.py
new file mode 100644
index 00000000..1b839534
--- /dev/null
+++ b/src/auth0/management/types/connection_ext_groups.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionExtGroups = bool
diff --git a/src/auth0/management/types/connection_ext_is_suspended.py b/src/auth0/management/types/connection_ext_is_suspended.py
new file mode 100644
index 00000000..99c259b2
--- /dev/null
+++ b/src/auth0/management/types/connection_ext_is_suspended.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionExtIsSuspended = bool
diff --git a/src/auth0/management/types/connection_ext_profile.py b/src/auth0/management/types/connection_ext_profile.py
new file mode 100644
index 00000000..973c380e
--- /dev/null
+++ b/src/auth0/management/types/connection_ext_profile.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionExtProfile = bool
diff --git a/src/auth0/management/types/connection_federated_connections_access_tokens.py b/src/auth0/management/types/connection_federated_connections_access_tokens.py
new file mode 100644
index 00000000..9b86d19b
--- /dev/null
+++ b/src/auth0/management/types/connection_federated_connections_access_tokens.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionFederatedConnectionsAccessTokens(UniversalBaseModel):
+ """
+ Federated Connections Access Tokens
+ """
+
+ active: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables refresh tokens and access tokens collection for federated connections
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_fields_map.py b/src/auth0/management/types/connection_fields_map.py
new file mode 100644
index 00000000..e360dfeb
--- /dev/null
+++ b/src/auth0/management/types/connection_fields_map.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionFieldsMap = typing.Dict[str, str]
diff --git a/src/auth0/management/types/connection_for_list.py b/src/auth0/management/types/connection_for_list.py
new file mode 100644
index 00000000..30a66830
--- /dev/null
+++ b/src/auth0/management/types/connection_for_list.py
@@ -0,0 +1,61 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_authentication_purpose import ConnectionAuthenticationPurpose
+from .connection_connected_accounts_purpose import ConnectionConnectedAccountsPurpose
+from .connection_options import ConnectionOptions
+from .connections_metadata import ConnectionsMetadata
+
+
+class ConnectionForList(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="My connection")
+ """
+ The name of the connection
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Connection name used in login screen
+ """
+
+ options: typing.Optional[ConnectionOptions] = None
+ id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ The connection's identifier
+ """
+
+ strategy: typing.Optional[str] = pydantic.Field(default="auth0")
+ """
+ The type of the connection, related to the identity provider
+ """
+
+ realms: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+ """
+
+ is_domain_connection: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the connection is domain level
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD.
+ """
+
+ metadata: typing.Optional[ConnectionsMetadata] = None
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = None
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_for_organization.py b/src/auth0/management/types/connection_for_organization.py
new file mode 100644
index 00000000..a535e7dc
--- /dev/null
+++ b/src/auth0/management/types/connection_for_organization.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionForOrganization(UniversalBaseModel):
+ """
+ Connection to be added to the organization.
+ """
+
+ connection_id: str = pydantic.Field()
+ """
+ ID of the connection.
+ """
+
+ assign_membership_on_login: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+ """
+
+ is_signup_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_freeform_scopes_google_o_auth_2.py b/src/auth0/management/types/connection_freeform_scopes_google_o_auth_2.py
new file mode 100644
index 00000000..6eca5432
--- /dev/null
+++ b/src/auth0/management/types/connection_freeform_scopes_google_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_scope_array import ConnectionScopeArray
+
+ConnectionFreeformScopesGoogleOAuth2 = ConnectionScopeArray
diff --git a/src/auth0/management/types/connection_gateway_authentication.py b/src/auth0/management/types/connection_gateway_authentication.py
new file mode 100644
index 00000000..c9d0a324
--- /dev/null
+++ b/src/auth0/management/types/connection_gateway_authentication.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ConnectionGatewayAuthentication(UniversalBaseModel):
+ """
+ Token-based authentication settings to be applied when connection is using an sms strategy.
+ """
+
+ method: str = pydantic.Field()
+ """
+ The Authorization header type.
+ """
+
+ subject: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The subject to be added to the JWT payload.
+ """
+
+ audience: str = pydantic.Field()
+ """
+ The audience to be added to the JWT payload.
+ """
+
+ secret: str = pydantic.Field()
+ """
+ The secret to be used for signing tokens.
+ """
+
+ secret_base_64_encoded: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="secret_base64_encoded")
+ ] = pydantic.Field(default=None)
+ """
+ Set to true if the provided secret is base64 encoded.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_grant_types_supported.py b/src/auth0/management/types/connection_grant_types_supported.py
new file mode 100644
index 00000000..00f7153e
--- /dev/null
+++ b/src/auth0/management/types/connection_grant_types_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionGrantTypesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_https_url_with_http_fallback.py b/src/auth0/management/types/connection_https_url_with_http_fallback.py
new file mode 100644
index 00000000..51c15f9f
--- /dev/null
+++ b/src/auth0/management/types/connection_https_url_with_http_fallback.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionHttpsUrlWithHttpFallback = str
diff --git a/src/auth0/management/types/connection_icon_url.py b/src/auth0/management/types/connection_icon_url.py
new file mode 100644
index 00000000..09bb0152
--- /dev/null
+++ b/src/auth0/management/types/connection_icon_url.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionIconUrl = str
diff --git a/src/auth0/management/types/connection_icon_url_azure_ad.py b/src/auth0/management/types/connection_icon_url_azure_ad.py
new file mode 100644
index 00000000..965cdf17
--- /dev/null
+++ b/src/auth0/management/types/connection_icon_url_azure_ad.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_icon_url import ConnectionIconUrl
+
+ConnectionIconUrlAzureAd = ConnectionIconUrl
diff --git a/src/auth0/management/types/connection_icon_url_google_o_auth_2.py b/src/auth0/management/types/connection_icon_url_google_o_auth_2.py
new file mode 100644
index 00000000..5b69ee39
--- /dev/null
+++ b/src/auth0/management/types/connection_icon_url_google_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_icon_url import ConnectionIconUrl
+
+ConnectionIconUrlGoogleOAuth2 = ConnectionIconUrl
diff --git a/src/auth0/management/types/connection_id.py b/src/auth0/management/types/connection_id.py
new file mode 100644
index 00000000..1426ca22
--- /dev/null
+++ b/src/auth0/management/types/connection_id.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionId = str
diff --git a/src/auth0/management/types/connection_id_token_encryption_alg_values_supported.py b/src/auth0/management/types/connection_id_token_encryption_alg_values_supported.py
new file mode 100644
index 00000000..9ea5833c
--- /dev/null
+++ b/src/auth0/management/types/connection_id_token_encryption_alg_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionIdTokenEncryptionAlgValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_id_token_encryption_enc_values_supported.py b/src/auth0/management/types/connection_id_token_encryption_enc_values_supported.py
new file mode 100644
index 00000000..179633ce
--- /dev/null
+++ b/src/auth0/management/types/connection_id_token_encryption_enc_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionIdTokenEncryptionEncValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_id_token_signed_response_alg_enum.py b/src/auth0/management/types/connection_id_token_signed_response_alg_enum.py
new file mode 100644
index 00000000..eb7f3015
--- /dev/null
+++ b/src/auth0/management/types/connection_id_token_signed_response_alg_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionIdTokenSignedResponseAlgEnum = typing.Union[typing.Literal["RS256", "RS512", "PS256", "ES256"], typing.Any]
diff --git a/src/auth0/management/types/connection_id_token_signed_response_algs.py b/src/auth0/management/types/connection_id_token_signed_response_algs.py
new file mode 100644
index 00000000..3f0380b4
--- /dev/null
+++ b/src/auth0/management/types/connection_id_token_signed_response_algs.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .connection_id_token_signed_response_alg_enum import ConnectionIdTokenSignedResponseAlgEnum
+
+ConnectionIdTokenSignedResponseAlgs = typing.Optional[typing.List[ConnectionIdTokenSignedResponseAlgEnum]]
diff --git a/src/auth0/management/types/connection_id_token_signing_alg_values_supported.py b/src/auth0/management/types/connection_id_token_signing_alg_values_supported.py
new file mode 100644
index 00000000..e9b546c7
--- /dev/null
+++ b/src/auth0/management/types/connection_id_token_signing_alg_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionIdTokenSigningAlgValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_identifier_precedence.py b/src/auth0/management/types/connection_identifier_precedence.py
new file mode 100644
index 00000000..f6ef507f
--- /dev/null
+++ b/src/auth0/management/types/connection_identifier_precedence.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .connection_identifier_precedence_enum import ConnectionIdentifierPrecedenceEnum
+
+ConnectionIdentifierPrecedence = typing.List[ConnectionIdentifierPrecedenceEnum]
diff --git a/src/auth0/management/types/connection_identifier_precedence_enum.py b/src/auth0/management/types/connection_identifier_precedence_enum.py
new file mode 100644
index 00000000..68a45fa3
--- /dev/null
+++ b/src/auth0/management/types/connection_identifier_precedence_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionIdentifierPrecedenceEnum = typing.Union[typing.Literal["email", "phone_number", "username"], typing.Any]
diff --git a/src/auth0/management/types/connection_identity_api_azure_ad.py b/src/auth0/management/types/connection_identity_api_azure_ad.py
new file mode 100644
index 00000000..204965ce
--- /dev/null
+++ b/src/auth0/management/types/connection_identity_api_azure_ad.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_identity_api_enum_azure_ad import ConnectionIdentityApiEnumAzureAd
+
+ConnectionIdentityApiAzureAd = ConnectionIdentityApiEnumAzureAd
diff --git a/src/auth0/management/types/connection_identity_api_enum_azure_ad.py b/src/auth0/management/types/connection_identity_api_enum_azure_ad.py
new file mode 100644
index 00000000..fc9556d4
--- /dev/null
+++ b/src/auth0/management/types/connection_identity_api_enum_azure_ad.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionIdentityApiEnumAzureAd = typing.Union[
+ typing.Literal["microsoft-identity-platform-v2.0", "azure-active-directory-v1.0"], typing.Any
+]
diff --git a/src/auth0/management/types/connection_identity_provider_enum.py b/src/auth0/management/types/connection_identity_provider_enum.py
new file mode 100644
index 00000000..72bfb436
--- /dev/null
+++ b/src/auth0/management/types/connection_identity_provider_enum.py
@@ -0,0 +1,71 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionIdentityProviderEnum = typing.Union[
+ typing.Literal[
+ "ad",
+ "adfs",
+ "amazon",
+ "apple",
+ "dropbox",
+ "bitbucket",
+ "aol",
+ "auth0-oidc",
+ "auth0",
+ "baidu",
+ "bitly",
+ "box",
+ "custom",
+ "daccount",
+ "dwolla",
+ "email",
+ "evernote-sandbox",
+ "evernote",
+ "exact",
+ "facebook",
+ "fitbit",
+ "flickr",
+ "github",
+ "google-apps",
+ "google-oauth2",
+ "instagram",
+ "ip",
+ "line",
+ "linkedin",
+ "miicard",
+ "oauth1",
+ "oauth2",
+ "office365",
+ "oidc",
+ "okta",
+ "paypal",
+ "paypal-sandbox",
+ "pingfederate",
+ "planningcenter",
+ "renren",
+ "salesforce-community",
+ "salesforce-sandbox",
+ "salesforce",
+ "samlp",
+ "sharepoint",
+ "shopify",
+ "shop",
+ "sms",
+ "soundcloud",
+ "thecity-sandbox",
+ "thecity",
+ "thirtysevensignals",
+ "twitter",
+ "untappd",
+ "vkontakte",
+ "waad",
+ "weibo",
+ "windowslive",
+ "wordpress",
+ "yahoo",
+ "yammer",
+ "yandex",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/connection_import_mode.py b/src/auth0/management/types/connection_import_mode.py
new file mode 100644
index 00000000..a36797e7
--- /dev/null
+++ b/src/auth0/management/types/connection_import_mode.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionImportMode = bool
diff --git a/src/auth0/management/types/connection_is_domain_connection.py b/src/auth0/management/types/connection_is_domain_connection.py
new file mode 100644
index 00000000..80f5203e
--- /dev/null
+++ b/src/auth0/management/types/connection_is_domain_connection.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionIsDomainConnection = bool
diff --git a/src/auth0/management/types/connection_issuer.py b/src/auth0/management/types/connection_issuer.py
new file mode 100644
index 00000000..09098ab4
--- /dev/null
+++ b/src/auth0/management/types/connection_issuer.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_https_url_with_http_fallback import ConnectionHttpsUrlWithHttpFallback
+
+ConnectionIssuer = ConnectionHttpsUrlWithHttpFallback
diff --git a/src/auth0/management/types/connection_jwks_uri.py b/src/auth0/management/types/connection_jwks_uri.py
new file mode 100644
index 00000000..670c8448
--- /dev/null
+++ b/src/auth0/management/types/connection_jwks_uri.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_https_url_with_http_fallback import ConnectionHttpsUrlWithHttpFallback
+
+ConnectionJwksUri = ConnectionHttpsUrlWithHttpFallback
diff --git a/src/auth0/management/types/connection_key.py b/src/auth0/management/types/connection_key.py
new file mode 100644
index 00000000..645966f7
--- /dev/null
+++ b/src/auth0/management/types/connection_key.py
@@ -0,0 +1,75 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_key_use_enum import ConnectionKeyUseEnum
+
+
+class ConnectionKey(UniversalBaseModel):
+ kid: str = pydantic.Field()
+ """
+ The key id of the signing key
+ """
+
+ cert: str = pydantic.Field(
+ default="-----BEGIN CERTIFICATE-----\r\nMIIDDTCCA...YiA0TQhAt8=\r\n-----END CERTIFICATE-----"
+ )
+ """
+ The public certificate of the signing key
+ """
+
+ pkcs: typing.Optional[str] = pydantic.Field(
+ default="-----BEGIN PKCS7-----\r\nMIIDPA....t8xAA==\r\n-----END PKCS7-----"
+ )
+ """
+ The public certificate of the signing key in pkcs7 format
+ """
+
+ current: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ True if the key is the the current key
+ """
+
+ next: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the key is the the next key
+ """
+
+ previous: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the key is the the previous key
+ """
+
+ current_since: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The date and time when the key became the current key
+ """
+
+ fingerprint: str = pydantic.Field(default="CC:FB:DD:D8:9A:B5:DE:1B:F0:CC:36:D2:99:59:21:12:03:DD:A8:25")
+ """
+ The cert fingerprint
+ """
+
+ thumbprint: str = pydantic.Field(default="CCFBDDD89AB5DE1BF0CC36D29959211203DDA825")
+ """
+ The cert thumbprint
+ """
+
+ algorithm: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Signing key algorithm
+ """
+
+ key_use: typing.Optional[ConnectionKeyUseEnum] = None
+ subject_dn: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_key_use_enum.py b/src/auth0/management/types/connection_key_use_enum.py
new file mode 100644
index 00000000..4b05d4a9
--- /dev/null
+++ b/src/auth0/management/types/connection_key_use_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionKeyUseEnum = typing.Union[typing.Literal["encryption", "signing"], typing.Any]
diff --git a/src/auth0/management/types/connection_mapping_mode_enum_oidc.py b/src/auth0/management/types/connection_mapping_mode_enum_oidc.py
new file mode 100644
index 00000000..7bf5e40f
--- /dev/null
+++ b/src/auth0/management/types/connection_mapping_mode_enum_oidc.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionMappingModeEnumOidc = typing.Union[typing.Literal["bind_all", "use_map"], typing.Any]
diff --git a/src/auth0/management/types/connection_mapping_mode_enum_okta.py b/src/auth0/management/types/connection_mapping_mode_enum_okta.py
new file mode 100644
index 00000000..6ec5f89e
--- /dev/null
+++ b/src/auth0/management/types/connection_mapping_mode_enum_okta.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionMappingModeEnumOkta = typing.Union[typing.Literal["basic_profile", "use_map"], typing.Any]
diff --git a/src/auth0/management/types/connection_max_groups_to_retrieve.py b/src/auth0/management/types/connection_max_groups_to_retrieve.py
new file mode 100644
index 00000000..b6235da0
--- /dev/null
+++ b/src/auth0/management/types/connection_max_groups_to_retrieve.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionMaxGroupsToRetrieve = str
diff --git a/src/auth0/management/types/connection_mfa.py b/src/auth0/management/types/connection_mfa.py
new file mode 100644
index 00000000..d2d573de
--- /dev/null
+++ b/src/auth0/management/types/connection_mfa.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionMfa(UniversalBaseModel):
+ """
+ Multi-factor authentication configuration
+ """
+
+ active: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates whether MFA is active for this connection
+ """
+
+ return_enroll_settings: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates whether to return MFA enrollment settings
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_name.py b/src/auth0/management/types/connection_name.py
new file mode 100644
index 00000000..dae8edd9
--- /dev/null
+++ b/src/auth0/management/types/connection_name.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionName = str
diff --git a/src/auth0/management/types/connection_name_prefix_template.py b/src/auth0/management/types/connection_name_prefix_template.py
new file mode 100644
index 00000000..a1b1350b
--- /dev/null
+++ b/src/auth0/management/types/connection_name_prefix_template.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionNamePrefixTemplate = str
diff --git a/src/auth0/management/types/connection_non_persistent_attrs.py b/src/auth0/management/types/connection_non_persistent_attrs.py
new file mode 100644
index 00000000..afada121
--- /dev/null
+++ b/src/auth0/management/types/connection_non_persistent_attrs.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionNonPersistentAttrs = typing.List[str]
diff --git a/src/auth0/management/types/connection_op_policy_uri.py b/src/auth0/management/types/connection_op_policy_uri.py
new file mode 100644
index 00000000..bddb7b1f
--- /dev/null
+++ b/src/auth0/management/types/connection_op_policy_uri.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_https_url_with_http_fallback import ConnectionHttpsUrlWithHttpFallback
+
+ConnectionOpPolicyUri = ConnectionHttpsUrlWithHttpFallback
diff --git a/src/auth0/management/types/connection_op_tos_uri.py b/src/auth0/management/types/connection_op_tos_uri.py
new file mode 100644
index 00000000..e8cd877d
--- /dev/null
+++ b/src/auth0/management/types/connection_op_tos_uri.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_https_url_with_http_fallback import ConnectionHttpsUrlWithHttpFallback
+
+ConnectionOpTosUri = ConnectionHttpsUrlWithHttpFallback
diff --git a/src/auth0/management/types/connection_options.py b/src/auth0/management/types/connection_options.py
new file mode 100644
index 00000000..c3f270a3
--- /dev/null
+++ b/src/auth0/management/types/connection_options.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptions = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_ad.py b/src/auth0/management/types/connection_options_ad.py
new file mode 100644
index 00000000..c81082ea
--- /dev/null
+++ b/src/auth0/management/types/connection_options_ad.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsAd = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_adfs.py b/src/auth0/management/types/connection_options_adfs.py
new file mode 100644
index 00000000..6a1d0f3a
--- /dev/null
+++ b/src/auth0/management/types/connection_options_adfs.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsAdfs = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_amazon.py b/src/auth0/management/types/connection_options_amazon.py
new file mode 100644
index 00000000..62ca9c51
--- /dev/null
+++ b/src/auth0/management/types/connection_options_amazon.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsAmazon = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_aol.py b/src/auth0/management/types/connection_options_aol.py
new file mode 100644
index 00000000..ef83102b
--- /dev/null
+++ b/src/auth0/management/types/connection_options_aol.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsAol = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_apple.py b/src/auth0/management/types/connection_options_apple.py
new file mode 100644
index 00000000..0946af79
--- /dev/null
+++ b/src/auth0/management/types/connection_options_apple.py
@@ -0,0 +1,67 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_common import ConnectionOptionsCommon
+from .connection_set_user_root_attributes_enum import ConnectionSetUserRootAttributesEnum
+from .connection_upstream_params import ConnectionUpstreamParams
+
+
+class ConnectionOptionsApple(ConnectionOptionsCommon):
+ """
+ Options for the 'apple' connection
+ """
+
+ app_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Apple App Secret (must be a PEM)
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Apple Services ID
+ """
+
+ email: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ User has the option to obfuscate the email with Apple's relay service
+ """
+
+ freeform_scopes: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Array of freeform scopes
+ """
+
+ kid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Apple Key ID
+ """
+
+ name: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether to request name from Apple
+ """
+
+ scope: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Space separated list of scopes
+ """
+
+ set_user_root_attributes: typing.Optional[ConnectionSetUserRootAttributesEnum] = None
+ team_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Apple Team ID
+ """
+
+ upstream_params: typing.Optional[ConnectionUpstreamParams] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_auth_0.py b/src/auth0/management/types/connection_options_auth_0.py
new file mode 100644
index 00000000..bf5a1ab8
--- /dev/null
+++ b/src/auth0/management/types/connection_options_auth_0.py
@@ -0,0 +1,73 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from ..core.serialization import FieldMetadata
+from .connection_attributes import ConnectionAttributes
+from .connection_authentication_methods import ConnectionAuthenticationMethods
+from .connection_brute_force_protection import ConnectionBruteForceProtection
+from .connection_configuration import ConnectionConfiguration
+from .connection_custom_scripts import ConnectionCustomScripts
+from .connection_disable_self_service_change_password import ConnectionDisableSelfServiceChangePassword
+from .connection_disable_signup import ConnectionDisableSignup
+from .connection_enable_script_context import ConnectionEnableScriptContext
+from .connection_enabled_database_customization import ConnectionEnabledDatabaseCustomization
+from .connection_identifier_precedence import ConnectionIdentifierPrecedence
+from .connection_import_mode import ConnectionImportMode
+from .connection_mfa import ConnectionMfa
+from .connection_options_common import ConnectionOptionsCommon
+from .connection_passkey_options import ConnectionPasskeyOptions
+from .connection_password_complexity_options import ConnectionPasswordComplexityOptions
+from .connection_password_dictionary_options import ConnectionPasswordDictionaryOptions
+from .connection_password_history_options import ConnectionPasswordHistoryOptions
+from .connection_password_no_personal_info_options import ConnectionPasswordNoPersonalInfoOptions
+from .connection_password_policy_enum import ConnectionPasswordPolicyEnum
+from .connection_realm_fallback import ConnectionRealmFallback
+from .connection_requires_username import ConnectionRequiresUsername
+from .connection_validation_options import ConnectionValidationOptions
+
+
+class ConnectionOptionsAuth0(ConnectionOptionsCommon):
+ """
+ Options for the 'auth0' connection
+ """
+
+ attributes: typing.Optional[ConnectionAttributes] = None
+ authentication_methods: typing.Optional[ConnectionAuthenticationMethods] = None
+ brute_force_protection: typing.Optional[ConnectionBruteForceProtection] = None
+ configuration: typing.Optional[ConnectionConfiguration] = None
+ custom_scripts: typing_extensions.Annotated[
+ typing.Optional[ConnectionCustomScripts], FieldMetadata(alias="customScripts")
+ ] = None
+ disable_self_service_change_password: typing.Optional[ConnectionDisableSelfServiceChangePassword] = None
+ disable_signup: typing.Optional[ConnectionDisableSignup] = None
+ enable_script_context: typing.Optional[ConnectionEnableScriptContext] = None
+ enabled_database_customization: typing_extensions.Annotated[
+ typing.Optional[ConnectionEnabledDatabaseCustomization], FieldMetadata(alias="enabledDatabaseCustomization")
+ ] = None
+ import_mode: typing.Optional[ConnectionImportMode] = None
+ mfa: typing.Optional[ConnectionMfa] = None
+ passkey_options: typing.Optional[ConnectionPasskeyOptions] = None
+ password_policy: typing_extensions.Annotated[
+ typing.Optional[ConnectionPasswordPolicyEnum], FieldMetadata(alias="passwordPolicy")
+ ] = None
+ password_complexity_options: typing.Optional[ConnectionPasswordComplexityOptions] = None
+ password_dictionary: typing.Optional[ConnectionPasswordDictionaryOptions] = None
+ password_history: typing.Optional[ConnectionPasswordHistoryOptions] = None
+ password_no_personal_info: typing.Optional[ConnectionPasswordNoPersonalInfoOptions] = None
+ precedence: typing.Optional[ConnectionIdentifierPrecedence] = None
+ realm_fallback: typing.Optional[ConnectionRealmFallback] = None
+ requires_username: typing.Optional[ConnectionRequiresUsername] = None
+ validation: typing.Optional[ConnectionValidationOptions] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_auth_0_oidc.py b/src/auth0/management/types/connection_options_auth_0_oidc.py
new file mode 100644
index 00000000..472b2e3d
--- /dev/null
+++ b/src/auth0/management/types/connection_options_auth_0_oidc.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsAuth0Oidc = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_azure_ad.py b/src/auth0/management/types/connection_options_azure_ad.py
new file mode 100644
index 00000000..13e08a73
--- /dev/null
+++ b/src/auth0/management/types/connection_options_azure_ad.py
@@ -0,0 +1,294 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from ..core.serialization import FieldMetadata
+from .connection_app_domain_azure_ad import ConnectionAppDomainAzureAd
+from .connection_client_id_azure_ad import ConnectionClientIdAzureAd
+from .connection_client_secret_azure_ad import ConnectionClientSecretAzureAd
+from .connection_domain_aliases_azure_ad import ConnectionDomainAliasesAzureAd
+from .connection_ext_admin import ConnectionExtAdmin
+from .connection_ext_agreed_terms import ConnectionExtAgreedTerms
+from .connection_ext_assigned_plans import ConnectionExtAssignedPlans
+from .connection_ext_groups import ConnectionExtGroups
+from .connection_ext_is_suspended import ConnectionExtIsSuspended
+from .connection_ext_profile import ConnectionExtProfile
+from .connection_federated_connections_access_tokens import ConnectionFederatedConnectionsAccessTokens
+from .connection_icon_url_azure_ad import ConnectionIconUrlAzureAd
+from .connection_identity_api_azure_ad import ConnectionIdentityApiAzureAd
+from .connection_max_groups_to_retrieve import ConnectionMaxGroupsToRetrieve
+from .connection_options_common import ConnectionOptionsCommon
+from .connection_scope_azure_ad import ConnectionScopeAzureAd
+from .connection_set_user_root_attributes_enum import ConnectionSetUserRootAttributesEnum
+from .connection_should_trust_email_verified_connection_enum import ConnectionShouldTrustEmailVerifiedConnectionEnum
+from .connection_tenant_domain_azure_ad_one import ConnectionTenantDomainAzureAdOne
+from .connection_tenant_id_azure_ad import ConnectionTenantIdAzureAd
+from .connection_thumbprints import ConnectionThumbprints
+from .connection_upstream_params_azure_ad import ConnectionUpstreamParamsAzureAd
+from .connection_use_common_endpoint_azure_ad import ConnectionUseCommonEndpointAzureAd
+from .connection_userid_attribute_azure_ad import ConnectionUseridAttributeAzureAd
+from .connection_waad_protocol import ConnectionWaadProtocol
+
+
+class ConnectionOptionsAzureAd(ConnectionOptionsCommon):
+ """
+ Options for the 'waad' connection
+ """
+
+ api_enable_users: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enable users API
+ """
+
+ app_domain: typing.Optional[ConnectionAppDomainAzureAd] = None
+ app_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The Application ID URI (App ID URI) for the Azure AD application. Required when using Azure AD v1 with the Resource Owner Password flow. Used to identify the resource being requested in OAuth token requests.
+ """
+
+ basic_profile: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Includes basic user profile information from Azure AD (name, email, given_name, family_name). Always enabled and required - represents the minimum profile data retrieved during authentication.
+ """
+
+ client_id: typing.Optional[ConnectionClientIdAzureAd] = None
+ client_secret: typing.Optional[ConnectionClientSecretAzureAd] = None
+ domain_aliases: typing.Optional[ConnectionDomainAliasesAzureAd] = None
+ ext_access_token: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's Azure AD access token in the Auth0 user profile. When true (default), the access token is persisted for API access.
+ """
+
+ ext_account_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing whether the user's Azure AD account is enabled. When true (default), the account enabled status is persisted in the user profile.
+ """
+
+ ext_admin: typing.Optional[ConnectionExtAdmin] = None
+ ext_agreed_terms: typing.Optional[ConnectionExtAgreedTerms] = None
+ ext_assigned_licenses: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the list of Microsoft 365/Office 365 licenses assigned to the user. When true (default), license information is persisted in the user profile.
+ """
+
+ ext_assigned_plans: typing.Optional[ConnectionExtAssignedPlans] = None
+ ext_azure_id: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's Azure ID identifier. When true (default), the Azure ID is persisted. Note: 'oid' (Object ID) is the recommended unique identifier for single-tenant connections.
+ """
+
+ ext_city: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's city from Azure AD. When true (default), city information is persisted in the user profile.
+ """
+
+ ext_country: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's country from Azure AD. When true (default), country information is persisted in the user profile.
+ """
+
+ ext_department: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's department from Azure AD. When true (default), department information is persisted in the user profile.
+ """
+
+ ext_dir_sync_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing whether directory synchronization is enabled for the user. When true (default), directory sync status is persisted in the user profile.
+ """
+
+ ext_email: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's email address from Azure AD. When true (default), email is persisted in the user profile.
+ """
+
+ ext_expires_in: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the token expiration time (in seconds). When true (default), expiration information is persisted in the user profile.
+ """
+
+ ext_family_name: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's family name (last name) from Azure AD. When true (default), family name is persisted in the user profile.
+ """
+
+ ext_fax: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's fax number from Azure AD. When true (default), fax information is persisted in the user profile.
+ """
+
+ ext_given_name: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's given name (first name) from Azure AD. When true (default), given name is persisted in the user profile.
+ """
+
+ ext_group_ids: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the list of Azure AD group IDs the user is a member of. When true (default), group membership IDs are persisted. See ext_groups for retrieving group details.
+ """
+
+ ext_groups: typing.Optional[ConnectionExtGroups] = None
+ ext_is_suspended: typing.Optional[ConnectionExtIsSuspended] = None
+ ext_job_title: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's job title from Azure AD. When true (default), job title information is persisted in the user profile.
+ """
+
+ ext_last_sync: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the timestamp of the last directory synchronization. When true (default), the last sync date is persisted in the user profile.
+ """
+
+ ext_mobile: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's mobile phone number from Azure AD. When true (default), mobile number is persisted in the user profile.
+ """
+
+ ext_name: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's full name from Azure AD. When true (default), full name is persisted in the user profile.
+ """
+
+ ext_nested_groups: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ When true, stores all groups the user is member of, including transitive group memberships (groups within groups). When false (default), only direct group memberships are included.
+ """
+
+ ext_nickname: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's nickname or display name from Azure AD. When true (default), nickname is persisted in the user profile.
+ """
+
+ ext_oid: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's Object ID (oid) from Azure AD. When true (default), the oid is persisted. Note: 'oid' is the recommended unique identifier for single-tenant connections and required for SCIM.
+ """
+
+ ext_phone: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's phone number from Azure AD. When true (default), phone number is persisted in the user profile.
+ """
+
+ ext_physical_delivery_office_name: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's office location from Azure AD. When true (default), office location is persisted in the user profile.
+ """
+
+ ext_postal_code: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's postal code from Azure AD. When true (default), postal code is persisted in the user profile.
+ """
+
+ ext_preferred_language: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's preferred language from Azure AD. When true (default), language preference is persisted in the user profile.
+ """
+
+ ext_profile: typing.Optional[ConnectionExtProfile] = None
+ ext_provisioned_plans: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the list of service plans provisioned to the user. When true (default), provisioned plans are persisted in the user profile.
+ """
+
+ ext_provisioning_errors: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing provisioning errors that occurred during synchronization. When true (default), error information is persisted. Useful for troubleshooting sync issues.
+ """
+
+ ext_proxy_addresses: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing all proxy email addresses (email aliases) for the user. When true (default), proxy addresses are persisted in the user profile.
+ """
+
+ ext_puid: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's Passport User ID (puid). When true (default), puid is persisted in the user profile. Legacy attribute.
+ """
+
+ ext_refresh_token: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the Azure AD refresh token. When true (default), the refresh token is persisted for offline access. Required for token refresh in long-lived applications.
+ """
+
+ ext_roles: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing Azure AD application roles assigned to the user. When true (default), role information is persisted. Useful for RBAC in applications.
+ """
+
+ ext_state: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's state (province/region) from Azure AD. When true (default), state information is persisted in the user profile.
+ """
+
+ ext_street: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's street address from Azure AD. When true (default), street address is persisted in the user profile.
+ """
+
+ ext_telephone_number: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="ext_telephoneNumber")
+ ] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's telephone number from Azure AD. When true (default), telephone number is persisted in the user profile.
+ """
+
+ ext_tenantid: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's Azure AD tenant ID. When true (default), tenant ID is persisted. Useful for identifying which Azure AD organization the user belongs to.
+ """
+
+ ext_upn: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's User Principal Name (UPN) from Azure AD. When true (default), UPN is persisted. UPN is the user's logon name (e.g., user@contoso.com).
+ """
+
+ ext_usage_location: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing the user's usage location for license assignment. When true (default), usage location is persisted in the user profile.
+ """
+
+ ext_user_id: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When false, prevents storing an alternative user ID. When true (default), this user ID is persisted in the user profile.
+ """
+
+ federated_connections_access_tokens: typing.Optional[ConnectionFederatedConnectionsAccessTokens] = None
+ granted: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates whether admin consent has been granted for the required Azure AD permissions. Read-only status field managed by Auth0 during the OAuth authorization flow.
+ """
+
+ icon_url: typing.Optional[ConnectionIconUrlAzureAd] = None
+ identity_api: typing.Optional[ConnectionIdentityApiAzureAd] = None
+ max_groups_to_retrieve: typing.Optional[ConnectionMaxGroupsToRetrieve] = None
+ scope: typing.Optional[ConnectionScopeAzureAd] = None
+ set_user_root_attributes: typing.Optional[ConnectionSetUserRootAttributesEnum] = None
+ should_trust_email_verified_connection: typing.Optional[ConnectionShouldTrustEmailVerifiedConnectionEnum] = None
+ tenant_domain: typing.Optional[ConnectionTenantDomainAzureAdOne] = None
+ tenant_id: typing_extensions.Annotated[
+ typing.Optional[ConnectionTenantIdAzureAd], FieldMetadata(alias="tenantId")
+ ] = None
+ thumbprints: typing.Optional[ConnectionThumbprints] = None
+ upstream_params: typing.Optional[ConnectionUpstreamParamsAzureAd] = None
+ use_wsfed: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates WS-Federation protocol usage. When true, uses WS-Federation; when false, uses OpenID Connect.
+ """
+
+ use_common_endpoint: typing_extensions.Annotated[
+ typing.Optional[ConnectionUseCommonEndpointAzureAd], FieldMetadata(alias="useCommonEndpoint")
+ ] = None
+ userid_attribute: typing.Optional[ConnectionUseridAttributeAzureAd] = None
+ waad_protocol: typing.Optional[ConnectionWaadProtocol] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_baidu.py b/src/auth0/management/types/connection_options_baidu.py
new file mode 100644
index 00000000..1137d5ec
--- /dev/null
+++ b/src/auth0/management/types/connection_options_baidu.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsBaidu = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_bitbucket.py b/src/auth0/management/types/connection_options_bitbucket.py
new file mode 100644
index 00000000..77a4174f
--- /dev/null
+++ b/src/auth0/management/types/connection_options_bitbucket.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsBitbucket = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_bitly.py b/src/auth0/management/types/connection_options_bitly.py
new file mode 100644
index 00000000..b83b3c59
--- /dev/null
+++ b/src/auth0/management/types/connection_options_bitly.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsBitly = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_box.py b/src/auth0/management/types/connection_options_box.py
new file mode 100644
index 00000000..443e98f5
--- /dev/null
+++ b/src/auth0/management/types/connection_options_box.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsBox = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_common.py b/src/auth0/management/types/connection_options_common.py
new file mode 100644
index 00000000..4f4f7f76
--- /dev/null
+++ b/src/auth0/management/types/connection_options_common.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_non_persistent_attrs import ConnectionNonPersistentAttrs
+
+
+class ConnectionOptionsCommon(UniversalBaseModel):
+ """
+ Common attributes for connection options including non-persistent attributes and cross-app access
+ """
+
+ non_persistent_attrs: typing.Optional[ConnectionNonPersistentAttrs] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_common_oidc.py b/src/auth0/management/types/connection_options_common_oidc.py
new file mode 100644
index 00000000..414e6337
--- /dev/null
+++ b/src/auth0/management/types/connection_options_common_oidc.py
@@ -0,0 +1,62 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_authorization_endpoint import ConnectionAuthorizationEndpoint
+from .connection_client_id_oidc import ConnectionClientIdOidc
+from .connection_client_secret_oidc import ConnectionClientSecretOidc
+from .connection_connection_settings import ConnectionConnectionSettings
+from .connection_domain_aliases_one import ConnectionDomainAliasesOne
+from .connection_federated_connections_access_tokens import ConnectionFederatedConnectionsAccessTokens
+from .connection_icon_url import ConnectionIconUrl
+from .connection_id_token_signed_response_algs import ConnectionIdTokenSignedResponseAlgs
+from .connection_issuer import ConnectionIssuer
+from .connection_jwks_uri import ConnectionJwksUri
+from .connection_options_oidc_metadata import ConnectionOptionsOidcMetadata
+from .connection_scope_oidc import ConnectionScopeOidc
+from .connection_send_back_channel_nonce import ConnectionSendBackChannelNonce
+from .connection_set_user_root_attributes_enum import ConnectionSetUserRootAttributesEnum
+from .connection_tenant_domain import ConnectionTenantDomain
+from .connection_token_endpoint_auth_method_enum import ConnectionTokenEndpointAuthMethodEnum
+from .connection_token_endpoint_auth_signing_alg_enum import ConnectionTokenEndpointAuthSigningAlgEnum
+from .connection_token_endpoint_oidc import ConnectionTokenEndpointOidc
+from .connection_upstream_params_oidc import ConnectionUpstreamParamsOidc
+from .connection_userinfo_endpoint_oidc import ConnectionUserinfoEndpointOidc
+
+
+class ConnectionOptionsCommonOidc(UniversalBaseModel):
+ """
+ common options for OIDC connections
+ """
+
+ authorization_endpoint: typing.Optional[ConnectionAuthorizationEndpoint] = None
+ client_id: ConnectionClientIdOidc
+ client_secret: typing.Optional[ConnectionClientSecretOidc] = None
+ connection_settings: typing.Optional[ConnectionConnectionSettings] = None
+ federated_connections_access_tokens: typing.Optional[ConnectionFederatedConnectionsAccessTokens] = None
+ domain_aliases: typing.Optional[ConnectionDomainAliasesOne] = None
+ icon_url: typing.Optional[ConnectionIconUrl] = None
+ id_token_signed_response_algs: typing.Optional[ConnectionIdTokenSignedResponseAlgs] = None
+ issuer: typing.Optional[ConnectionIssuer] = None
+ jwks_uri: typing.Optional[ConnectionJwksUri] = None
+ oidc_metadata: typing.Optional[ConnectionOptionsOidcMetadata] = None
+ scope: typing.Optional[ConnectionScopeOidc] = None
+ send_back_channel_nonce: typing.Optional[ConnectionSendBackChannelNonce] = None
+ set_user_root_attributes: typing.Optional[ConnectionSetUserRootAttributesEnum] = None
+ tenant_domain: typing.Optional[ConnectionTenantDomain] = None
+ token_endpoint: typing.Optional[ConnectionTokenEndpointOidc] = None
+ token_endpoint_auth_method: typing.Optional[ConnectionTokenEndpointAuthMethodEnum] = None
+ token_endpoint_auth_signing_alg: typing.Optional[ConnectionTokenEndpointAuthSigningAlgEnum] = None
+ upstream_params: typing.Optional[ConnectionUpstreamParamsOidc] = None
+ userinfo_endpoint: typing.Optional[ConnectionUserinfoEndpointOidc] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_custom.py b/src/auth0/management/types/connection_options_custom.py
new file mode 100644
index 00000000..e1f59db5
--- /dev/null
+++ b/src/auth0/management/types/connection_options_custom.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsCustom = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_daccount.py b/src/auth0/management/types/connection_options_daccount.py
new file mode 100644
index 00000000..72af864f
--- /dev/null
+++ b/src/auth0/management/types/connection_options_daccount.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsDaccount = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_dropbox.py b/src/auth0/management/types/connection_options_dropbox.py
new file mode 100644
index 00000000..89c7518e
--- /dev/null
+++ b/src/auth0/management/types/connection_options_dropbox.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsDropbox = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_dwolla.py b/src/auth0/management/types/connection_options_dwolla.py
new file mode 100644
index 00000000..23c2c0e0
--- /dev/null
+++ b/src/auth0/management/types/connection_options_dwolla.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsDwolla = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_email.py b/src/auth0/management/types/connection_options_email.py
new file mode 100644
index 00000000..9cb7a34b
--- /dev/null
+++ b/src/auth0/management/types/connection_options_email.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsEmail = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_evernote.py b/src/auth0/management/types/connection_options_evernote.py
new file mode 100644
index 00000000..16e8a046
--- /dev/null
+++ b/src/auth0/management/types/connection_options_evernote.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_evernote_common import ConnectionOptionsEvernoteCommon
+
+ConnectionOptionsEvernote = ConnectionOptionsEvernoteCommon
diff --git a/src/auth0/management/types/connection_options_evernote_common.py b/src/auth0/management/types/connection_options_evernote_common.py
new file mode 100644
index 00000000..7c84c20c
--- /dev/null
+++ b/src/auth0/management/types/connection_options_evernote_common.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsEvernoteCommon = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_evernote_sandbox.py b/src/auth0/management/types/connection_options_evernote_sandbox.py
new file mode 100644
index 00000000..12cb7ab0
--- /dev/null
+++ b/src/auth0/management/types/connection_options_evernote_sandbox.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_evernote_common import ConnectionOptionsEvernoteCommon
+
+ConnectionOptionsEvernoteSandbox = ConnectionOptionsEvernoteCommon
diff --git a/src/auth0/management/types/connection_options_exact.py b/src/auth0/management/types/connection_options_exact.py
new file mode 100644
index 00000000..3742636a
--- /dev/null
+++ b/src/auth0/management/types/connection_options_exact.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsExact = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_facebook.py b/src/auth0/management/types/connection_options_facebook.py
new file mode 100644
index 00000000..d47f9ceb
--- /dev/null
+++ b/src/auth0/management/types/connection_options_facebook.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsFacebook = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_fitbit.py b/src/auth0/management/types/connection_options_fitbit.py
new file mode 100644
index 00000000..4765954a
--- /dev/null
+++ b/src/auth0/management/types/connection_options_fitbit.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsFitbit = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_flickr.py b/src/auth0/management/types/connection_options_flickr.py
new file mode 100644
index 00000000..17bb1cc5
--- /dev/null
+++ b/src/auth0/management/types/connection_options_flickr.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsFlickr = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_git_hub.py b/src/auth0/management/types/connection_options_git_hub.py
new file mode 100644
index 00000000..88d25e1e
--- /dev/null
+++ b/src/auth0/management/types/connection_options_git_hub.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsGitHub = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_google_apps.py b/src/auth0/management/types/connection_options_google_apps.py
new file mode 100644
index 00000000..db4dfcd3
--- /dev/null
+++ b/src/auth0/management/types/connection_options_google_apps.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsGoogleApps = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_google_o_auth_2.py b/src/auth0/management/types/connection_options_google_o_auth_2.py
new file mode 100644
index 00000000..f993e529
--- /dev/null
+++ b/src/auth0/management/types/connection_options_google_o_auth_2.py
@@ -0,0 +1,363 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_allowed_audiences_google_o_auth_2 import ConnectionAllowedAudiencesGoogleOAuth2
+from .connection_client_id_google_o_auth_2 import ConnectionClientIdGoogleOAuth2
+from .connection_client_secret_google_o_auth_2 import ConnectionClientSecretGoogleOAuth2
+from .connection_freeform_scopes_google_o_auth_2 import ConnectionFreeformScopesGoogleOAuth2
+from .connection_icon_url_google_o_auth_2 import ConnectionIconUrlGoogleOAuth2
+from .connection_options_common import ConnectionOptionsCommon
+from .connection_scope_google_o_auth_2 import ConnectionScopeGoogleOAuth2
+from .connection_set_user_root_attributes_enum import ConnectionSetUserRootAttributesEnum
+from .connection_upstream_params import ConnectionUpstreamParams
+
+
+class ConnectionOptionsGoogleOAuth2(ConnectionOptionsCommon):
+ """
+ Options for the 'google-oauth2' connection
+ """
+
+ adsense_management: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's ad applications, ad units, and channels in AdSense
+ """
+
+ allowed_audiences: typing.Optional[ConnectionAllowedAudiencesGoogleOAuth2] = None
+ analytics: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View user's configuration information and reports
+ """
+
+ blogger: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's posts and blogs on Blogger and Blogger comments
+ """
+
+ calendar: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ See, edit, share, and permanently delete all the calendars you can access using Google Calendar
+ """
+
+ calendar_addons_execute: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Run as a Calendar add-on
+ """
+
+ calendar_events: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and edit events on all your calendars
+ """
+
+ calendar_events_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View events on all your calendars
+ """
+
+ calendar_settings_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View your Calendar settings
+ """
+
+ chrome_web_store: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read access to user's chrome web store
+ """
+
+ client_id: typing.Optional[ConnectionClientIdGoogleOAuth2] = None
+ client_secret: typing.Optional[ConnectionClientSecretGoogleOAuth2] = None
+ contacts: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Full access to the authenticated user's contacts
+ """
+
+ contacts_new: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Full access to the authenticated user's contacts
+ """
+
+ contacts_other_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read-only access to the authenticated user's 'Other contacts'
+ """
+
+ contacts_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read-only access to the authenticated user's contacts
+ """
+
+ content_api_for_shopping: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's products, feeds, and subaccounts
+ """
+
+ coordinate: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Grants read and write access to the Coordinate API
+ """
+
+ coordinate_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Grants read access to the Coordinate API
+ """
+
+ directory_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read-only access to the authenticated user's corporate directory (if applicable)
+ """
+
+ document_list: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Access to Google Docs document list feed
+ """
+
+ drive: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Full access to all files and folders in the user's Google Drive
+ """
+
+ drive_activity: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and add to the activity record of files in your Drive
+ """
+
+ drive_activity_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View the activity record of files in your Drive
+ """
+
+ drive_appdata: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Access to the application's configuration data in the user's Google Drive
+ """
+
+ drive_apps_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View apps authorized to access your Drive
+ """
+
+ drive_file: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Access to files created or opened by the app
+ """
+
+ drive_metadata: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Access to file metadata, including listing files and folders
+ """
+
+ drive_metadata_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read-only access to file metadata
+ """
+
+ drive_photos_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read-only access to the user's Google Photos
+ """
+
+ drive_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read-only access to all files and folders in the user's Google Drive
+ """
+
+ drive_scripts: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Modify the behavior of Google Apps Scripts
+ """
+
+ email: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Email and verified email flag
+ """
+
+ freeform_scopes: typing.Optional[ConnectionFreeformScopesGoogleOAuth2] = None
+ gmail: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Full access to the account's mailboxes, including permanent deletion of threads and messages
+ """
+
+ gmail_compose: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read all resources and their metadata—no write operations
+ """
+
+ gmail_insert: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Insert and import messages only
+ """
+
+ gmail_labels: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Create, read, update, and delete labels only
+ """
+
+ gmail_metadata: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read resources metadata including labels, history records, and email message headers, but not the message body or attachments
+ """
+
+ gmail_modify: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ All read/write operations except immediate, permanent deletion of threads and messages, bypassing Trash
+ """
+
+ gmail_new: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Full access to the account's mailboxes, including permanent deletion of threads and messages
+ """
+
+ gmail_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read all resources and their metadata—no write operations
+ """
+
+ gmail_send: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Send messages only. No read or modify privileges on mailbox
+ """
+
+ gmail_settings_basic: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Manage basic mail settings
+ """
+
+ gmail_settings_sharing: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Manage sensitive mail settings, including forwarding rules and aliases. Note: Operations guarded by this scope are restricted to administrative use only
+ """
+
+ google_affiliate_network: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's publisher data in the Google Affiliate Network
+ """
+
+ google_books: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's books and library in Google Books
+ """
+
+ google_cloud_storage: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's data stored in Google Cloud Storage
+ """
+
+ google_drive: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Full access to all files and folders in the user's Google Drive
+ """
+
+ google_drive_files: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Access to files created or opened by the app
+ """
+
+ google_plus: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Associate user with its public Google profile
+ """
+
+ icon_url: typing.Optional[ConnectionIconUrlGoogleOAuth2] = None
+ latitude_best: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's best-available current location and location history in Google Latitude
+ """
+
+ latitude_city: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's city-level current location and location history in Google Latitude
+ """
+
+ moderator: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's votes, topics, and submissions
+ """
+
+ offline_access: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Request a refresh token when the user authorizes your application
+ """
+
+ orkut: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's friends, applications and profile and status
+ """
+
+ picasa_web: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's Google photos, videos, photo and video tags and comments
+ """
+
+ profile: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Name, public profile URL, photo, country, language, and timezone
+ """
+
+ scope: typing.Optional[ConnectionScopeGoogleOAuth2] = None
+ set_user_root_attributes: typing.Optional[ConnectionSetUserRootAttributesEnum] = None
+ sites: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's sites on Google Sites
+ """
+
+ tasks: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Full access to create, edit, organize, and delete all your tasks
+ """
+
+ tasks_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Read-only access to view your tasks and task lists
+ """
+
+ upstream_params: typing.Optional[ConnectionUpstreamParams] = None
+ url_shortener: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View, manage and view statistics user's short URLs
+ """
+
+ webmaster_tools: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage user's sites and messages, view keywords
+ """
+
+ youtube: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Manage your YouTube account
+ """
+
+ youtube_channelmemberships_creator: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ See a list of your current active channel members, their current level, and when they became a member
+ """
+
+ youtube_new: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Manage your YouTube account
+ """
+
+ youtube_readonly: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View your YouTube account
+ """
+
+ youtube_upload: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Manage your YouTube videos
+ """
+
+ youtubepartner: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ View and manage your assets and associated content on YouTube
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_instagram.py b/src/auth0/management/types/connection_options_instagram.py
new file mode 100644
index 00000000..c505364a
--- /dev/null
+++ b/src/auth0/management/types/connection_options_instagram.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsInstagram = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_ip.py b/src/auth0/management/types/connection_options_ip.py
new file mode 100644
index 00000000..b88f67fc
--- /dev/null
+++ b/src/auth0/management/types/connection_options_ip.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsIp = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_line.py b/src/auth0/management/types/connection_options_line.py
new file mode 100644
index 00000000..82612d84
--- /dev/null
+++ b/src/auth0/management/types/connection_options_line.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsLine = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_linkedin.py b/src/auth0/management/types/connection_options_linkedin.py
new file mode 100644
index 00000000..9c127a13
--- /dev/null
+++ b/src/auth0/management/types/connection_options_linkedin.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsLinkedin = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_miicard.py b/src/auth0/management/types/connection_options_miicard.py
new file mode 100644
index 00000000..f737fe04
--- /dev/null
+++ b/src/auth0/management/types/connection_options_miicard.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsMiicard = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_o_auth_1.py b/src/auth0/management/types/connection_options_o_auth_1.py
new file mode 100644
index 00000000..5fb571cf
--- /dev/null
+++ b/src/auth0/management/types/connection_options_o_auth_1.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsOAuth1 = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_o_auth_2.py b/src/auth0/management/types/connection_options_o_auth_2.py
new file mode 100644
index 00000000..155d1152
--- /dev/null
+++ b/src/auth0/management/types/connection_options_o_auth_2.py
@@ -0,0 +1,78 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from ..core.serialization import FieldMetadata
+from .connection_auth_params_map import ConnectionAuthParamsMap
+from .connection_auth_params_o_auth_2 import ConnectionAuthParamsOAuth2
+from .connection_authorization_endpoint_o_auth_2 import ConnectionAuthorizationEndpointOAuth2
+from .connection_client_id_o_auth_2 import ConnectionClientIdOAuth2
+from .connection_client_secret_o_auth_2 import ConnectionClientSecretOAuth2
+from .connection_custom_headers_o_auth_2 import ConnectionCustomHeadersOAuth2
+from .connection_end_session_endpoint_o_auth_2 import ConnectionEndSessionEndpointOAuth2
+from .connection_fields_map import ConnectionFieldsMap
+from .connection_icon_url import ConnectionIconUrl
+from .connection_options_common import ConnectionOptionsCommon
+from .connection_scope_o_auth_2 import ConnectionScopeOAuth2
+from .connection_scripts_o_auth_2 import ConnectionScriptsOAuth2
+from .connection_set_user_root_attributes_enum import ConnectionSetUserRootAttributesEnum
+from .connection_token_endpoint_o_auth_2 import ConnectionTokenEndpointOAuth2
+from .connection_upstream_params import ConnectionUpstreamParams
+
+
+class ConnectionOptionsOAuth2(ConnectionOptionsCommon):
+ """
+ Options for the 'oauth2' connection
+ """
+
+ auth_params: typing_extensions.Annotated[
+ typing.Optional[ConnectionAuthParamsOAuth2], FieldMetadata(alias="authParams")
+ ] = None
+ auth_params_map: typing_extensions.Annotated[
+ typing.Optional[ConnectionAuthParamsMap], FieldMetadata(alias="authParamsMap")
+ ] = None
+ authorization_url: typing_extensions.Annotated[
+ typing.Optional[ConnectionAuthorizationEndpointOAuth2], FieldMetadata(alias="authorizationURL")
+ ] = None
+ client_id: typing.Optional[ConnectionClientIdOAuth2] = None
+ client_secret: typing.Optional[ConnectionClientSecretOAuth2] = None
+ custom_headers: typing_extensions.Annotated[
+ typing.Optional[ConnectionCustomHeadersOAuth2], FieldMetadata(alias="customHeaders")
+ ] = None
+ fields_map: typing_extensions.Annotated[typing.Optional[ConnectionFieldsMap], FieldMetadata(alias="fieldsMap")] = (
+ None
+ )
+ icon_url: typing.Optional[ConnectionIconUrl] = None
+ logout_url: typing_extensions.Annotated[
+ typing.Optional[ConnectionEndSessionEndpointOAuth2], FieldMetadata(alias="logoutUrl")
+ ] = None
+ pkce_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When true, enables Proof Key for Code Exchange (PKCE) for the authorization code flow. PKCE provides additional security by preventing authorization code interception attacks.
+ """
+
+ scope: typing.Optional[ConnectionScopeOAuth2] = None
+ scripts: typing.Optional[ConnectionScriptsOAuth2] = None
+ set_user_root_attributes: typing.Optional[ConnectionSetUserRootAttributesEnum] = None
+ token_url: typing_extensions.Annotated[
+ typing.Optional[ConnectionTokenEndpointOAuth2], FieldMetadata(alias="tokenURL")
+ ] = None
+ upstream_params: typing.Optional[ConnectionUpstreamParams] = None
+ use_oauth_spec_scope: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="useOauthSpecScope")
+ ] = pydantic.Field(default=None)
+ """
+ When true, uses space-delimited scopes (per OAuth 2.0 spec) instead of comma-delimited when calling the identity provider's authorization endpoint. Only relevant when using the connection_scope parameter. See https://auth0.com/docs/authenticate/identity-providers/adding-scopes-for-an-external-idp#pass-scopes-to-authorize-endpoint
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_o_auth_2_common.py b/src/auth0/management/types/connection_options_o_auth_2_common.py
new file mode 100644
index 00000000..0f24fdc8
--- /dev/null
+++ b/src/auth0/management/types/connection_options_o_auth_2_common.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_client_id import ConnectionClientId
+from .connection_client_secret import ConnectionClientSecret
+from .connection_options_common import ConnectionOptionsCommon
+from .connection_set_user_root_attributes_enum import ConnectionSetUserRootAttributesEnum
+from .connection_upstream_params import ConnectionUpstreamParams
+
+
+class ConnectionOptionsOAuth2Common(ConnectionOptionsCommon):
+ client_id: typing.Optional[ConnectionClientId] = None
+ client_secret: typing.Optional[ConnectionClientSecret] = None
+ upstream_params: typing.Optional[ConnectionUpstreamParams] = None
+ set_user_root_attributes: typing.Optional[ConnectionSetUserRootAttributesEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_office_365.py b/src/auth0/management/types/connection_options_office_365.py
new file mode 100644
index 00000000..5551af46
--- /dev/null
+++ b/src/auth0/management/types/connection_options_office_365.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsOffice365 = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_oidc.py b/src/auth0/management/types/connection_options_oidc.py
new file mode 100644
index 00000000..f7aff7c3
--- /dev/null
+++ b/src/auth0/management/types/connection_options_oidc.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_attribute_map_oidc import ConnectionAttributeMapOidc
+from .connection_discovery_url import ConnectionDiscoveryUrl
+from .connection_options_common import ConnectionOptionsCommon
+from .connection_options_common_oidc import ConnectionOptionsCommonOidc
+from .connection_type_enum_oidc import ConnectionTypeEnumOidc
+
+
+class ConnectionOptionsOidc(ConnectionOptionsCommonOidc, ConnectionOptionsCommon):
+ """
+ Options for the 'oidc' connection
+ """
+
+ attribute_map: typing.Optional[ConnectionAttributeMapOidc] = None
+ discovery_url: typing.Optional[ConnectionDiscoveryUrl] = None
+ type: typing.Optional[ConnectionTypeEnumOidc] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_oidc_metadata.py b/src/auth0/management/types/connection_options_oidc_metadata.py
new file mode 100644
index 00000000..6ac03618
--- /dev/null
+++ b/src/auth0/management/types/connection_options_oidc_metadata.py
@@ -0,0 +1,108 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_acr_values_supported import ConnectionAcrValuesSupported
+from .connection_authorization_endpoint import ConnectionAuthorizationEndpoint
+from .connection_claim_types_supported import ConnectionClaimTypesSupported
+from .connection_claims_locales_supported import ConnectionClaimsLocalesSupported
+from .connection_claims_parameter_supported import ConnectionClaimsParameterSupported
+from .connection_claims_supported import ConnectionClaimsSupported
+from .connection_display_values_supported import ConnectionDisplayValuesSupported
+from .connection_end_session_endpoint import ConnectionEndSessionEndpoint
+from .connection_grant_types_supported import ConnectionGrantTypesSupported
+from .connection_id_token_encryption_alg_values_supported import ConnectionIdTokenEncryptionAlgValuesSupported
+from .connection_id_token_encryption_enc_values_supported import ConnectionIdTokenEncryptionEncValuesSupported
+from .connection_id_token_signing_alg_values_supported import ConnectionIdTokenSigningAlgValuesSupported
+from .connection_issuer import ConnectionIssuer
+from .connection_jwks_uri import ConnectionJwksUri
+from .connection_op_policy_uri import ConnectionOpPolicyUri
+from .connection_op_tos_uri import ConnectionOpTosUri
+from .connection_registration_endpoint import ConnectionRegistrationEndpoint
+from .connection_request_object_encryption_alg_values_supported import (
+ ConnectionRequestObjectEncryptionAlgValuesSupported,
+)
+from .connection_request_object_encryption_enc_values_supported import (
+ ConnectionRequestObjectEncryptionEncValuesSupported,
+)
+from .connection_request_object_signing_alg_values_supported import ConnectionRequestObjectSigningAlgValuesSupported
+from .connection_request_parameter_supported import ConnectionRequestParameterSupported
+from .connection_request_uri_parameter_supported import ConnectionRequestUriParameterSupported
+from .connection_require_request_uri_registration import ConnectionRequireRequestUriRegistration
+from .connection_response_modes_supported import ConnectionResponseModesSupported
+from .connection_response_types_supported import ConnectionResponseTypesSupported
+from .connection_scopes_supported import ConnectionScopesSupported
+from .connection_service_documentation import ConnectionServiceDocumentation
+from .connection_subject_types_supported import ConnectionSubjectTypesSupported
+from .connection_token_endpoint import ConnectionTokenEndpoint
+from .connection_token_endpoint_auth_methods_supported import ConnectionTokenEndpointAuthMethodsSupported
+from .connection_token_endpoint_auth_signing_alg_values_supported import (
+ ConnectionTokenEndpointAuthSigningAlgValuesSupported,
+)
+from .connection_ui_locales_supported import ConnectionUiLocalesSupported
+from .connection_userinfo_encryption_alg_values_supported import ConnectionUserinfoEncryptionAlgValuesSupported
+from .connection_userinfo_encryption_enc_values_supported import ConnectionUserinfoEncryptionEncValuesSupported
+from .connection_userinfo_endpoint import ConnectionUserinfoEndpoint
+from .connection_userinfo_signing_alg_values_supported import ConnectionUserinfoSigningAlgValuesSupported
+
+
+class ConnectionOptionsOidcMetadata(UniversalBaseModel):
+ """
+ OpenID Connect Provider Metadata as per https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata
+ """
+
+ acr_values_supported: typing.Optional[ConnectionAcrValuesSupported] = None
+ authorization_endpoint: ConnectionAuthorizationEndpoint
+ claim_types_supported: typing.Optional[ConnectionClaimTypesSupported] = None
+ claims_locales_supported: typing.Optional[ConnectionClaimsLocalesSupported] = None
+ claims_parameter_supported: typing.Optional[ConnectionClaimsParameterSupported] = None
+ claims_supported: typing.Optional[ConnectionClaimsSupported] = None
+ display_values_supported: typing.Optional[ConnectionDisplayValuesSupported] = None
+ end_session_endpoint: typing.Optional[ConnectionEndSessionEndpoint] = None
+ grant_types_supported: typing.Optional[ConnectionGrantTypesSupported] = None
+ id_token_encryption_alg_values_supported: typing.Optional[ConnectionIdTokenEncryptionAlgValuesSupported] = None
+ id_token_encryption_enc_values_supported: typing.Optional[ConnectionIdTokenEncryptionEncValuesSupported] = None
+ id_token_signing_alg_values_supported: ConnectionIdTokenSigningAlgValuesSupported
+ issuer: ConnectionIssuer
+ jwks_uri: ConnectionJwksUri
+ op_policy_uri: typing.Optional[ConnectionOpPolicyUri] = None
+ op_tos_uri: typing.Optional[ConnectionOpTosUri] = None
+ registration_endpoint: typing.Optional[ConnectionRegistrationEndpoint] = None
+ request_object_encryption_alg_values_supported: typing.Optional[
+ ConnectionRequestObjectEncryptionAlgValuesSupported
+ ] = None
+ request_object_encryption_enc_values_supported: typing.Optional[
+ ConnectionRequestObjectEncryptionEncValuesSupported
+ ] = None
+ request_object_signing_alg_values_supported: typing.Optional[ConnectionRequestObjectSigningAlgValuesSupported] = (
+ None
+ )
+ request_parameter_supported: typing.Optional[ConnectionRequestParameterSupported] = None
+ request_uri_parameter_supported: typing.Optional[ConnectionRequestUriParameterSupported] = None
+ require_request_uri_registration: typing.Optional[ConnectionRequireRequestUriRegistration] = None
+ response_modes_supported: typing.Optional[ConnectionResponseModesSupported] = None
+ response_types_supported: typing.Optional[ConnectionResponseTypesSupported] = None
+ scopes_supported: typing.Optional[ConnectionScopesSupported] = None
+ service_documentation: typing.Optional[ConnectionServiceDocumentation] = None
+ subject_types_supported: typing.Optional[ConnectionSubjectTypesSupported] = None
+ token_endpoint: typing.Optional[ConnectionTokenEndpoint] = None
+ token_endpoint_auth_methods_supported: typing.Optional[ConnectionTokenEndpointAuthMethodsSupported] = None
+ token_endpoint_auth_signing_alg_values_supported: typing.Optional[
+ ConnectionTokenEndpointAuthSigningAlgValuesSupported
+ ] = None
+ ui_locales_supported: typing.Optional[ConnectionUiLocalesSupported] = None
+ userinfo_encryption_alg_values_supported: typing.Optional[ConnectionUserinfoEncryptionAlgValuesSupported] = None
+ userinfo_encryption_enc_values_supported: typing.Optional[ConnectionUserinfoEncryptionEncValuesSupported] = None
+ userinfo_endpoint: typing.Optional[ConnectionUserinfoEndpoint] = None
+ userinfo_signing_alg_values_supported: typing.Optional[ConnectionUserinfoSigningAlgValuesSupported] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_okta.py b/src/auth0/management/types/connection_options_okta.py
new file mode 100644
index 00000000..c57145e7
--- /dev/null
+++ b/src/auth0/management/types/connection_options_okta.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_attribute_map_okta import ConnectionAttributeMapOkta
+from .connection_domain_okta import ConnectionDomainOkta
+from .connection_options_common import ConnectionOptionsCommon
+from .connection_options_common_oidc import ConnectionOptionsCommonOidc
+from .connection_type_enum_okta import ConnectionTypeEnumOkta
+
+
+class ConnectionOptionsOkta(ConnectionOptionsCommonOidc, ConnectionOptionsCommon):
+ """
+ Options for the 'okta' connection
+ """
+
+ attribute_map: typing.Optional[ConnectionAttributeMapOkta] = None
+ domain: typing.Optional[ConnectionDomainOkta] = None
+ type: typing.Optional[ConnectionTypeEnumOkta] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_options_paypal.py b/src/auth0/management/types/connection_options_paypal.py
new file mode 100644
index 00000000..ab35df82
--- /dev/null
+++ b/src/auth0/management/types/connection_options_paypal.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsPaypal = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_paypal_sandbox.py b/src/auth0/management/types/connection_options_paypal_sandbox.py
new file mode 100644
index 00000000..b1929c29
--- /dev/null
+++ b/src/auth0/management/types/connection_options_paypal_sandbox.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsPaypalSandbox = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_ping_federate.py b/src/auth0/management/types/connection_options_ping_federate.py
new file mode 100644
index 00000000..9848f836
--- /dev/null
+++ b/src/auth0/management/types/connection_options_ping_federate.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsPingFederate = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_planning_center.py b/src/auth0/management/types/connection_options_planning_center.py
new file mode 100644
index 00000000..0789d5dd
--- /dev/null
+++ b/src/auth0/management/types/connection_options_planning_center.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsPlanningCenter = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_renren.py b/src/auth0/management/types/connection_options_renren.py
new file mode 100644
index 00000000..3af34aa0
--- /dev/null
+++ b/src/auth0/management/types/connection_options_renren.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsRenren = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_salesforce.py b/src/auth0/management/types/connection_options_salesforce.py
new file mode 100644
index 00000000..dadb389f
--- /dev/null
+++ b/src/auth0/management/types/connection_options_salesforce.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_salesforce_common import ConnectionOptionsSalesforceCommon
+
+ConnectionOptionsSalesforce = ConnectionOptionsSalesforceCommon
diff --git a/src/auth0/management/types/connection_options_salesforce_common.py b/src/auth0/management/types/connection_options_salesforce_common.py
new file mode 100644
index 00000000..ecad25f5
--- /dev/null
+++ b/src/auth0/management/types/connection_options_salesforce_common.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsSalesforceCommon = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_salesforce_community.py b/src/auth0/management/types/connection_options_salesforce_community.py
new file mode 100644
index 00000000..a564648a
--- /dev/null
+++ b/src/auth0/management/types/connection_options_salesforce_community.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_salesforce_common import ConnectionOptionsSalesforceCommon
+
+ConnectionOptionsSalesforceCommunity = ConnectionOptionsSalesforceCommon
diff --git a/src/auth0/management/types/connection_options_salesforce_sandbox.py b/src/auth0/management/types/connection_options_salesforce_sandbox.py
new file mode 100644
index 00000000..e161c2f6
--- /dev/null
+++ b/src/auth0/management/types/connection_options_salesforce_sandbox.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_salesforce_common import ConnectionOptionsSalesforceCommon
+
+ConnectionOptionsSalesforceSandbox = ConnectionOptionsSalesforceCommon
diff --git a/src/auth0/management/types/connection_options_saml.py b/src/auth0/management/types/connection_options_saml.py
new file mode 100644
index 00000000..d560c7bf
--- /dev/null
+++ b/src/auth0/management/types/connection_options_saml.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsSaml = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_sharepoint.py b/src/auth0/management/types/connection_options_sharepoint.py
new file mode 100644
index 00000000..b73c25f8
--- /dev/null
+++ b/src/auth0/management/types/connection_options_sharepoint.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsSharepoint = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_shop.py b/src/auth0/management/types/connection_options_shop.py
new file mode 100644
index 00000000..946f8325
--- /dev/null
+++ b/src/auth0/management/types/connection_options_shop.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsShop = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_shopify.py b/src/auth0/management/types/connection_options_shopify.py
new file mode 100644
index 00000000..2418c23e
--- /dev/null
+++ b/src/auth0/management/types/connection_options_shopify.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsShopify = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_sms.py b/src/auth0/management/types/connection_options_sms.py
new file mode 100644
index 00000000..26df45c6
--- /dev/null
+++ b/src/auth0/management/types/connection_options_sms.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsSms = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_soundcloud.py b/src/auth0/management/types/connection_options_soundcloud.py
new file mode 100644
index 00000000..a2eedba2
--- /dev/null
+++ b/src/auth0/management/types/connection_options_soundcloud.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsSoundcloud = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_the_city.py b/src/auth0/management/types/connection_options_the_city.py
new file mode 100644
index 00000000..baea2284
--- /dev/null
+++ b/src/auth0/management/types/connection_options_the_city.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsTheCity = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_the_city_sandbox.py b/src/auth0/management/types/connection_options_the_city_sandbox.py
new file mode 100644
index 00000000..44b3b159
--- /dev/null
+++ b/src/auth0/management/types/connection_options_the_city_sandbox.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsTheCitySandbox = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_thirty_seven_signals.py b/src/auth0/management/types/connection_options_thirty_seven_signals.py
new file mode 100644
index 00000000..07427015
--- /dev/null
+++ b/src/auth0/management/types/connection_options_thirty_seven_signals.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsThirtySevenSignals = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_twitter.py b/src/auth0/management/types/connection_options_twitter.py
new file mode 100644
index 00000000..bd06d7a5
--- /dev/null
+++ b/src/auth0/management/types/connection_options_twitter.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsTwitter = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_untappd.py b/src/auth0/management/types/connection_options_untappd.py
new file mode 100644
index 00000000..06eb7ba0
--- /dev/null
+++ b/src/auth0/management/types/connection_options_untappd.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsUntappd = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_vkontakte.py b/src/auth0/management/types/connection_options_vkontakte.py
new file mode 100644
index 00000000..dc81dcc4
--- /dev/null
+++ b/src/auth0/management/types/connection_options_vkontakte.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsVkontakte = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_weibo.py b/src/auth0/management/types/connection_options_weibo.py
new file mode 100644
index 00000000..c254e982
--- /dev/null
+++ b/src/auth0/management/types/connection_options_weibo.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsWeibo = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_windows_live.py b/src/auth0/management/types/connection_options_windows_live.py
new file mode 100644
index 00000000..714c6768
--- /dev/null
+++ b/src/auth0/management/types/connection_options_windows_live.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionOptionsWindowsLive = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/connection_options_wordpress.py b/src/auth0/management/types/connection_options_wordpress.py
new file mode 100644
index 00000000..77477e28
--- /dev/null
+++ b/src/auth0/management/types/connection_options_wordpress.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsWordpress = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_yahoo.py b/src/auth0/management/types/connection_options_yahoo.py
new file mode 100644
index 00000000..e71b16b4
--- /dev/null
+++ b/src/auth0/management/types/connection_options_yahoo.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsYahoo = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_yammer.py b/src/auth0/management/types/connection_options_yammer.py
new file mode 100644
index 00000000..6a40f2a5
--- /dev/null
+++ b/src/auth0/management/types/connection_options_yammer.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsYammer = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_options_yandex.py b/src/auth0/management/types/connection_options_yandex.py
new file mode 100644
index 00000000..af057299
--- /dev/null
+++ b/src/auth0/management/types/connection_options_yandex.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_options_o_auth_2_common import ConnectionOptionsOAuth2Common
+
+ConnectionOptionsYandex = ConnectionOptionsOAuth2Common
diff --git a/src/auth0/management/types/connection_passkey_authentication_method.py b/src/auth0/management/types/connection_passkey_authentication_method.py
new file mode 100644
index 00000000..9946735c
--- /dev/null
+++ b/src/auth0/management/types/connection_passkey_authentication_method.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionPasskeyAuthenticationMethod(UniversalBaseModel):
+ """
+ Passkey authentication enablement
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether passkeys are enabled
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_passkey_challenge_ui_enum.py b/src/auth0/management/types/connection_passkey_challenge_ui_enum.py
new file mode 100644
index 00000000..508c980e
--- /dev/null
+++ b/src/auth0/management/types/connection_passkey_challenge_ui_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionPasskeyChallengeUiEnum = typing.Union[typing.Literal["both", "autofill", "button"], typing.Any]
diff --git a/src/auth0/management/types/connection_passkey_options.py b/src/auth0/management/types/connection_passkey_options.py
new file mode 100644
index 00000000..93c07d01
--- /dev/null
+++ b/src/auth0/management/types/connection_passkey_options.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_passkey_challenge_ui_enum import ConnectionPasskeyChallengeUiEnum
+
+
+class ConnectionPasskeyOptions(UniversalBaseModel):
+ """
+ Options for the passkey authentication method
+ """
+
+ challenge_ui: typing.Optional[ConnectionPasskeyChallengeUiEnum] = None
+ progressive_enrollment_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables or disables progressive enrollment of passkeys for the connection.
+ """
+
+ local_enrollment_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables or disables enrollment prompt for local passkey when user authenticates using a cross-device passkey for the connection.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_password_authentication_method.py b/src/auth0/management/types/connection_password_authentication_method.py
new file mode 100644
index 00000000..73057790
--- /dev/null
+++ b/src/auth0/management/types/connection_password_authentication_method.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionPasswordAuthenticationMethod(UniversalBaseModel):
+ """
+ Password authentication enablement
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether passwords are enabled
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_password_complexity_options.py b/src/auth0/management/types/connection_password_complexity_options.py
new file mode 100644
index 00000000..100a40f6
--- /dev/null
+++ b/src/auth0/management/types/connection_password_complexity_options.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionPasswordComplexityOptions(UniversalBaseModel):
+ """
+ Password complexity options
+ """
+
+ min_length: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Minimum password length
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_password_dictionary_options.py b/src/auth0/management/types/connection_password_dictionary_options.py
new file mode 100644
index 00000000..60afe31a
--- /dev/null
+++ b/src/auth0/management/types/connection_password_dictionary_options.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionPasswordDictionaryOptions(UniversalBaseModel):
+ """
+ Options for password dictionary policy
+ """
+
+ enable: bool
+ dictionary: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Custom Password Dictionary. An array of up to 200 entries.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_password_history_options.py b/src/auth0/management/types/connection_password_history_options.py
new file mode 100644
index 00000000..50c833e9
--- /dev/null
+++ b/src/auth0/management/types/connection_password_history_options.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionPasswordHistoryOptions(UniversalBaseModel):
+ """
+ Options for password history policy
+ """
+
+ enable: bool
+ size: typing.Optional[int] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_password_no_personal_info_options.py b/src/auth0/management/types/connection_password_no_personal_info_options.py
new file mode 100644
index 00000000..2a489c3d
--- /dev/null
+++ b/src/auth0/management/types/connection_password_no_personal_info_options.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionPasswordNoPersonalInfoOptions(UniversalBaseModel):
+ """
+ Options for personal info in passwords policy
+ """
+
+ enable: bool
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_password_policy_enum.py b/src/auth0/management/types/connection_password_policy_enum.py
new file mode 100644
index 00000000..45bd55bf
--- /dev/null
+++ b/src/auth0/management/types/connection_password_policy_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionPasswordPolicyEnum = typing.Union[typing.Literal["none", "low", "fair", "good", "excellent"], typing.Any]
diff --git a/src/auth0/management/types/connection_profile.py b/src/auth0/management/types/connection_profile.py
new file mode 100644
index 00000000..01ecdf43
--- /dev/null
+++ b/src/auth0/management/types/connection_profile.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_name_prefix_template import ConnectionNamePrefixTemplate
+from .connection_profile_config import ConnectionProfileConfig
+from .connection_profile_enabled_features import ConnectionProfileEnabledFeatures
+from .connection_profile_id import ConnectionProfileId
+from .connection_profile_name import ConnectionProfileName
+from .connection_profile_organization import ConnectionProfileOrganization
+from .connection_profile_strategy_overrides import ConnectionProfileStrategyOverrides
+
+
+class ConnectionProfile(UniversalBaseModel):
+ id: typing.Optional[ConnectionProfileId] = None
+ name: typing.Optional[ConnectionProfileName] = None
+ organization: typing.Optional[ConnectionProfileOrganization] = None
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = None
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = None
+ connection_config: typing.Optional[ConnectionProfileConfig] = None
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_profile_config.py b/src/auth0/management/types/connection_profile_config.py
new file mode 100644
index 00000000..852cb354
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_config.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionProfileConfig(UniversalBaseModel):
+ """
+ Connection profile configuration.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_profile_enabled_features.py b/src/auth0/management/types/connection_profile_enabled_features.py
new file mode 100644
index 00000000..d9f13300
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_enabled_features.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .enabled_features_enum import EnabledFeaturesEnum
+
+ConnectionProfileEnabledFeatures = typing.List[EnabledFeaturesEnum]
diff --git a/src/auth0/management/types/connection_profile_id.py b/src/auth0/management/types/connection_profile_id.py
new file mode 100644
index 00000000..13a89794
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_id.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionProfileId = str
diff --git a/src/auth0/management/types/connection_profile_name.py b/src/auth0/management/types/connection_profile_name.py
new file mode 100644
index 00000000..3f1ca1f2
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_name.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionProfileName = str
diff --git a/src/auth0/management/types/connection_profile_organization.py b/src/auth0/management/types/connection_profile_organization.py
new file mode 100644
index 00000000..8078cba4
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_organization.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_profile_organization_assign_membership_on_login_enum import (
+ ConnectionProfileOrganizationAssignMembershipOnLoginEnum,
+)
+from .connection_profile_organization_show_as_button_enum import ConnectionProfileOrganizationShowAsButtonEnum
+
+
+class ConnectionProfileOrganization(UniversalBaseModel):
+ """
+ The organization of the connection profile.
+ """
+
+ show_as_button: typing.Optional[ConnectionProfileOrganizationShowAsButtonEnum] = None
+ assign_membership_on_login: typing.Optional[ConnectionProfileOrganizationAssignMembershipOnLoginEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_profile_organization_assign_membership_on_login_enum.py b/src/auth0/management/types/connection_profile_organization_assign_membership_on_login_enum.py
new file mode 100644
index 00000000..250e190f
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_organization_assign_membership_on_login_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionProfileOrganizationAssignMembershipOnLoginEnum = typing.Union[
+ typing.Literal["none", "optional", "required"], typing.Any
+]
diff --git a/src/auth0/management/types/connection_profile_organization_show_as_button_enum.py b/src/auth0/management/types/connection_profile_organization_show_as_button_enum.py
new file mode 100644
index 00000000..9be3fb67
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_organization_show_as_button_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionProfileOrganizationShowAsButtonEnum = typing.Union[typing.Literal["none", "optional", "required"], typing.Any]
diff --git a/src/auth0/management/types/connection_profile_strategy_override.py b/src/auth0/management/types/connection_profile_strategy_override.py
new file mode 100644
index 00000000..8ac61c9d
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_strategy_override.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_profile_strategy_overrides_connection_config import ConnectionProfileStrategyOverridesConnectionConfig
+from .connection_profile_strategy_overrides_enabled_features import ConnectionProfileStrategyOverridesEnabledFeatures
+
+
+class ConnectionProfileStrategyOverride(UniversalBaseModel):
+ """
+ Connection Profile Strategy Override
+ """
+
+ enabled_features: typing.Optional[ConnectionProfileStrategyOverridesEnabledFeatures] = None
+ connection_config: typing.Optional[ConnectionProfileStrategyOverridesConnectionConfig] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_profile_strategy_overrides.py b/src/auth0/management/types/connection_profile_strategy_overrides.py
new file mode 100644
index 00000000..0766f38d
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_strategy_overrides.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .connection_profile_strategy_override import ConnectionProfileStrategyOverride
+
+
+class ConnectionProfileStrategyOverrides(UniversalBaseModel):
+ """
+ Strategy-specific overrides for this attribute
+ """
+
+ pingfederate: typing.Optional[ConnectionProfileStrategyOverride] = None
+ ad: typing.Optional[ConnectionProfileStrategyOverride] = None
+ adfs: typing.Optional[ConnectionProfileStrategyOverride] = None
+ waad: typing.Optional[ConnectionProfileStrategyOverride] = None
+ google_apps: typing_extensions.Annotated[
+ typing.Optional[ConnectionProfileStrategyOverride], FieldMetadata(alias="google-apps")
+ ] = None
+ okta: typing.Optional[ConnectionProfileStrategyOverride] = None
+ oidc: typing.Optional[ConnectionProfileStrategyOverride] = None
+ samlp: typing.Optional[ConnectionProfileStrategyOverride] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_profile_strategy_overrides_connection_config.py b/src/auth0/management/types/connection_profile_strategy_overrides_connection_config.py
new file mode 100644
index 00000000..08f670c5
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_strategy_overrides_connection_config.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionProfileStrategyOverridesConnectionConfig(UniversalBaseModel):
+ """
+ Connection profile strategy overrides connection configuration.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_profile_strategy_overrides_enabled_features.py b/src/auth0/management/types/connection_profile_strategy_overrides_enabled_features.py
new file mode 100644
index 00000000..b2b686bc
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_strategy_overrides_enabled_features.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .enabled_features_enum import EnabledFeaturesEnum
+
+ConnectionProfileStrategyOverridesEnabledFeatures = typing.List[EnabledFeaturesEnum]
diff --git a/src/auth0/management/types/connection_profile_template.py b/src/auth0/management/types/connection_profile_template.py
new file mode 100644
index 00000000..bc7fb7d1
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_template.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_name_prefix_template import ConnectionNamePrefixTemplate
+from .connection_profile_config import ConnectionProfileConfig
+from .connection_profile_enabled_features import ConnectionProfileEnabledFeatures
+from .connection_profile_name import ConnectionProfileName
+from .connection_profile_organization import ConnectionProfileOrganization
+from .connection_profile_strategy_overrides import ConnectionProfileStrategyOverrides
+
+
+class ConnectionProfileTemplate(UniversalBaseModel):
+ """
+ The structure of the template, which can be used as the payload for creating or updating a Connection Profile.
+ """
+
+ name: typing.Optional[ConnectionProfileName] = None
+ organization: typing.Optional[ConnectionProfileOrganization] = None
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = None
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = None
+ connection_config: typing.Optional[ConnectionProfileConfig] = None
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_profile_template_item.py b/src/auth0/management/types/connection_profile_template_item.py
new file mode 100644
index 00000000..8d19cb26
--- /dev/null
+++ b/src/auth0/management/types/connection_profile_template_item.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_profile_template import ConnectionProfileTemplate
+
+
+class ConnectionProfileTemplateItem(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The id of the template.
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The user-friendly name of the template displayed in the UI.
+ """
+
+ template: typing.Optional[ConnectionProfileTemplate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_properties_options.py b/src/auth0/management/types/connection_properties_options.py
new file mode 100644
index 00000000..cfa03723
--- /dev/null
+++ b/src/auth0/management/types/connection_properties_options.py
@@ -0,0 +1,93 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .connection_attributes import ConnectionAttributes
+from .connection_authentication_methods import ConnectionAuthenticationMethods
+from .connection_custom_scripts import ConnectionCustomScripts
+from .connection_federated_connections_access_tokens import ConnectionFederatedConnectionsAccessTokens
+from .connection_gateway_authentication import ConnectionGatewayAuthentication
+from .connection_identifier_precedence_enum import ConnectionIdentifierPrecedenceEnum
+from .connection_passkey_options import ConnectionPasskeyOptions
+from .connection_password_complexity_options import ConnectionPasswordComplexityOptions
+from .connection_password_dictionary_options import ConnectionPasswordDictionaryOptions
+from .connection_password_history_options import ConnectionPasswordHistoryOptions
+from .connection_password_no_personal_info_options import ConnectionPasswordNoPersonalInfoOptions
+from .connection_password_policy_enum import ConnectionPasswordPolicyEnum
+from .connection_set_user_root_attributes_enum import ConnectionSetUserRootAttributesEnum
+from .connection_upstream_params import ConnectionUpstreamParams
+from .connection_validation_options import ConnectionValidationOptions
+
+
+class ConnectionPropertiesOptions(UniversalBaseModel):
+ """
+ The connection's options (depend on the connection strategy)
+ """
+
+ validation: typing.Optional[ConnectionValidationOptions] = None
+ non_persistent_attrs: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ An array of user fields that should not be stored in the Auth0 database (https://auth0.com/docs/security/data-security/denylist)
+ """
+
+ precedence: typing.Optional[typing.List[ConnectionIdentifierPrecedenceEnum]] = pydantic.Field(default=None)
+ """
+ Order of precedence for attribute types. If the property is not specified, the default precedence of attributes will be used.
+ """
+
+ attributes: typing.Optional[ConnectionAttributes] = None
+ enable_script_context: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Set to true to inject context into custom DB scripts (warning: cannot be disabled once enabled)
+ """
+
+ enabled_database_customization: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="enabledDatabaseCustomization")
+ ] = pydantic.Field(default=None)
+ """
+ Set to true to use a legacy user store
+ """
+
+ import_mode: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enable this if you have a legacy user store and you want to gradually migrate those users to the Auth0 user store
+ """
+
+ custom_scripts: typing_extensions.Annotated[
+ typing.Optional[ConnectionCustomScripts], FieldMetadata(alias="customScripts")
+ ] = None
+ authentication_methods: typing.Optional[ConnectionAuthenticationMethods] = None
+ passkey_options: typing.Optional[ConnectionPasskeyOptions] = None
+ password_policy: typing_extensions.Annotated[
+ typing.Optional[ConnectionPasswordPolicyEnum], FieldMetadata(alias="passwordPolicy")
+ ] = None
+ password_complexity_options: typing.Optional[ConnectionPasswordComplexityOptions] = None
+ password_history: typing.Optional[ConnectionPasswordHistoryOptions] = None
+ password_no_personal_info: typing.Optional[ConnectionPasswordNoPersonalInfoOptions] = None
+ password_dictionary: typing.Optional[ConnectionPasswordDictionaryOptions] = None
+ api_enable_users: typing.Optional[bool] = None
+ basic_profile: typing.Optional[bool] = None
+ ext_admin: typing.Optional[bool] = None
+ ext_is_suspended: typing.Optional[bool] = None
+ ext_agreed_terms: typing.Optional[bool] = None
+ ext_groups: typing.Optional[bool] = None
+ ext_assigned_plans: typing.Optional[bool] = None
+ ext_profile: typing.Optional[bool] = None
+ disable_self_service_change_password: typing.Optional[bool] = None
+ upstream_params: typing.Optional[ConnectionUpstreamParams] = None
+ set_user_root_attributes: typing.Optional[ConnectionSetUserRootAttributesEnum] = None
+ gateway_authentication: typing.Optional[ConnectionGatewayAuthentication] = None
+ federated_connections_access_tokens: typing.Optional[ConnectionFederatedConnectionsAccessTokens] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_provisioning_ticket.py b/src/auth0/management/types/connection_provisioning_ticket.py
new file mode 100644
index 00000000..4ee72ce3
--- /dev/null
+++ b/src/auth0/management/types/connection_provisioning_ticket.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionProvisioningTicket = str
diff --git a/src/auth0/management/types/connection_provisioning_ticket_url.py b/src/auth0/management/types/connection_provisioning_ticket_url.py
new file mode 100644
index 00000000..611b975a
--- /dev/null
+++ b/src/auth0/management/types/connection_provisioning_ticket_url.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionProvisioningTicketUrl = str
diff --git a/src/auth0/management/types/connection_realm_fallback.py b/src/auth0/management/types/connection_realm_fallback.py
new file mode 100644
index 00000000..7b2966a9
--- /dev/null
+++ b/src/auth0/management/types/connection_realm_fallback.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionRealmFallback = bool
diff --git a/src/auth0/management/types/connection_realms.py b/src/auth0/management/types/connection_realms.py
new file mode 100644
index 00000000..d48ce122
--- /dev/null
+++ b/src/auth0/management/types/connection_realms.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionRealms = typing.List[str]
diff --git a/src/auth0/management/types/connection_registration_endpoint.py b/src/auth0/management/types/connection_registration_endpoint.py
new file mode 100644
index 00000000..fd430ed6
--- /dev/null
+++ b/src/auth0/management/types/connection_registration_endpoint.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_https_url_with_http_fallback import ConnectionHttpsUrlWithHttpFallback
+
+ConnectionRegistrationEndpoint = ConnectionHttpsUrlWithHttpFallback
diff --git a/src/auth0/management/types/connection_request_object_encryption_alg_values_supported.py b/src/auth0/management/types/connection_request_object_encryption_alg_values_supported.py
new file mode 100644
index 00000000..8c2177b2
--- /dev/null
+++ b/src/auth0/management/types/connection_request_object_encryption_alg_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionRequestObjectEncryptionAlgValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_request_object_encryption_enc_values_supported.py b/src/auth0/management/types/connection_request_object_encryption_enc_values_supported.py
new file mode 100644
index 00000000..1d779374
--- /dev/null
+++ b/src/auth0/management/types/connection_request_object_encryption_enc_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionRequestObjectEncryptionEncValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_request_object_signing_alg_values_supported.py b/src/auth0/management/types/connection_request_object_signing_alg_values_supported.py
new file mode 100644
index 00000000..a0d0760b
--- /dev/null
+++ b/src/auth0/management/types/connection_request_object_signing_alg_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionRequestObjectSigningAlgValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_request_parameter_supported.py b/src/auth0/management/types/connection_request_parameter_supported.py
new file mode 100644
index 00000000..753dd7a7
--- /dev/null
+++ b/src/auth0/management/types/connection_request_parameter_supported.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionRequestParameterSupported = bool
diff --git a/src/auth0/management/types/connection_request_uri_parameter_supported.py b/src/auth0/management/types/connection_request_uri_parameter_supported.py
new file mode 100644
index 00000000..cfd52768
--- /dev/null
+++ b/src/auth0/management/types/connection_request_uri_parameter_supported.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionRequestUriParameterSupported = bool
diff --git a/src/auth0/management/types/connection_require_request_uri_registration.py b/src/auth0/management/types/connection_require_request_uri_registration.py
new file mode 100644
index 00000000..531bc146
--- /dev/null
+++ b/src/auth0/management/types/connection_require_request_uri_registration.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionRequireRequestUriRegistration = bool
diff --git a/src/auth0/management/types/connection_requires_username.py b/src/auth0/management/types/connection_requires_username.py
new file mode 100644
index 00000000..a16af9bd
--- /dev/null
+++ b/src/auth0/management/types/connection_requires_username.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionRequiresUsername = bool
diff --git a/src/auth0/management/types/connection_response_common.py b/src/auth0/management/types/connection_response_common.py
new file mode 100644
index 00000000..e069c223
--- /dev/null
+++ b/src/auth0/management/types/connection_response_common.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_id import ConnectionId
+from .create_connection_common import CreateConnectionCommon
+
+
+class ConnectionResponseCommon(CreateConnectionCommon):
+ id: typing.Optional[ConnectionId] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_ad.py b/src/auth0/management/types/connection_response_content_ad.py
new file mode 100644
index 00000000..24629bba
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_ad.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_ad import ConnectionOptionsAd
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentAd(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=ad
+ """
+
+ strategy: typing.Literal["ad"] = "ad"
+ options: typing.Optional[ConnectionOptionsAd] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_adfs.py b/src/auth0/management/types/connection_response_content_adfs.py
new file mode 100644
index 00000000..f8cc3496
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_adfs.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_adfs import ConnectionOptionsAdfs
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentAdfs(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=adfs
+ """
+
+ strategy: typing.Literal["adfs"] = "adfs"
+ options: typing.Optional[ConnectionOptionsAdfs] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_amazon.py b/src/auth0/management/types/connection_response_content_amazon.py
new file mode 100644
index 00000000..5a407b3e
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_amazon.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_amazon import ConnectionOptionsAmazon
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentAmazon(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=amazon
+ """
+
+ strategy: typing.Literal["amazon"] = "amazon"
+ options: typing.Optional[ConnectionOptionsAmazon] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_aol.py b/src/auth0/management/types/connection_response_content_aol.py
new file mode 100644
index 00000000..813f0b65
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_aol.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_aol import ConnectionOptionsAol
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentAol(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=aol
+ """
+
+ strategy: typing.Literal["aol"] = "aol"
+ options: typing.Optional[ConnectionOptionsAol] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_apple.py b/src/auth0/management/types/connection_response_content_apple.py
new file mode 100644
index 00000000..cc736160
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_apple.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_apple import ConnectionOptionsApple
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentApple(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=apple
+ """
+
+ strategy: typing.Literal["apple"] = "apple"
+ options: typing.Optional[ConnectionOptionsApple] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_auth_0.py b/src/auth0/management/types/connection_response_content_auth_0.py
new file mode 100644
index 00000000..23a036f6
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_auth_0.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_auth_0 import ConnectionOptionsAuth0
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentAuth0(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=auth0
+ """
+
+ strategy: typing.Literal["auth0"] = "auth0"
+ options: typing.Optional[ConnectionOptionsAuth0] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_auth_0_oidc.py b/src/auth0/management/types/connection_response_content_auth_0_oidc.py
new file mode 100644
index 00000000..5e53066e
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_auth_0_oidc.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_auth_0_oidc import ConnectionOptionsAuth0Oidc
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentAuth0Oidc(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=auth0-oidc
+ """
+
+ strategy: typing.Literal["auth0-oidc"] = "auth0-oidc"
+ options: typing.Optional[ConnectionOptionsAuth0Oidc] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_azure_ad.py b/src/auth0/management/types/connection_response_content_azure_ad.py
new file mode 100644
index 00000000..909d83f4
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_azure_ad.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_azure_ad import ConnectionOptionsAzureAd
+from .connection_provisioning_ticket import ConnectionProvisioningTicket
+from .connection_provisioning_ticket_url import ConnectionProvisioningTicketUrl
+from .connection_response_common import ConnectionResponseCommon
+from .connection_strategy_version_enum_azure_ad import ConnectionStrategyVersionEnumAzureAd
+
+
+class ConnectionResponseContentAzureAd(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=waad
+ """
+
+ strategy: typing.Literal["waad"] = "waad"
+ options: typing.Optional[ConnectionOptionsAzureAd] = None
+ provisioning_ticket: typing.Optional[ConnectionProvisioningTicket] = None
+ provisioning_ticket_url: typing.Optional[ConnectionProvisioningTicketUrl] = None
+ strategy_version: typing.Optional[ConnectionStrategyVersionEnumAzureAd] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_baidu.py b/src/auth0/management/types/connection_response_content_baidu.py
new file mode 100644
index 00000000..21d24dde
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_baidu.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_baidu import ConnectionOptionsBaidu
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentBaidu(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=baidu
+ """
+
+ strategy: typing.Literal["baidu"] = "baidu"
+ options: typing.Optional[ConnectionOptionsBaidu] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_bitbucket.py b/src/auth0/management/types/connection_response_content_bitbucket.py
new file mode 100644
index 00000000..25bae3f1
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_bitbucket.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_bitbucket import ConnectionOptionsBitbucket
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentBitbucket(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=bitbucket
+ """
+
+ strategy: typing.Literal["bitbucket"] = "bitbucket"
+ options: typing.Optional[ConnectionOptionsBitbucket] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_bitly.py b/src/auth0/management/types/connection_response_content_bitly.py
new file mode 100644
index 00000000..4a8d05da
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_bitly.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_bitly import ConnectionOptionsBitly
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentBitly(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=bitly
+ """
+
+ strategy: typing.Literal["bitly"] = "bitly"
+ options: typing.Optional[ConnectionOptionsBitly] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_box.py b/src/auth0/management/types/connection_response_content_box.py
new file mode 100644
index 00000000..10f2f078
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_box.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_box import ConnectionOptionsBox
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentBox(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=box
+ """
+
+ strategy: typing.Literal["box"] = "box"
+ options: typing.Optional[ConnectionOptionsBox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_custom.py b/src/auth0/management/types/connection_response_content_custom.py
new file mode 100644
index 00000000..dc02b858
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_custom.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_custom import ConnectionOptionsCustom
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentCustom(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=custom
+ """
+
+ strategy: typing.Literal["custom"] = "custom"
+ options: typing.Optional[ConnectionOptionsCustom] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_daccount.py b/src/auth0/management/types/connection_response_content_daccount.py
new file mode 100644
index 00000000..07a316f0
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_daccount.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_daccount import ConnectionOptionsDaccount
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentDaccount(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=daccount
+ """
+
+ strategy: typing.Literal["daccount"] = "daccount"
+ options: typing.Optional[ConnectionOptionsDaccount] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_dropbox.py b/src/auth0/management/types/connection_response_content_dropbox.py
new file mode 100644
index 00000000..054fda00
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_dropbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_dropbox import ConnectionOptionsDropbox
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentDropbox(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=dropbox
+ """
+
+ strategy: typing.Literal["dropbox"] = "dropbox"
+ options: typing.Optional[ConnectionOptionsDropbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_dwolla.py b/src/auth0/management/types/connection_response_content_dwolla.py
new file mode 100644
index 00000000..6829629a
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_dwolla.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_dwolla import ConnectionOptionsDwolla
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentDwolla(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=dwolla
+ """
+
+ strategy: typing.Literal["dwolla"] = "dwolla"
+ options: typing.Optional[ConnectionOptionsDwolla] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_email.py b/src/auth0/management/types/connection_response_content_email.py
new file mode 100644
index 00000000..43be73d9
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_email.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_email import ConnectionOptionsEmail
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentEmail(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=email
+ """
+
+ strategy: typing.Literal["email"] = "email"
+ options: typing.Optional[ConnectionOptionsEmail] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_evernote.py b/src/auth0/management/types/connection_response_content_evernote.py
new file mode 100644
index 00000000..d6c41fe6
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_evernote.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_evernote import ConnectionOptionsEvernote
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentEvernote(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=evernote
+ """
+
+ strategy: typing.Literal["evernote"] = "evernote"
+ options: typing.Optional[ConnectionOptionsEvernote] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_evernote_sandbox.py b/src/auth0/management/types/connection_response_content_evernote_sandbox.py
new file mode 100644
index 00000000..a2d8cfa4
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_evernote_sandbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_evernote_sandbox import ConnectionOptionsEvernoteSandbox
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentEvernoteSandbox(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=evernote-sandbox
+ """
+
+ strategy: typing.Literal["evernote-sandbox"] = "evernote-sandbox"
+ options: typing.Optional[ConnectionOptionsEvernoteSandbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_exact.py b/src/auth0/management/types/connection_response_content_exact.py
new file mode 100644
index 00000000..03d95ead
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_exact.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_exact import ConnectionOptionsExact
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentExact(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=exact
+ """
+
+ strategy: typing.Literal["exact"] = "exact"
+ options: typing.Optional[ConnectionOptionsExact] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_facebook.py b/src/auth0/management/types/connection_response_content_facebook.py
new file mode 100644
index 00000000..05f9bb16
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_facebook.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_facebook import ConnectionOptionsFacebook
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentFacebook(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=facebook
+ """
+
+ strategy: typing.Literal["facebook"] = "facebook"
+ options: typing.Optional[ConnectionOptionsFacebook] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_fitbit.py b/src/auth0/management/types/connection_response_content_fitbit.py
new file mode 100644
index 00000000..dbceca66
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_fitbit.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_fitbit import ConnectionOptionsFitbit
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentFitbit(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=fitbit
+ """
+
+ strategy: typing.Literal["fitbit"] = "fitbit"
+ options: typing.Optional[ConnectionOptionsFitbit] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_flickr.py b/src/auth0/management/types/connection_response_content_flickr.py
new file mode 100644
index 00000000..72246895
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_flickr.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_flickr import ConnectionOptionsFlickr
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentFlickr(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=flickr
+ """
+
+ strategy: typing.Literal["flickr"] = "flickr"
+ options: typing.Optional[ConnectionOptionsFlickr] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_git_hub.py b/src/auth0/management/types/connection_response_content_git_hub.py
new file mode 100644
index 00000000..70b16e15
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_git_hub.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_git_hub import ConnectionOptionsGitHub
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentGitHub(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=github
+ """
+
+ strategy: typing.Literal["github"] = "github"
+ options: typing.Optional[ConnectionOptionsGitHub] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_google_apps.py b/src/auth0/management/types/connection_response_content_google_apps.py
new file mode 100644
index 00000000..660e3fe3
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_google_apps.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_google_apps import ConnectionOptionsGoogleApps
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentGoogleApps(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=google-apps
+ """
+
+ strategy: typing.Literal["google-apps"] = "google-apps"
+ options: typing.Optional[ConnectionOptionsGoogleApps] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_google_o_auth_2.py b/src/auth0/management/types/connection_response_content_google_o_auth_2.py
new file mode 100644
index 00000000..57f15f78
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_google_o_auth_2.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_google_o_auth_2 import ConnectionOptionsGoogleOAuth2
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentGoogleOAuth2(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=google-oauth2
+ """
+
+ strategy: typing.Literal["google-oauth2"] = "google-oauth2"
+ options: typing.Optional[ConnectionOptionsGoogleOAuth2] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_instagram.py b/src/auth0/management/types/connection_response_content_instagram.py
new file mode 100644
index 00000000..21568f5a
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_instagram.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_instagram import ConnectionOptionsInstagram
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentInstagram(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=instagram
+ """
+
+ strategy: typing.Literal["instagram"] = "instagram"
+ options: typing.Optional[ConnectionOptionsInstagram] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_ip.py b/src/auth0/management/types/connection_response_content_ip.py
new file mode 100644
index 00000000..73a0ba88
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_ip.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_ip import ConnectionOptionsIp
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentIp(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=ip
+ """
+
+ strategy: typing.Literal["ip"] = "ip"
+ options: typing.Optional[ConnectionOptionsIp] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_line.py b/src/auth0/management/types/connection_response_content_line.py
new file mode 100644
index 00000000..ab56cf00
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_line.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_line import ConnectionOptionsLine
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentLine(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=line
+ """
+
+ strategy: typing.Literal["line"] = "line"
+ options: typing.Optional[ConnectionOptionsLine] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_linkedin.py b/src/auth0/management/types/connection_response_content_linkedin.py
new file mode 100644
index 00000000..3253be1a
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_linkedin.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_linkedin import ConnectionOptionsLinkedin
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentLinkedin(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=linkedin
+ """
+
+ strategy: typing.Literal["linkedin"] = "linkedin"
+ options: typing.Optional[ConnectionOptionsLinkedin] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_miicard.py b/src/auth0/management/types/connection_response_content_miicard.py
new file mode 100644
index 00000000..d33e1a85
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_miicard.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_miicard import ConnectionOptionsMiicard
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentMiicard(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=miicard
+ """
+
+ strategy: typing.Literal["miicard"] = "miicard"
+ options: typing.Optional[ConnectionOptionsMiicard] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_o_auth_1.py b/src/auth0/management/types/connection_response_content_o_auth_1.py
new file mode 100644
index 00000000..43849c06
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_o_auth_1.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_o_auth_1 import ConnectionOptionsOAuth1
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentOAuth1(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=oauth1
+ """
+
+ strategy: typing.Literal["oauth1"] = "oauth1"
+ options: typing.Optional[ConnectionOptionsOAuth1] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_o_auth_2.py b/src/auth0/management/types/connection_response_content_o_auth_2.py
new file mode 100644
index 00000000..6b5d765b
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_o_auth_2.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_o_auth_2 import ConnectionOptionsOAuth2
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentOAuth2(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=oauth2
+ """
+
+ strategy: typing.Literal["oauth2"] = "oauth2"
+ options: typing.Optional[ConnectionOptionsOAuth2] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_office_365.py b/src/auth0/management/types/connection_response_content_office_365.py
new file mode 100644
index 00000000..2cb46fcc
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_office_365.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_office_365 import ConnectionOptionsOffice365
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentOffice365(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=office365
+ """
+
+ strategy: typing.Literal["office365"] = "office365"
+ options: typing.Optional[ConnectionOptionsOffice365] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_oidc.py b/src/auth0/management/types/connection_response_content_oidc.py
new file mode 100644
index 00000000..37cf8c85
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_oidc.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_oidc import ConnectionOptionsOidc
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentOidc(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=oidc
+ """
+
+ strategy: typing.Literal["oidc"] = "oidc"
+ options: typing.Optional[ConnectionOptionsOidc] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_okta.py b/src/auth0/management/types/connection_response_content_okta.py
new file mode 100644
index 00000000..057b8cdf
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_okta.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_okta import ConnectionOptionsOkta
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentOkta(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=okta
+ """
+
+ strategy: typing.Literal["okta"] = "okta"
+ options: typing.Optional[ConnectionOptionsOkta] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_paypal.py b/src/auth0/management/types/connection_response_content_paypal.py
new file mode 100644
index 00000000..a969b9a6
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_paypal.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_paypal import ConnectionOptionsPaypal
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentPaypal(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=paypal
+ """
+
+ strategy: typing.Literal["paypal"] = "paypal"
+ options: typing.Optional[ConnectionOptionsPaypal] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_paypal_sandbox.py b/src/auth0/management/types/connection_response_content_paypal_sandbox.py
new file mode 100644
index 00000000..320f468d
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_paypal_sandbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_paypal_sandbox import ConnectionOptionsPaypalSandbox
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentPaypalSandbox(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=paypal-sandbox
+ """
+
+ strategy: typing.Literal["paypal-sandbox"] = "paypal-sandbox"
+ options: typing.Optional[ConnectionOptionsPaypalSandbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_ping_federate.py b/src/auth0/management/types/connection_response_content_ping_federate.py
new file mode 100644
index 00000000..a8bc7a68
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_ping_federate.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_ping_federate import ConnectionOptionsPingFederate
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentPingFederate(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=pingfederate
+ """
+
+ strategy: typing.Literal["pingfederate"] = "pingfederate"
+ options: typing.Optional[ConnectionOptionsPingFederate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_planning_center.py b/src/auth0/management/types/connection_response_content_planning_center.py
new file mode 100644
index 00000000..2190d218
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_planning_center.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_planning_center import ConnectionOptionsPlanningCenter
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentPlanningCenter(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=planningcenter
+ """
+
+ strategy: typing.Literal["planningcenter"] = "planningcenter"
+ options: typing.Optional[ConnectionOptionsPlanningCenter] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_renren.py b/src/auth0/management/types/connection_response_content_renren.py
new file mode 100644
index 00000000..79a2f11a
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_renren.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_renren import ConnectionOptionsRenren
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentRenren(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=renren
+ """
+
+ strategy: typing.Literal["renren"] = "renren"
+ options: typing.Optional[ConnectionOptionsRenren] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_salesforce.py b/src/auth0/management/types/connection_response_content_salesforce.py
new file mode 100644
index 00000000..e69e6540
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_salesforce.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_salesforce import ConnectionOptionsSalesforce
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentSalesforce(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=salesforce
+ """
+
+ strategy: typing.Literal["salesforce"] = "salesforce"
+ options: typing.Optional[ConnectionOptionsSalesforce] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_salesforce_community.py b/src/auth0/management/types/connection_response_content_salesforce_community.py
new file mode 100644
index 00000000..8bc6cf62
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_salesforce_community.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_salesforce_community import ConnectionOptionsSalesforceCommunity
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentSalesforceCommunity(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=salesforce-community
+ """
+
+ strategy: typing.Literal["salesforce-community"] = "salesforce-community"
+ options: typing.Optional[ConnectionOptionsSalesforceCommunity] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_salesforce_sandbox.py b/src/auth0/management/types/connection_response_content_salesforce_sandbox.py
new file mode 100644
index 00000000..25ac6ea7
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_salesforce_sandbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_salesforce_sandbox import ConnectionOptionsSalesforceSandbox
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentSalesforceSandbox(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=salesforce-sandbox
+ """
+
+ strategy: typing.Literal["salesforce-sandbox"] = "salesforce-sandbox"
+ options: typing.Optional[ConnectionOptionsSalesforceSandbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_saml.py b/src/auth0/management/types/connection_response_content_saml.py
new file mode 100644
index 00000000..f8702715
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_saml.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_saml import ConnectionOptionsSaml
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentSaml(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=samlp
+ """
+
+ strategy: typing.Literal["samlp"] = "samlp"
+ options: typing.Optional[ConnectionOptionsSaml] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_sharepoint.py b/src/auth0/management/types/connection_response_content_sharepoint.py
new file mode 100644
index 00000000..f3ede7be
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_sharepoint.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_sharepoint import ConnectionOptionsSharepoint
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentSharepoint(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=sharepoint
+ """
+
+ strategy: typing.Literal["sharepoint"] = "sharepoint"
+ options: typing.Optional[ConnectionOptionsSharepoint] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_shop.py b/src/auth0/management/types/connection_response_content_shop.py
new file mode 100644
index 00000000..122df9c1
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_shop.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_shop import ConnectionOptionsShop
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentShop(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=shop
+ """
+
+ strategy: typing.Literal["shop"] = "shop"
+ options: typing.Optional[ConnectionOptionsShop] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_shopify.py b/src/auth0/management/types/connection_response_content_shopify.py
new file mode 100644
index 00000000..a33cf967
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_shopify.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_shopify import ConnectionOptionsShopify
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentShopify(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=shopify
+ """
+
+ strategy: typing.Literal["shopify"] = "shopify"
+ options: typing.Optional[ConnectionOptionsShopify] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_sms.py b/src/auth0/management/types/connection_response_content_sms.py
new file mode 100644
index 00000000..003e3278
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_sms.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_sms import ConnectionOptionsSms
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentSms(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=sms
+ """
+
+ strategy: typing.Literal["sms"] = "sms"
+ options: typing.Optional[ConnectionOptionsSms] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_soundcloud.py b/src/auth0/management/types/connection_response_content_soundcloud.py
new file mode 100644
index 00000000..8af21969
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_soundcloud.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_soundcloud import ConnectionOptionsSoundcloud
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentSoundcloud(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=soundcloud
+ """
+
+ strategy: typing.Literal["soundcloud"] = "soundcloud"
+ options: typing.Optional[ConnectionOptionsSoundcloud] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_the_city.py b/src/auth0/management/types/connection_response_content_the_city.py
new file mode 100644
index 00000000..55b9b385
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_the_city.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_the_city import ConnectionOptionsTheCity
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentTheCity(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=thecity
+ """
+
+ strategy: typing.Literal["thecity"] = "thecity"
+ options: typing.Optional[ConnectionOptionsTheCity] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_the_city_sandbox.py b/src/auth0/management/types/connection_response_content_the_city_sandbox.py
new file mode 100644
index 00000000..0ae08255
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_the_city_sandbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_the_city_sandbox import ConnectionOptionsTheCitySandbox
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentTheCitySandbox(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=thecity-sandbox
+ """
+
+ strategy: typing.Literal["thecity-sandbox"] = "thecity-sandbox"
+ options: typing.Optional[ConnectionOptionsTheCitySandbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_thirty_seven_signals.py b/src/auth0/management/types/connection_response_content_thirty_seven_signals.py
new file mode 100644
index 00000000..d67bf20a
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_thirty_seven_signals.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_thirty_seven_signals import ConnectionOptionsThirtySevenSignals
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentThirtySevenSignals(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=thirtysevensignals
+ """
+
+ strategy: typing.Literal["thirtysevensignals"] = "thirtysevensignals"
+ options: typing.Optional[ConnectionOptionsThirtySevenSignals] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_twitter.py b/src/auth0/management/types/connection_response_content_twitter.py
new file mode 100644
index 00000000..c9470764
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_twitter.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_twitter import ConnectionOptionsTwitter
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentTwitter(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=twitter
+ """
+
+ strategy: typing.Literal["twitter"] = "twitter"
+ options: typing.Optional[ConnectionOptionsTwitter] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_untappd.py b/src/auth0/management/types/connection_response_content_untappd.py
new file mode 100644
index 00000000..66e95e84
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_untappd.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_untappd import ConnectionOptionsUntappd
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentUntappd(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=untappd
+ """
+
+ strategy: typing.Literal["untappd"] = "untappd"
+ options: typing.Optional[ConnectionOptionsUntappd] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_vkontakte.py b/src/auth0/management/types/connection_response_content_vkontakte.py
new file mode 100644
index 00000000..9656dbf0
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_vkontakte.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_vkontakte import ConnectionOptionsVkontakte
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentVkontakte(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=vkontakte
+ """
+
+ strategy: typing.Literal["vkontakte"] = "vkontakte"
+ options: typing.Optional[ConnectionOptionsVkontakte] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_weibo.py b/src/auth0/management/types/connection_response_content_weibo.py
new file mode 100644
index 00000000..921dad79
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_weibo.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_weibo import ConnectionOptionsWeibo
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentWeibo(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=weibo
+ """
+
+ strategy: typing.Literal["weibo"] = "weibo"
+ options: typing.Optional[ConnectionOptionsWeibo] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_windows_live.py b/src/auth0/management/types/connection_response_content_windows_live.py
new file mode 100644
index 00000000..0ba92317
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_windows_live.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_windows_live import ConnectionOptionsWindowsLive
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentWindowsLive(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=windowslive
+ """
+
+ strategy: typing.Literal["windowslive"] = "windowslive"
+ options: typing.Optional[ConnectionOptionsWindowsLive] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_wordpress.py b/src/auth0/management/types/connection_response_content_wordpress.py
new file mode 100644
index 00000000..5cbc1a05
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_wordpress.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_wordpress import ConnectionOptionsWordpress
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentWordpress(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=wordpress
+ """
+
+ strategy: typing.Literal["wordpress"] = "wordpress"
+ options: typing.Optional[ConnectionOptionsWordpress] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_yahoo.py b/src/auth0/management/types/connection_response_content_yahoo.py
new file mode 100644
index 00000000..476b17ea
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_yahoo.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_yahoo import ConnectionOptionsYahoo
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentYahoo(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=yahoo
+ """
+
+ strategy: typing.Literal["yahoo"] = "yahoo"
+ options: typing.Optional[ConnectionOptionsYahoo] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_yammer.py b/src/auth0/management/types/connection_response_content_yammer.py
new file mode 100644
index 00000000..aefd40e8
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_yammer.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_yammer import ConnectionOptionsYammer
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentYammer(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=yammer
+ """
+
+ strategy: typing.Literal["yammer"] = "yammer"
+ options: typing.Optional[ConnectionOptionsYammer] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_content_yandex.py b/src/auth0/management/types/connection_response_content_yandex.py
new file mode 100644
index 00000000..9fe816e7
--- /dev/null
+++ b/src/auth0/management/types/connection_response_content_yandex.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_yandex import ConnectionOptionsYandex
+from .connection_response_common import ConnectionResponseCommon
+
+
+class ConnectionResponseContentYandex(ConnectionResponseCommon):
+ """
+ Response for connections with strategy=yandex
+ """
+
+ strategy: typing.Literal["yandex"] = "yandex"
+ options: typing.Optional[ConnectionOptionsYandex] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_response_modes_supported.py b/src/auth0/management/types/connection_response_modes_supported.py
new file mode 100644
index 00000000..dde277b9
--- /dev/null
+++ b/src/auth0/management/types/connection_response_modes_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionResponseModesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_response_types_supported.py b/src/auth0/management/types/connection_response_types_supported.py
new file mode 100644
index 00000000..e9d40d46
--- /dev/null
+++ b/src/auth0/management/types/connection_response_types_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionResponseTypesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_scope_array.py b/src/auth0/management/types/connection_scope_array.py
new file mode 100644
index 00000000..93a278e3
--- /dev/null
+++ b/src/auth0/management/types/connection_scope_array.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .connection_scope_item import ConnectionScopeItem
+
+ConnectionScopeArray = typing.List[ConnectionScopeItem]
diff --git a/src/auth0/management/types/connection_scope_azure_ad.py b/src/auth0/management/types/connection_scope_azure_ad.py
new file mode 100644
index 00000000..d8ec5f00
--- /dev/null
+++ b/src/auth0/management/types/connection_scope_azure_ad.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionScopeAzureAd = typing.List[str]
diff --git a/src/auth0/management/types/connection_scope_google_o_auth_2.py b/src/auth0/management/types/connection_scope_google_o_auth_2.py
new file mode 100644
index 00000000..977e5ef9
--- /dev/null
+++ b/src/auth0/management/types/connection_scope_google_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_scope_array import ConnectionScopeArray
+
+ConnectionScopeGoogleOAuth2 = ConnectionScopeArray
diff --git a/src/auth0/management/types/connection_scope_item.py b/src/auth0/management/types/connection_scope_item.py
new file mode 100644
index 00000000..bd24ba0e
--- /dev/null
+++ b/src/auth0/management/types/connection_scope_item.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionScopeItem = str
diff --git a/src/auth0/management/types/connection_scope_o_auth_2.py b/src/auth0/management/types/connection_scope_o_auth_2.py
new file mode 100644
index 00000000..928f399a
--- /dev/null
+++ b/src/auth0/management/types/connection_scope_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionScopeOAuth2 = typing.Union[str, typing.List[str]]
diff --git a/src/auth0/management/types/connection_scope_oidc.py b/src/auth0/management/types/connection_scope_oidc.py
new file mode 100644
index 00000000..283ef1a9
--- /dev/null
+++ b/src/auth0/management/types/connection_scope_oidc.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionScopeOidc = str
diff --git a/src/auth0/management/types/connection_scopes_supported.py b/src/auth0/management/types/connection_scopes_supported.py
new file mode 100644
index 00000000..2303a355
--- /dev/null
+++ b/src/auth0/management/types/connection_scopes_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionScopesSupported = typing.Optional[typing.List[str]]
diff --git a/src/auth0/management/types/connection_scripts_o_auth_2.py b/src/auth0/management/types/connection_scripts_o_auth_2.py
new file mode 100644
index 00000000..0d94ae1c
--- /dev/null
+++ b/src/auth0/management/types/connection_scripts_o_auth_2.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class ConnectionScriptsOAuth2(UniversalBaseModel):
+ """
+ Custom scripts to transform user profile data or modify OAuth2 flow behavior
+ """
+
+ fetch_user_profile: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="fetchUserProfile")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Custom JavaScript function to retrieve and transform user profile data from the identity provider. Called with the access token and token exchange response. Must return a user profile object. Executed in a sandboxed environment. If not provided, an empty profile object is used.
+ """
+
+ get_logout_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="getLogoutUrl")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Custom JavaScript function to dynamically construct the logout URL for the identity provider. Called with the request query parameters and must invoke a callback with the logout URL. Only used if 'logoutUrl' is not configured. Executed in a sandboxed environment.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_send_back_channel_nonce.py b/src/auth0/management/types/connection_send_back_channel_nonce.py
new file mode 100644
index 00000000..62f34be8
--- /dev/null
+++ b/src/auth0/management/types/connection_send_back_channel_nonce.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionSendBackChannelNonce = bool
diff --git a/src/auth0/management/types/connection_service_documentation.py b/src/auth0/management/types/connection_service_documentation.py
new file mode 100644
index 00000000..cd034353
--- /dev/null
+++ b/src/auth0/management/types/connection_service_documentation.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_https_url_with_http_fallback import ConnectionHttpsUrlWithHttpFallback
+
+ConnectionServiceDocumentation = ConnectionHttpsUrlWithHttpFallback
diff --git a/src/auth0/management/types/connection_set_user_root_attributes_enum.py b/src/auth0/management/types/connection_set_user_root_attributes_enum.py
new file mode 100644
index 00000000..8708438a
--- /dev/null
+++ b/src/auth0/management/types/connection_set_user_root_attributes_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionSetUserRootAttributesEnum = typing.Union[
+ typing.Literal["on_each_login", "on_first_login", "never_on_login"], typing.Any
+]
diff --git a/src/auth0/management/types/connection_should_trust_email_verified_connection_enum.py b/src/auth0/management/types/connection_should_trust_email_verified_connection_enum.py
new file mode 100644
index 00000000..2d4e3e13
--- /dev/null
+++ b/src/auth0/management/types/connection_should_trust_email_verified_connection_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionShouldTrustEmailVerifiedConnectionEnum = typing.Union[
+ typing.Literal["never_set_emails_as_verified", "always_set_emails_as_verified"], typing.Any
+]
diff --git a/src/auth0/management/types/connection_show_as_button.py b/src/auth0/management/types/connection_show_as_button.py
new file mode 100644
index 00000000..abac91df
--- /dev/null
+++ b/src/auth0/management/types/connection_show_as_button.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionShowAsButton = bool
diff --git a/src/auth0/management/types/connection_strategy_enum.py b/src/auth0/management/types/connection_strategy_enum.py
new file mode 100644
index 00000000..401ed2e3
--- /dev/null
+++ b/src/auth0/management/types/connection_strategy_enum.py
@@ -0,0 +1,72 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionStrategyEnum = typing.Union[
+ typing.Literal[
+ "ad",
+ "adfs",
+ "amazon",
+ "apple",
+ "dropbox",
+ "bitbucket",
+ "aol",
+ "auth0-oidc",
+ "auth0",
+ "baidu",
+ "bitly",
+ "box",
+ "custom",
+ "daccount",
+ "dwolla",
+ "email",
+ "evernote-sandbox",
+ "evernote",
+ "exact",
+ "facebook",
+ "fitbit",
+ "flickr",
+ "github",
+ "google-apps",
+ "google-oauth2",
+ "instagram",
+ "ip",
+ "line",
+ "linkedin",
+ "miicard",
+ "oauth1",
+ "oauth2",
+ "office365",
+ "oidc",
+ "okta",
+ "paypal",
+ "paypal-sandbox",
+ "pingfederate",
+ "planningcenter",
+ "renren",
+ "salesforce-community",
+ "salesforce-sandbox",
+ "salesforce",
+ "samlp",
+ "sharepoint",
+ "shopify",
+ "shop",
+ "sms",
+ "soundcloud",
+ "thecity-sandbox",
+ "thecity",
+ "thirtysevensignals",
+ "twitter",
+ "untappd",
+ "vkontakte",
+ "waad",
+ "weibo",
+ "windowslive",
+ "wordpress",
+ "yahoo",
+ "yammer",
+ "yandex",
+ "auth0-adldap",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/connection_strategy_version_enum_azure_ad.py b/src/auth0/management/types/connection_strategy_version_enum_azure_ad.py
new file mode 100644
index 00000000..455fe040
--- /dev/null
+++ b/src/auth0/management/types/connection_strategy_version_enum_azure_ad.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionStrategyVersionEnumAzureAd = int
diff --git a/src/auth0/management/types/connection_subject_types_supported.py b/src/auth0/management/types/connection_subject_types_supported.py
new file mode 100644
index 00000000..fb4ecde2
--- /dev/null
+++ b/src/auth0/management/types/connection_subject_types_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionSubjectTypesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_tenant_domain.py b/src/auth0/management/types/connection_tenant_domain.py
new file mode 100644
index 00000000..d41ac75a
--- /dev/null
+++ b/src/auth0/management/types/connection_tenant_domain.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionTenantDomain = typing.Optional[str]
diff --git a/src/auth0/management/types/connection_tenant_domain_azure_ad_one.py b/src/auth0/management/types/connection_tenant_domain_azure_ad_one.py
new file mode 100644
index 00000000..5000e3b8
--- /dev/null
+++ b/src/auth0/management/types/connection_tenant_domain_azure_ad_one.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionTenantDomainAzureAdOne = str
diff --git a/src/auth0/management/types/connection_tenant_id_azure_ad.py b/src/auth0/management/types/connection_tenant_id_azure_ad.py
new file mode 100644
index 00000000..2a9c9e52
--- /dev/null
+++ b/src/auth0/management/types/connection_tenant_id_azure_ad.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionTenantIdAzureAd = str
diff --git a/src/auth0/management/types/connection_thumbprints.py b/src/auth0/management/types/connection_thumbprints.py
new file mode 100644
index 00000000..d57a6b9d
--- /dev/null
+++ b/src/auth0/management/types/connection_thumbprints.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionThumbprints = typing.List[str]
diff --git a/src/auth0/management/types/connection_token_endpoint.py b/src/auth0/management/types/connection_token_endpoint.py
new file mode 100644
index 00000000..5e395c71
--- /dev/null
+++ b/src/auth0/management/types/connection_token_endpoint.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_https_url_with_http_fallback import ConnectionHttpsUrlWithHttpFallback
+
+ConnectionTokenEndpoint = ConnectionHttpsUrlWithHttpFallback
diff --git a/src/auth0/management/types/connection_token_endpoint_auth_method_enum.py b/src/auth0/management/types/connection_token_endpoint_auth_method_enum.py
new file mode 100644
index 00000000..00390580
--- /dev/null
+++ b/src/auth0/management/types/connection_token_endpoint_auth_method_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionTokenEndpointAuthMethodEnum = typing.Union[
+ typing.Literal["client_secret_post", "private_key_jwt"], typing.Any
+]
diff --git a/src/auth0/management/types/connection_token_endpoint_auth_methods_supported.py b/src/auth0/management/types/connection_token_endpoint_auth_methods_supported.py
new file mode 100644
index 00000000..058278ab
--- /dev/null
+++ b/src/auth0/management/types/connection_token_endpoint_auth_methods_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionTokenEndpointAuthMethodsSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_token_endpoint_auth_signing_alg_enum.py b/src/auth0/management/types/connection_token_endpoint_auth_signing_alg_enum.py
new file mode 100644
index 00000000..f236ab17
--- /dev/null
+++ b/src/auth0/management/types/connection_token_endpoint_auth_signing_alg_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionTokenEndpointAuthSigningAlgEnum = typing.Union[typing.Literal["ES256", "PS256", "RS256", "RS512"], typing.Any]
diff --git a/src/auth0/management/types/connection_token_endpoint_auth_signing_alg_values_supported.py b/src/auth0/management/types/connection_token_endpoint_auth_signing_alg_values_supported.py
new file mode 100644
index 00000000..0dec5960
--- /dev/null
+++ b/src/auth0/management/types/connection_token_endpoint_auth_signing_alg_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionTokenEndpointAuthSigningAlgValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_token_endpoint_o_auth_2.py b/src/auth0/management/types/connection_token_endpoint_o_auth_2.py
new file mode 100644
index 00000000..e2c5da35
--- /dev/null
+++ b/src/auth0/management/types/connection_token_endpoint_o_auth_2.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_token_endpoint import ConnectionTokenEndpoint
+
+ConnectionTokenEndpointOAuth2 = ConnectionTokenEndpoint
diff --git a/src/auth0/management/types/connection_token_endpoint_oidc.py b/src/auth0/management/types/connection_token_endpoint_oidc.py
new file mode 100644
index 00000000..ff70c21c
--- /dev/null
+++ b/src/auth0/management/types/connection_token_endpoint_oidc.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_token_endpoint import ConnectionTokenEndpoint
+
+ConnectionTokenEndpointOidc = ConnectionTokenEndpoint
diff --git a/src/auth0/management/types/connection_type_enum_oidc.py b/src/auth0/management/types/connection_type_enum_oidc.py
new file mode 100644
index 00000000..9630fd17
--- /dev/null
+++ b/src/auth0/management/types/connection_type_enum_oidc.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionTypeEnumOidc = typing.Union[typing.Literal["back_channel", "front_channel"], typing.Any]
diff --git a/src/auth0/management/types/connection_type_enum_okta.py b/src/auth0/management/types/connection_type_enum_okta.py
new file mode 100644
index 00000000..c41bc8fb
--- /dev/null
+++ b/src/auth0/management/types/connection_type_enum_okta.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionTypeEnumOkta = typing.Literal["back_channel"]
diff --git a/src/auth0/management/types/connection_ui_locales_supported.py b/src/auth0/management/types/connection_ui_locales_supported.py
new file mode 100644
index 00000000..3f8c1c13
--- /dev/null
+++ b/src/auth0/management/types/connection_ui_locales_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionUiLocalesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_upstream_additional_properties.py b/src/auth0/management/types/connection_upstream_additional_properties.py
new file mode 100644
index 00000000..c3ac831e
--- /dev/null
+++ b/src/auth0/management/types/connection_upstream_additional_properties.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .connection_upstream_alias import ConnectionUpstreamAlias
+from .connection_upstream_value import ConnectionUpstreamValue
+
+ConnectionUpstreamAdditionalProperties = typing.Union[ConnectionUpstreamAlias, ConnectionUpstreamValue]
diff --git a/src/auth0/management/types/connection_upstream_alias.py b/src/auth0/management/types/connection_upstream_alias.py
new file mode 100644
index 00000000..71cf0c5b
--- /dev/null
+++ b/src/auth0/management/types/connection_upstream_alias.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_upstream_alias_enum import ConnectionUpstreamAliasEnum
+
+
+class ConnectionUpstreamAlias(UniversalBaseModel):
+ alias: typing.Optional[ConnectionUpstreamAliasEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_upstream_alias_enum.py b/src/auth0/management/types/connection_upstream_alias_enum.py
new file mode 100644
index 00000000..cab732b9
--- /dev/null
+++ b/src/auth0/management/types/connection_upstream_alias_enum.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionUpstreamAliasEnum = typing.Union[
+ typing.Literal[
+ "acr_values",
+ "audience",
+ "client_id",
+ "display",
+ "id_token_hint",
+ "login_hint",
+ "max_age",
+ "prompt",
+ "resource",
+ "response_mode",
+ "response_type",
+ "ui_locales",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/connection_upstream_params.py b/src/auth0/management/types/connection_upstream_params.py
new file mode 100644
index 00000000..5dfc1859
--- /dev/null
+++ b/src/auth0/management/types/connection_upstream_params.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .connection_upstream_additional_properties import ConnectionUpstreamAdditionalProperties
+
+ConnectionUpstreamParams = typing.Optional[typing.Dict[str, typing.Optional[ConnectionUpstreamAdditionalProperties]]]
diff --git a/src/auth0/management/types/connection_upstream_params_azure_ad.py b/src/auth0/management/types/connection_upstream_params_azure_ad.py
new file mode 100644
index 00000000..4a0b035a
--- /dev/null
+++ b/src/auth0/management/types/connection_upstream_params_azure_ad.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .connection_upstream_params import ConnectionUpstreamParams
+
+ConnectionUpstreamParamsAzureAd = typing.Optional[ConnectionUpstreamParams]
diff --git a/src/auth0/management/types/connection_upstream_params_oidc.py b/src/auth0/management/types/connection_upstream_params_oidc.py
new file mode 100644
index 00000000..639ee13e
--- /dev/null
+++ b/src/auth0/management/types/connection_upstream_params_oidc.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .connection_upstream_params import ConnectionUpstreamParams
+
+ConnectionUpstreamParamsOidc = typing.Optional[ConnectionUpstreamParams]
diff --git a/src/auth0/management/types/connection_upstream_value.py b/src/auth0/management/types/connection_upstream_value.py
new file mode 100644
index 00000000..408e622c
--- /dev/null
+++ b/src/auth0/management/types/connection_upstream_value.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionUpstreamValue(UniversalBaseModel):
+ value: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_use_common_endpoint_azure_ad.py b/src/auth0/management/types/connection_use_common_endpoint_azure_ad.py
new file mode 100644
index 00000000..b04c1adf
--- /dev/null
+++ b/src/auth0/management/types/connection_use_common_endpoint_azure_ad.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+ConnectionUseCommonEndpointAzureAd = bool
diff --git a/src/auth0/management/types/connection_userid_attribute_azure_ad.py b/src/auth0/management/types/connection_userid_attribute_azure_ad.py
new file mode 100644
index 00000000..bbe76bb1
--- /dev/null
+++ b/src/auth0/management/types/connection_userid_attribute_azure_ad.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_userid_attribute_enum_azure_ad import ConnectionUseridAttributeEnumAzureAd
+
+ConnectionUseridAttributeAzureAd = ConnectionUseridAttributeEnumAzureAd
diff --git a/src/auth0/management/types/connection_userid_attribute_enum_azure_ad.py b/src/auth0/management/types/connection_userid_attribute_enum_azure_ad.py
new file mode 100644
index 00000000..a8456b12
--- /dev/null
+++ b/src/auth0/management/types/connection_userid_attribute_enum_azure_ad.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionUseridAttributeEnumAzureAd = typing.Union[typing.Literal["oid", "sub"], typing.Any]
diff --git a/src/auth0/management/types/connection_userinfo_encryption_alg_values_supported.py b/src/auth0/management/types/connection_userinfo_encryption_alg_values_supported.py
new file mode 100644
index 00000000..703ac5c0
--- /dev/null
+++ b/src/auth0/management/types/connection_userinfo_encryption_alg_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionUserinfoEncryptionAlgValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_userinfo_encryption_enc_values_supported.py b/src/auth0/management/types/connection_userinfo_encryption_enc_values_supported.py
new file mode 100644
index 00000000..eb37978e
--- /dev/null
+++ b/src/auth0/management/types/connection_userinfo_encryption_enc_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionUserinfoEncryptionEncValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_userinfo_endpoint.py b/src/auth0/management/types/connection_userinfo_endpoint.py
new file mode 100644
index 00000000..0f75fd41
--- /dev/null
+++ b/src/auth0/management/types/connection_userinfo_endpoint.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_https_url_with_http_fallback import ConnectionHttpsUrlWithHttpFallback
+
+ConnectionUserinfoEndpoint = ConnectionHttpsUrlWithHttpFallback
diff --git a/src/auth0/management/types/connection_userinfo_endpoint_oidc.py b/src/auth0/management/types/connection_userinfo_endpoint_oidc.py
new file mode 100644
index 00000000..04504531
--- /dev/null
+++ b/src/auth0/management/types/connection_userinfo_endpoint_oidc.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_userinfo_endpoint import ConnectionUserinfoEndpoint
+
+ConnectionUserinfoEndpointOidc = ConnectionUserinfoEndpoint
diff --git a/src/auth0/management/types/connection_userinfo_signing_alg_values_supported.py b/src/auth0/management/types/connection_userinfo_signing_alg_values_supported.py
new file mode 100644
index 00000000..1b4c7312
--- /dev/null
+++ b/src/auth0/management/types/connection_userinfo_signing_alg_values_supported.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionUserinfoSigningAlgValuesSupported = typing.List[str]
diff --git a/src/auth0/management/types/connection_username_validation_options.py b/src/auth0/management/types/connection_username_validation_options.py
new file mode 100644
index 00000000..d3b1610f
--- /dev/null
+++ b/src/auth0/management/types/connection_username_validation_options.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ConnectionUsernameValidationOptions(UniversalBaseModel):
+ min: int
+ max: int
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_validation_options.py b/src/auth0/management/types/connection_validation_options.py
new file mode 100644
index 00000000..b6ad46d7
--- /dev/null
+++ b/src/auth0/management/types/connection_validation_options.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_username_validation_options import ConnectionUsernameValidationOptions
+
+
+class ConnectionValidationOptions(UniversalBaseModel):
+ """
+ Options for validation
+ """
+
+ username: typing.Optional[ConnectionUsernameValidationOptions] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/connection_waad_protocol.py b/src/auth0/management/types/connection_waad_protocol.py
new file mode 100644
index 00000000..85f5ec99
--- /dev/null
+++ b/src/auth0/management/types/connection_waad_protocol.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .connection_waad_protocol_enum_azure_ad import ConnectionWaadProtocolEnumAzureAd
+
+ConnectionWaadProtocol = ConnectionWaadProtocolEnumAzureAd
diff --git a/src/auth0/management/types/connection_waad_protocol_enum_azure_ad.py b/src/auth0/management/types/connection_waad_protocol_enum_azure_ad.py
new file mode 100644
index 00000000..c3153147
--- /dev/null
+++ b/src/auth0/management/types/connection_waad_protocol_enum_azure_ad.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionWaadProtocolEnumAzureAd = typing.Union[typing.Literal["ws-federation", "openid-connect"], typing.Any]
diff --git a/src/auth0/management/types/connections_metadata.py b/src/auth0/management/types/connections_metadata.py
new file mode 100644
index 00000000..d034a95a
--- /dev/null
+++ b/src/auth0/management/types/connections_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ConnectionsMetadata = typing.Dict[str, typing.Optional[str]]
diff --git a/src/auth0/management/types/create_action_response_content.py b/src/auth0/management/types/create_action_response_content.py
new file mode 100644
index 00000000..3ca3bfe8
--- /dev/null
+++ b/src/auth0/management/types/create_action_response_content.py
@@ -0,0 +1,92 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_build_status_enum import ActionBuildStatusEnum
+from .action_deployed_version import ActionDeployedVersion
+from .action_secret_response import ActionSecretResponse
+from .action_trigger import ActionTrigger
+from .action_version_dependency import ActionVersionDependency
+from .integration import Integration
+
+
+class CreateActionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The unique ID of the action.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="my-action")
+ """
+ The name of an action.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this action supports. At this time, an action can only target a single trigger at a time.
+ """
+
+ all_changes_deployed: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if all of an Action's contents have been deployed.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was updated.
+ """
+
+ code: typing.Optional[str] = pydantic.Field(default="module.exports = () => {}")
+ """
+ The source code of the action.
+ """
+
+ dependencies: typing.Optional[typing.List[ActionVersionDependency]] = pydantic.Field(default=None)
+ """
+ The list of third party npm modules, and their versions, that this action depends on.
+ """
+
+ runtime: typing.Optional[str] = pydantic.Field(default="node22")
+ """
+ The Node runtime. For example: `node22`, defaults to `node22`
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretResponse]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ deployed_version: typing.Optional[ActionDeployedVersion] = None
+ installed_integration_id: typing.Optional[str] = pydantic.Field(default="7d2bc0c9-c0c2-433a-9f4e-86ef80270aad")
+ """
+ installed_integration_id is the fk reference to the InstalledIntegration entity.
+ """
+
+ integration: typing.Optional[Integration] = None
+ status: typing.Optional[ActionBuildStatusEnum] = None
+ built_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was built successfully.
+ """
+
+ deploy: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if the action should be deployed after creation.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_branding_phone_provider_response_content.py b/src/auth0/management/types/create_branding_phone_provider_response_content.py
new file mode 100644
index 00000000..bee6ff95
--- /dev/null
+++ b/src/auth0/management/types/create_branding_phone_provider_response_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .phone_provider_channel_enum import PhoneProviderChannelEnum
+from .phone_provider_configuration import PhoneProviderConfiguration
+from .phone_provider_name_enum import PhoneProviderNameEnum
+
+
+class CreateBrandingPhoneProviderResponseContent(UniversalBaseModel):
+ """
+ Phone provider configuration schema
+ """
+
+ id: typing.Optional[str] = None
+ tenant: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the tenant
+ """
+
+ name: PhoneProviderNameEnum
+ channel: typing.Optional[PhoneProviderChannelEnum] = None
+ disabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the provider is enabled (false) or disabled (true).
+ """
+
+ configuration: typing.Optional[PhoneProviderConfiguration] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The provider's creation date and time in ISO 8601 format
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time of the last update to the provider in ISO 8601 format
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_branding_theme_response_content.py b/src/auth0/management/types/create_branding_theme_response_content.py
new file mode 100644
index 00000000..66e630c0
--- /dev/null
+++ b/src/auth0/management/types/create_branding_theme_response_content.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .branding_theme_borders import BrandingThemeBorders
+from .branding_theme_colors import BrandingThemeColors
+from .branding_theme_fonts import BrandingThemeFonts
+from .branding_theme_page_background import BrandingThemePageBackground
+from .branding_theme_widget import BrandingThemeWidget
+
+
+class CreateBrandingThemeResponseContent(UniversalBaseModel):
+ borders: BrandingThemeBorders
+ colors: BrandingThemeColors
+ display_name: typing_extensions.Annotated[str, FieldMetadata(alias="displayName")] = pydantic.Field()
+ """
+ Display Name
+ """
+
+ fonts: BrandingThemeFonts
+ page_background: BrandingThemePageBackground
+ theme_id: typing_extensions.Annotated[str, FieldMetadata(alias="themeId")] = pydantic.Field()
+ """
+ Theme Id
+ """
+
+ widget: BrandingThemeWidget
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_client_grant_response_content.py b/src/auth0/management/types/create_client_grant_response_content.py
new file mode 100644
index 00000000..6a40b96d
--- /dev/null
+++ b/src/auth0/management/types/create_client_grant_response_content.py
@@ -0,0 +1,56 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_grant_organization_usage_enum import ClientGrantOrganizationUsageEnum
+from .client_grant_subject_type_enum import ClientGrantSubjectTypeEnum
+
+
+class CreateClientGrantResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the client grant.
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the client.
+ """
+
+ audience: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The audience (API identifier) of this client grant.
+ """
+
+ scope: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Scopes allowed for this client grant.
+ """
+
+ organization_usage: typing.Optional[ClientGrantOrganizationUsageEnum] = None
+ allow_any_organization: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, any organization can be used with this grant. If disabled (default), the grant must be explicitly assigned to the desired organizations.
+ """
+
+ is_system: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, this grant is a special grant created by Auth0. It cannot be modified or deleted directly.
+ """
+
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = None
+ authorization_details_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_client_response_content.py b/src/auth0/management/types/create_client_response_content.py
new file mode 100644
index 00000000..cb69a944
--- /dev/null
+++ b/src/auth0/management/types/create_client_response_content.py
@@ -0,0 +1,235 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .client_addons import ClientAddons
+from .client_app_type_enum import ClientAppTypeEnum
+from .client_async_approval_notifications_channels_api_post_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration,
+)
+from .client_authentication_method import ClientAuthenticationMethod
+from .client_compliance_level_enum import ClientComplianceLevelEnum
+from .client_default_organization import ClientDefaultOrganization
+from .client_encryption_key import ClientEncryptionKey
+from .client_jwt_configuration import ClientJwtConfiguration
+from .client_metadata import ClientMetadata
+from .client_mobile import ClientMobile
+from .client_oidc_backchannel_logout_settings import ClientOidcBackchannelLogoutSettings
+from .client_organization_discovery_enum import ClientOrganizationDiscoveryEnum
+from .client_organization_require_behavior_enum import ClientOrganizationRequireBehaviorEnum
+from .client_organization_usage_enum import ClientOrganizationUsageEnum
+from .client_refresh_token_configuration import ClientRefreshTokenConfiguration
+from .client_session_transfer_configuration import ClientSessionTransferConfiguration
+from .client_signed_request_object_with_credential_id import ClientSignedRequestObjectWithCredentialId
+from .client_signing_keys import ClientSigningKeys
+from .client_token_endpoint_auth_method_enum import ClientTokenEndpointAuthMethodEnum
+from .client_token_exchange_configuration import ClientTokenExchangeConfiguration
+from .express_configuration import ExpressConfiguration
+from .token_quota import TokenQuota
+
+
+class CreateClientResponseContent(UniversalBaseModel):
+ client_id: typing.Optional[str] = pydantic.Field(default="AaiyAPdpYdesoKnqjj8HJqRn4T5titww")
+ """
+ ID of this client.
+ """
+
+ tenant: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Name of the tenant this client belongs to.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="My application")
+ """
+ Name of this client (min length: 1 character, does not allow `<` or `>`).
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Free text description of this client (max length: 140 characters).
+ """
+
+ global_: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="global")] = pydantic.Field(
+ default=False
+ )
+ """
+ Whether this is your global 'All Applications' client representing legacy tenant settings (true) or a regular client (false).
+ """
+
+ client_secret: typing.Optional[str] = pydantic.Field(
+ default="MG_TNT2ver-SylNat-_VeMmd-4m0Waba0jr1troztBniSChEw0glxEmgEi2Kw40H"
+ )
+ """
+ Client secret (which you must not make public).
+ """
+
+ app_type: typing.Optional[ClientAppTypeEnum] = None
+ logo_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL of the logo to display for this client. Recommended size is 150x150 pixels.
+ """
+
+ is_first_party: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this client a first party client (true) or not (false).
+ """
+
+ oidc_conformant: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this client conforms to strict OIDC specifications (true) or uses legacy features (false).
+ """
+
+ callbacks: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs whitelisted for Auth0 to use as a callback to the client after authentication.
+ """
+
+ allowed_origins: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs allowed to make requests from JavaScript to Auth0 API (typically used with CORS). By default, all your callback URLs will be allowed. This field allows you to enter other origins if necessary. You can also use wildcards at the subdomain level (e.g., https://*.contoso.com). Query strings and hash information are not taken into account when validating these URLs.
+ """
+
+ web_origins: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of allowed origins for use with Cross-Origin Authentication, Device Flow, and web message response mode.
+ """
+
+ client_aliases: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of audiences/realms for SAML protocol. Used by the wsfed addon.
+ """
+
+ allowed_clients: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of allow clients and API ids that are allowed to make delegation requests. Empty means all all your clients are allowed.
+ """
+
+ allowed_logout_urls: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs that are valid to redirect to after logout from Auth0. Wildcards are allowed for subdomains.
+ """
+
+ session_transfer: typing.Optional[ClientSessionTransferConfiguration] = None
+ oidc_logout: typing.Optional[ClientOidcBackchannelLogoutSettings] = None
+ grant_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of grant types supported for this application. Can include `authorization_code`, `implicit`, `refresh_token`, `client_credentials`, `password`, `http://auth0.com/oauth/grant-type/password-realm`, `http://auth0.com/oauth/grant-type/mfa-oob`, `http://auth0.com/oauth/grant-type/mfa-otp`, `http://auth0.com/oauth/grant-type/mfa-recovery-code`, `urn:openid:params:grant-type:ciba`, `urn:ietf:params:oauth:grant-type:device_code`, and `urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token`.
+ """
+
+ jwt_configuration: typing.Optional[ClientJwtConfiguration] = None
+ signing_keys: typing.Optional[ClientSigningKeys] = None
+ encryption_key: typing.Optional[ClientEncryptionKey] = None
+ sso: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Applies only to SSO clients and determines whether Auth0 will handle Single Sign On (true) or whether the Identity Provider will (false).
+ """
+
+ sso_disabled: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether Single Sign On is disabled (true) or enabled (true). Defaults to true.
+ """
+
+ cross_origin_authentication: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this client can be used to make cross-origin authentication requests (true) or it is not allowed to make such requests (false).
+ """
+
+ cross_origin_loc: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL of the location in your site where the cross origin verification takes place for the cross-origin auth flow when performing Auth in your own domain instead of Auth0 hosted login page.
+ """
+
+ custom_login_page_on: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether a custom login page is to be used (true) or the default provided login page (false).
+ """
+
+ custom_login_page: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The content (HTML, CSS, JS) of the custom login page.
+ """
+
+ custom_login_page_preview: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The content (HTML, CSS, JS) of the custom login page. (Used on Previews)
+ """
+
+ form_template: typing.Optional[str] = pydantic.Field(default="")
+ """
+ HTML form template to be used for WS-Federation.
+ """
+
+ addons: typing.Optional[ClientAddons] = None
+ token_endpoint_auth_method: typing.Optional[ClientTokenEndpointAuthMethodEnum] = None
+ is_token_endpoint_ip_header_trusted: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ If true, trust that the IP specified in the `auth0-forwarded-for` header is the end-user's IP for brute-force-protection on token endpoint.
+ """
+
+ client_metadata: typing.Optional[ClientMetadata] = None
+ mobile: typing.Optional[ClientMobile] = None
+ initiate_login_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Initiate login uri, must be https
+ """
+
+ refresh_token: typing.Optional[ClientRefreshTokenConfiguration] = None
+ default_organization: typing.Optional[ClientDefaultOrganization] = None
+ organization_usage: typing.Optional[ClientOrganizationUsageEnum] = None
+ organization_require_behavior: typing.Optional[ClientOrganizationRequireBehaviorEnum] = None
+ organization_discovery_methods: typing.Optional[typing.List[ClientOrganizationDiscoveryEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+ """
+
+ client_authentication_methods: typing.Optional[ClientAuthenticationMethod] = None
+ require_pushed_authorization_requests: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Makes the use of Pushed Authorization Requests mandatory for this client
+ """
+
+ require_proof_of_possession: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Makes the use of Proof-of-Possession mandatory for this client
+ """
+
+ signed_request_object: typing.Optional[ClientSignedRequestObjectWithCredentialId] = None
+ compliance_level: typing.Optional[ClientComplianceLevelEnum] = None
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+ """
+
+ token_exchange: typing.Optional[ClientTokenExchangeConfiguration] = None
+ par_request_expiry: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+ """
+
+ token_quota: typing.Optional[TokenQuota] = None
+ express_configuration: typing.Optional[ExpressConfiguration] = None
+ resource_server_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The identifier of the resource server that this client is linked to.
+ """
+
+ async_approval_notification_channels: typing.Optional[
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration
+ ] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_common.py b/src/auth0/management/types/create_connection_common.py
new file mode 100644
index 00000000..9439c0c2
--- /dev/null
+++ b/src/auth0/management/types/create_connection_common.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_common import ConnectionCommon
+from .connection_name import ConnectionName
+
+
+class CreateConnectionCommon(ConnectionCommon):
+ name: typing.Optional[ConnectionName] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_profile_response_content.py b/src/auth0/management/types/create_connection_profile_response_content.py
new file mode 100644
index 00000000..fb227f61
--- /dev/null
+++ b/src/auth0/management/types/create_connection_profile_response_content.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_name_prefix_template import ConnectionNamePrefixTemplate
+from .connection_profile_config import ConnectionProfileConfig
+from .connection_profile_enabled_features import ConnectionProfileEnabledFeatures
+from .connection_profile_id import ConnectionProfileId
+from .connection_profile_name import ConnectionProfileName
+from .connection_profile_organization import ConnectionProfileOrganization
+from .connection_profile_strategy_overrides import ConnectionProfileStrategyOverrides
+
+
+class CreateConnectionProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[ConnectionProfileId] = None
+ name: typing.Optional[ConnectionProfileName] = None
+ organization: typing.Optional[ConnectionProfileOrganization] = None
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = None
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = None
+ connection_config: typing.Optional[ConnectionProfileConfig] = None
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_ad.py b/src/auth0/management/types/create_connection_request_content_ad.py
new file mode 100644
index 00000000..0d551745
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_ad.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_ad import ConnectionOptionsAd
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentAd(CreateConnectionCommon):
+ """
+ Create a connection with strategy=ad
+ """
+
+ strategy: typing.Literal["ad"] = "ad"
+ options: typing.Optional[ConnectionOptionsAd] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_adfs.py b/src/auth0/management/types/create_connection_request_content_adfs.py
new file mode 100644
index 00000000..e377b0f3
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_adfs.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_adfs import ConnectionOptionsAdfs
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentAdfs(CreateConnectionCommon):
+ """
+ Create a connection with strategy=adfs
+ """
+
+ strategy: typing.Literal["adfs"] = "adfs"
+ options: typing.Optional[ConnectionOptionsAdfs] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_amazon.py b/src/auth0/management/types/create_connection_request_content_amazon.py
new file mode 100644
index 00000000..961e78e7
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_amazon.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_amazon import ConnectionOptionsAmazon
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentAmazon(CreateConnectionCommon):
+ """
+ Create a connection with strategy=amazon
+ """
+
+ strategy: typing.Literal["amazon"] = "amazon"
+ options: typing.Optional[ConnectionOptionsAmazon] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_aol.py b/src/auth0/management/types/create_connection_request_content_aol.py
new file mode 100644
index 00000000..1d194fb5
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_aol.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_aol import ConnectionOptionsAol
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentAol(CreateConnectionCommon):
+ """
+ Create a connection with strategy=aol
+ """
+
+ strategy: typing.Literal["aol"] = "aol"
+ options: typing.Optional[ConnectionOptionsAol] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_apple.py b/src/auth0/management/types/create_connection_request_content_apple.py
new file mode 100644
index 00000000..38834df9
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_apple.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_apple import ConnectionOptionsApple
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentApple(CreateConnectionCommon):
+ """
+ Create a connection with strategy=apple
+ """
+
+ strategy: typing.Literal["apple"] = "apple"
+ options: typing.Optional[ConnectionOptionsApple] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_auth_0.py b/src/auth0/management/types/create_connection_request_content_auth_0.py
new file mode 100644
index 00000000..540d6e9a
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_auth_0.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_auth_0 import ConnectionOptionsAuth0
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentAuth0(CreateConnectionCommon):
+ """
+ Create a connection with strategy=auth0
+ """
+
+ strategy: typing.Literal["auth0"] = "auth0"
+ options: typing.Optional[ConnectionOptionsAuth0] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_auth_0_oidc.py b/src/auth0/management/types/create_connection_request_content_auth_0_oidc.py
new file mode 100644
index 00000000..82e11add
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_auth_0_oidc.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_auth_0_oidc import ConnectionOptionsAuth0Oidc
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentAuth0Oidc(CreateConnectionCommon):
+ """
+ Create a connection with strategy=auth0-oidc
+ """
+
+ strategy: typing.Literal["auth0-oidc"] = "auth0-oidc"
+ options: typing.Optional[ConnectionOptionsAuth0Oidc] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_azure_ad.py b/src/auth0/management/types/create_connection_request_content_azure_ad.py
new file mode 100644
index 00000000..6d6e7dfb
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_azure_ad.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_azure_ad import ConnectionOptionsAzureAd
+from .connection_provisioning_ticket import ConnectionProvisioningTicket
+from .connection_provisioning_ticket_url import ConnectionProvisioningTicketUrl
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentAzureAd(CreateConnectionCommon):
+ """
+ Create a connection with strategy=waad
+ """
+
+ strategy: typing.Literal["waad"] = "waad"
+ options: typing.Optional[ConnectionOptionsAzureAd] = None
+ provisioning_ticket: typing.Optional[ConnectionProvisioningTicket] = None
+ provisioning_ticket_url: typing.Optional[ConnectionProvisioningTicketUrl] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_baidu.py b/src/auth0/management/types/create_connection_request_content_baidu.py
new file mode 100644
index 00000000..a6680200
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_baidu.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_baidu import ConnectionOptionsBaidu
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentBaidu(CreateConnectionCommon):
+ """
+ Create a connection with strategy=baidu
+ """
+
+ strategy: typing.Literal["baidu"] = "baidu"
+ options: typing.Optional[ConnectionOptionsBaidu] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_bitbucket.py b/src/auth0/management/types/create_connection_request_content_bitbucket.py
new file mode 100644
index 00000000..92d66d64
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_bitbucket.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_bitbucket import ConnectionOptionsBitbucket
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentBitbucket(CreateConnectionCommon):
+ """
+ Create a connection with strategy=bitbucket
+ """
+
+ strategy: typing.Literal["bitbucket"] = "bitbucket"
+ options: typing.Optional[ConnectionOptionsBitbucket] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_bitly.py b/src/auth0/management/types/create_connection_request_content_bitly.py
new file mode 100644
index 00000000..e8907a8f
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_bitly.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_bitly import ConnectionOptionsBitly
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentBitly(CreateConnectionCommon):
+ """
+ Create a connection with strategy=bitly
+ """
+
+ strategy: typing.Literal["bitly"] = "bitly"
+ options: typing.Optional[ConnectionOptionsBitly] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_box.py b/src/auth0/management/types/create_connection_request_content_box.py
new file mode 100644
index 00000000..0ea589a0
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_box.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_box import ConnectionOptionsBox
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentBox(CreateConnectionCommon):
+ """
+ Create a connection with strategy=box
+ """
+
+ strategy: typing.Literal["box"] = "box"
+ options: typing.Optional[ConnectionOptionsBox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_custom.py b/src/auth0/management/types/create_connection_request_content_custom.py
new file mode 100644
index 00000000..026eec6f
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_custom.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_custom import ConnectionOptionsCustom
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentCustom(CreateConnectionCommon):
+ """
+ Create a connection with strategy=custom
+ """
+
+ strategy: typing.Literal["custom"] = "custom"
+ options: typing.Optional[ConnectionOptionsCustom] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_daccount.py b/src/auth0/management/types/create_connection_request_content_daccount.py
new file mode 100644
index 00000000..a366c6e7
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_daccount.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_daccount import ConnectionOptionsDaccount
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentDaccount(CreateConnectionCommon):
+ """
+ Create a connection with strategy=daccount
+ """
+
+ strategy: typing.Literal["daccount"] = "daccount"
+ options: typing.Optional[ConnectionOptionsDaccount] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_dropbox.py b/src/auth0/management/types/create_connection_request_content_dropbox.py
new file mode 100644
index 00000000..56f65e85
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_dropbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_dropbox import ConnectionOptionsDropbox
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentDropbox(CreateConnectionCommon):
+ """
+ Create a connection with strategy=dropbox
+ """
+
+ strategy: typing.Literal["dropbox"] = "dropbox"
+ options: typing.Optional[ConnectionOptionsDropbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_dwolla.py b/src/auth0/management/types/create_connection_request_content_dwolla.py
new file mode 100644
index 00000000..3e8f8caa
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_dwolla.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_dwolla import ConnectionOptionsDwolla
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentDwolla(CreateConnectionCommon):
+ """
+ Create a connection with strategy=dwolla
+ """
+
+ strategy: typing.Literal["dwolla"] = "dwolla"
+ options: typing.Optional[ConnectionOptionsDwolla] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_email.py b/src/auth0/management/types/create_connection_request_content_email.py
new file mode 100644
index 00000000..6b6fda26
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_email.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_email import ConnectionOptionsEmail
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentEmail(CreateConnectionCommon):
+ """
+ Create a connection with strategy=email
+ """
+
+ strategy: typing.Literal["email"] = "email"
+ options: typing.Optional[ConnectionOptionsEmail] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_evernote.py b/src/auth0/management/types/create_connection_request_content_evernote.py
new file mode 100644
index 00000000..140845dc
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_evernote.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_evernote import ConnectionOptionsEvernote
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentEvernote(CreateConnectionCommon):
+ """
+ Create a connection with strategy=evernote
+ """
+
+ strategy: typing.Literal["evernote"] = "evernote"
+ options: typing.Optional[ConnectionOptionsEvernote] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_evernote_sandbox.py b/src/auth0/management/types/create_connection_request_content_evernote_sandbox.py
new file mode 100644
index 00000000..4cf05606
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_evernote_sandbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_evernote_sandbox import ConnectionOptionsEvernoteSandbox
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentEvernoteSandbox(CreateConnectionCommon):
+ """
+ Create a connection with strategy=evernote-sandbox
+ """
+
+ strategy: typing.Literal["evernote-sandbox"] = "evernote-sandbox"
+ options: typing.Optional[ConnectionOptionsEvernoteSandbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_exact.py b/src/auth0/management/types/create_connection_request_content_exact.py
new file mode 100644
index 00000000..0d595307
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_exact.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_exact import ConnectionOptionsExact
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentExact(CreateConnectionCommon):
+ """
+ Create a connection with strategy=exact
+ """
+
+ strategy: typing.Literal["exact"] = "exact"
+ options: typing.Optional[ConnectionOptionsExact] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_facebook.py b/src/auth0/management/types/create_connection_request_content_facebook.py
new file mode 100644
index 00000000..4ba641bf
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_facebook.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_facebook import ConnectionOptionsFacebook
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentFacebook(CreateConnectionCommon):
+ """
+ Create a connection with strategy=facebook
+ """
+
+ strategy: typing.Literal["facebook"] = "facebook"
+ options: typing.Optional[ConnectionOptionsFacebook] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_fitbit.py b/src/auth0/management/types/create_connection_request_content_fitbit.py
new file mode 100644
index 00000000..f6dd239f
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_fitbit.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_fitbit import ConnectionOptionsFitbit
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentFitbit(CreateConnectionCommon):
+ """
+ Create a connection with strategy=fitbit
+ """
+
+ strategy: typing.Literal["fitbit"] = "fitbit"
+ options: typing.Optional[ConnectionOptionsFitbit] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_flickr.py b/src/auth0/management/types/create_connection_request_content_flickr.py
new file mode 100644
index 00000000..9884bd1a
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_flickr.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_flickr import ConnectionOptionsFlickr
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentFlickr(CreateConnectionCommon):
+ """
+ Create a connection with strategy=flickr
+ """
+
+ strategy: typing.Literal["flickr"] = "flickr"
+ options: typing.Optional[ConnectionOptionsFlickr] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_git_hub.py b/src/auth0/management/types/create_connection_request_content_git_hub.py
new file mode 100644
index 00000000..9485b29c
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_git_hub.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_git_hub import ConnectionOptionsGitHub
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentGitHub(CreateConnectionCommon):
+ """
+ Create a connection with strategy=github
+ """
+
+ strategy: typing.Literal["github"] = "github"
+ options: typing.Optional[ConnectionOptionsGitHub] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_google_apps.py b/src/auth0/management/types/create_connection_request_content_google_apps.py
new file mode 100644
index 00000000..346b59c4
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_google_apps.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_google_apps import ConnectionOptionsGoogleApps
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentGoogleApps(CreateConnectionCommon):
+ """
+ Create a connection with strategy=google-apps
+ """
+
+ strategy: typing.Literal["google-apps"] = "google-apps"
+ options: typing.Optional[ConnectionOptionsGoogleApps] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_google_o_auth_2.py b/src/auth0/management/types/create_connection_request_content_google_o_auth_2.py
new file mode 100644
index 00000000..21185e27
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_google_o_auth_2.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_google_o_auth_2 import ConnectionOptionsGoogleOAuth2
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentGoogleOAuth2(CreateConnectionCommon):
+ """
+ Create a connection with strategy=google-oauth2
+ """
+
+ strategy: typing.Literal["google-oauth2"] = "google-oauth2"
+ options: typing.Optional[ConnectionOptionsGoogleOAuth2] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_instagram.py b/src/auth0/management/types/create_connection_request_content_instagram.py
new file mode 100644
index 00000000..610559b8
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_instagram.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_instagram import ConnectionOptionsInstagram
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentInstagram(CreateConnectionCommon):
+ """
+ Create a connection with strategy=instagram
+ """
+
+ strategy: typing.Literal["instagram"] = "instagram"
+ options: typing.Optional[ConnectionOptionsInstagram] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_ip.py b/src/auth0/management/types/create_connection_request_content_ip.py
new file mode 100644
index 00000000..8a95d12b
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_ip.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_ip import ConnectionOptionsIp
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentIp(CreateConnectionCommon):
+ """
+ Create a connection with strategy=ip
+ """
+
+ strategy: typing.Literal["ip"] = "ip"
+ options: typing.Optional[ConnectionOptionsIp] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_line.py b/src/auth0/management/types/create_connection_request_content_line.py
new file mode 100644
index 00000000..8e375d2c
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_line.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_line import ConnectionOptionsLine
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentLine(CreateConnectionCommon):
+ """
+ Create a connection with strategy=line
+ """
+
+ strategy: typing.Literal["line"] = "line"
+ options: typing.Optional[ConnectionOptionsLine] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_linkedin.py b/src/auth0/management/types/create_connection_request_content_linkedin.py
new file mode 100644
index 00000000..85a21c00
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_linkedin.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_linkedin import ConnectionOptionsLinkedin
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentLinkedin(CreateConnectionCommon):
+ """
+ Create a connection with strategy=linkedin
+ """
+
+ strategy: typing.Literal["linkedin"] = "linkedin"
+ options: typing.Optional[ConnectionOptionsLinkedin] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_miicard.py b/src/auth0/management/types/create_connection_request_content_miicard.py
new file mode 100644
index 00000000..2e1ddf7e
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_miicard.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_miicard import ConnectionOptionsMiicard
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentMiicard(CreateConnectionCommon):
+ """
+ Create a connection with strategy=miicard
+ """
+
+ strategy: typing.Literal["miicard"] = "miicard"
+ options: typing.Optional[ConnectionOptionsMiicard] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_o_auth_1.py b/src/auth0/management/types/create_connection_request_content_o_auth_1.py
new file mode 100644
index 00000000..36abd73a
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_o_auth_1.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_o_auth_1 import ConnectionOptionsOAuth1
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentOAuth1(CreateConnectionCommon):
+ """
+ Create a connection with strategy=oauth1
+ """
+
+ strategy: typing.Literal["oauth1"] = "oauth1"
+ options: typing.Optional[ConnectionOptionsOAuth1] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_o_auth_2.py b/src/auth0/management/types/create_connection_request_content_o_auth_2.py
new file mode 100644
index 00000000..1f21591a
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_o_auth_2.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_o_auth_2 import ConnectionOptionsOAuth2
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentOAuth2(CreateConnectionCommon):
+ """
+ Create a connection with strategy=oauth2
+ """
+
+ strategy: typing.Literal["oauth2"] = "oauth2"
+ options: typing.Optional[ConnectionOptionsOAuth2] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_office_365.py b/src/auth0/management/types/create_connection_request_content_office_365.py
new file mode 100644
index 00000000..28b16da7
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_office_365.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_office_365 import ConnectionOptionsOffice365
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentOffice365(CreateConnectionCommon):
+ """
+ Create a connection with strategy=office365
+ """
+
+ strategy: typing.Literal["office365"] = "office365"
+ options: typing.Optional[ConnectionOptionsOffice365] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_oidc.py b/src/auth0/management/types/create_connection_request_content_oidc.py
new file mode 100644
index 00000000..677a8da2
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_oidc.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_oidc import ConnectionOptionsOidc
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentOidc(CreateConnectionCommon):
+ """
+ Create a connection with strategy=oidc
+ """
+
+ strategy: typing.Literal["oidc"] = "oidc"
+ options: typing.Optional[ConnectionOptionsOidc] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_okta.py b/src/auth0/management/types/create_connection_request_content_okta.py
new file mode 100644
index 00000000..3b27b0b9
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_okta.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_okta import ConnectionOptionsOkta
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentOkta(CreateConnectionCommon):
+ """
+ Create a connection with strategy=okta
+ """
+
+ strategy: typing.Literal["okta"] = "okta"
+ options: typing.Optional[ConnectionOptionsOkta] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_paypal.py b/src/auth0/management/types/create_connection_request_content_paypal.py
new file mode 100644
index 00000000..e593f7fe
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_paypal.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_paypal import ConnectionOptionsPaypal
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentPaypal(CreateConnectionCommon):
+ """
+ Create a connection with strategy=paypal
+ """
+
+ strategy: typing.Literal["paypal"] = "paypal"
+ options: typing.Optional[ConnectionOptionsPaypal] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_paypal_sandbox.py b/src/auth0/management/types/create_connection_request_content_paypal_sandbox.py
new file mode 100644
index 00000000..80bf73c0
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_paypal_sandbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_paypal_sandbox import ConnectionOptionsPaypalSandbox
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentPaypalSandbox(CreateConnectionCommon):
+ """
+ Create a connection with strategy=paypal-sandbox
+ """
+
+ strategy: typing.Literal["paypal-sandbox"] = "paypal-sandbox"
+ options: typing.Optional[ConnectionOptionsPaypalSandbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_ping_federate.py b/src/auth0/management/types/create_connection_request_content_ping_federate.py
new file mode 100644
index 00000000..125687d9
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_ping_federate.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_ping_federate import ConnectionOptionsPingFederate
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentPingFederate(CreateConnectionCommon):
+ """
+ Create a connection with strategy=pingfederate
+ """
+
+ strategy: typing.Literal["pingfederate"] = "pingfederate"
+ options: typing.Optional[ConnectionOptionsPingFederate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_planning_center.py b/src/auth0/management/types/create_connection_request_content_planning_center.py
new file mode 100644
index 00000000..d6d00eb4
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_planning_center.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_planning_center import ConnectionOptionsPlanningCenter
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentPlanningCenter(CreateConnectionCommon):
+ """
+ Create a connection with strategy=planningcenter
+ """
+
+ strategy: typing.Literal["planningcenter"] = "planningcenter"
+ options: typing.Optional[ConnectionOptionsPlanningCenter] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_renren.py b/src/auth0/management/types/create_connection_request_content_renren.py
new file mode 100644
index 00000000..6f5f624c
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_renren.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_renren import ConnectionOptionsRenren
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentRenren(CreateConnectionCommon):
+ """
+ Create a connection with strategy=renren
+ """
+
+ strategy: typing.Literal["renren"] = "renren"
+ options: typing.Optional[ConnectionOptionsRenren] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_salesforce.py b/src/auth0/management/types/create_connection_request_content_salesforce.py
new file mode 100644
index 00000000..9a65c388
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_salesforce.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_salesforce import ConnectionOptionsSalesforce
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentSalesforce(CreateConnectionCommon):
+ """
+ Create a connection with strategy=salesforce
+ """
+
+ strategy: typing.Literal["salesforce"] = "salesforce"
+ options: typing.Optional[ConnectionOptionsSalesforce] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_salesforce_community.py b/src/auth0/management/types/create_connection_request_content_salesforce_community.py
new file mode 100644
index 00000000..98df46d5
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_salesforce_community.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_salesforce_community import ConnectionOptionsSalesforceCommunity
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentSalesforceCommunity(CreateConnectionCommon):
+ """
+ Create a connection with strategy=salesforce-community
+ """
+
+ strategy: typing.Literal["salesforce-community"] = "salesforce-community"
+ options: typing.Optional[ConnectionOptionsSalesforceCommunity] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_salesforce_sandbox.py b/src/auth0/management/types/create_connection_request_content_salesforce_sandbox.py
new file mode 100644
index 00000000..0a145205
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_salesforce_sandbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_salesforce_sandbox import ConnectionOptionsSalesforceSandbox
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentSalesforceSandbox(CreateConnectionCommon):
+ """
+ Create a connection with strategy=salesforce-sandbox
+ """
+
+ strategy: typing.Literal["salesforce-sandbox"] = "salesforce-sandbox"
+ options: typing.Optional[ConnectionOptionsSalesforceSandbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_saml.py b/src/auth0/management/types/create_connection_request_content_saml.py
new file mode 100644
index 00000000..7766ba65
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_saml.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_saml import ConnectionOptionsSaml
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentSaml(CreateConnectionCommon):
+ """
+ Create a connection with strategy=samlp
+ """
+
+ strategy: typing.Literal["samlp"] = "samlp"
+ options: typing.Optional[ConnectionOptionsSaml] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_sharepoint.py b/src/auth0/management/types/create_connection_request_content_sharepoint.py
new file mode 100644
index 00000000..7676773a
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_sharepoint.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_sharepoint import ConnectionOptionsSharepoint
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentSharepoint(CreateConnectionCommon):
+ """
+ Create a connection with strategy=sharepoint
+ """
+
+ strategy: typing.Literal["sharepoint"] = "sharepoint"
+ options: typing.Optional[ConnectionOptionsSharepoint] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_shop.py b/src/auth0/management/types/create_connection_request_content_shop.py
new file mode 100644
index 00000000..c64dc62f
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_shop.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_shop import ConnectionOptionsShop
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentShop(CreateConnectionCommon):
+ """
+ Create a connection with strategy=shop
+ """
+
+ strategy: typing.Literal["shop"] = "shop"
+ options: typing.Optional[ConnectionOptionsShop] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_shopify.py b/src/auth0/management/types/create_connection_request_content_shopify.py
new file mode 100644
index 00000000..06fd09b4
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_shopify.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_shopify import ConnectionOptionsShopify
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentShopify(CreateConnectionCommon):
+ """
+ Create a connection with strategy=shopify
+ """
+
+ strategy: typing.Literal["shopify"] = "shopify"
+ options: typing.Optional[ConnectionOptionsShopify] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_sms.py b/src/auth0/management/types/create_connection_request_content_sms.py
new file mode 100644
index 00000000..097ac880
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_sms.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_sms import ConnectionOptionsSms
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentSms(CreateConnectionCommon):
+ """
+ Create a connection with strategy=sms
+ """
+
+ strategy: typing.Literal["sms"] = "sms"
+ options: typing.Optional[ConnectionOptionsSms] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_soundcloud.py b/src/auth0/management/types/create_connection_request_content_soundcloud.py
new file mode 100644
index 00000000..036910a1
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_soundcloud.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_soundcloud import ConnectionOptionsSoundcloud
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentSoundcloud(CreateConnectionCommon):
+ """
+ Create a connection with strategy=soundcloud
+ """
+
+ strategy: typing.Literal["soundcloud"] = "soundcloud"
+ options: typing.Optional[ConnectionOptionsSoundcloud] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_the_city.py b/src/auth0/management/types/create_connection_request_content_the_city.py
new file mode 100644
index 00000000..deaadaa3
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_the_city.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_the_city import ConnectionOptionsTheCity
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentTheCity(CreateConnectionCommon):
+ """
+ Create a connection with strategy=thecity
+ """
+
+ strategy: typing.Literal["thecity"] = "thecity"
+ options: typing.Optional[ConnectionOptionsTheCity] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_the_city_sandbox.py b/src/auth0/management/types/create_connection_request_content_the_city_sandbox.py
new file mode 100644
index 00000000..8d2063f3
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_the_city_sandbox.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_the_city_sandbox import ConnectionOptionsTheCitySandbox
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentTheCitySandbox(CreateConnectionCommon):
+ """
+ Create a connection with strategy=thecity-sandbox
+ """
+
+ strategy: typing.Literal["thecity-sandbox"] = "thecity-sandbox"
+ options: typing.Optional[ConnectionOptionsTheCitySandbox] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_thirty_seven_signals.py b/src/auth0/management/types/create_connection_request_content_thirty_seven_signals.py
new file mode 100644
index 00000000..8231b5bf
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_thirty_seven_signals.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_thirty_seven_signals import ConnectionOptionsThirtySevenSignals
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentThirtySevenSignals(CreateConnectionCommon):
+ """
+ Create a connection with strategy=thirtysevensignals
+ """
+
+ strategy: typing.Literal["thirtysevensignals"] = "thirtysevensignals"
+ options: typing.Optional[ConnectionOptionsThirtySevenSignals] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_twitter.py b/src/auth0/management/types/create_connection_request_content_twitter.py
new file mode 100644
index 00000000..a7136883
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_twitter.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_twitter import ConnectionOptionsTwitter
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentTwitter(CreateConnectionCommon):
+ """
+ Create a connection with strategy=twitter
+ """
+
+ strategy: typing.Literal["twitter"] = "twitter"
+ options: typing.Optional[ConnectionOptionsTwitter] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_untappd.py b/src/auth0/management/types/create_connection_request_content_untappd.py
new file mode 100644
index 00000000..fc701ed2
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_untappd.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_untappd import ConnectionOptionsUntappd
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentUntappd(CreateConnectionCommon):
+ """
+ Create a connection with strategy=untappd
+ """
+
+ strategy: typing.Literal["untappd"] = "untappd"
+ options: typing.Optional[ConnectionOptionsUntappd] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_vkontakte.py b/src/auth0/management/types/create_connection_request_content_vkontakte.py
new file mode 100644
index 00000000..1f4a97f2
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_vkontakte.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_vkontakte import ConnectionOptionsVkontakte
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentVkontakte(CreateConnectionCommon):
+ """
+ Create a connection with strategy=vkontakte
+ """
+
+ strategy: typing.Literal["vkontakte"] = "vkontakte"
+ options: typing.Optional[ConnectionOptionsVkontakte] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_weibo.py b/src/auth0/management/types/create_connection_request_content_weibo.py
new file mode 100644
index 00000000..0280fc43
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_weibo.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_weibo import ConnectionOptionsWeibo
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentWeibo(CreateConnectionCommon):
+ """
+ Create a connection with strategy=weibo
+ """
+
+ strategy: typing.Literal["weibo"] = "weibo"
+ options: typing.Optional[ConnectionOptionsWeibo] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_windows_live.py b/src/auth0/management/types/create_connection_request_content_windows_live.py
new file mode 100644
index 00000000..661cf946
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_windows_live.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_windows_live import ConnectionOptionsWindowsLive
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentWindowsLive(CreateConnectionCommon):
+ """
+ Create a connection with strategy=windowslive
+ """
+
+ strategy: typing.Literal["windowslive"] = "windowslive"
+ options: typing.Optional[ConnectionOptionsWindowsLive] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_wordpress.py b/src/auth0/management/types/create_connection_request_content_wordpress.py
new file mode 100644
index 00000000..ecfaaa69
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_wordpress.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_wordpress import ConnectionOptionsWordpress
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentWordpress(CreateConnectionCommon):
+ """
+ Create a connection with strategy=wordpress
+ """
+
+ strategy: typing.Literal["wordpress"] = "wordpress"
+ options: typing.Optional[ConnectionOptionsWordpress] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_yahoo.py b/src/auth0/management/types/create_connection_request_content_yahoo.py
new file mode 100644
index 00000000..c8aff488
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_yahoo.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_yahoo import ConnectionOptionsYahoo
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentYahoo(CreateConnectionCommon):
+ """
+ Create a connection with strategy=yahoo
+ """
+
+ strategy: typing.Literal["yahoo"] = "yahoo"
+ options: typing.Optional[ConnectionOptionsYahoo] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_yammer.py b/src/auth0/management/types/create_connection_request_content_yammer.py
new file mode 100644
index 00000000..1a063538
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_yammer.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_yammer import ConnectionOptionsYammer
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentYammer(CreateConnectionCommon):
+ """
+ Create a connection with strategy=yammer
+ """
+
+ strategy: typing.Literal["yammer"] = "yammer"
+ options: typing.Optional[ConnectionOptionsYammer] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_request_content_yandex.py b/src/auth0/management/types/create_connection_request_content_yandex.py
new file mode 100644
index 00000000..fddb6460
--- /dev/null
+++ b/src/auth0/management/types/create_connection_request_content_yandex.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .connection_options_yandex import ConnectionOptionsYandex
+from .create_connection_common import CreateConnectionCommon
+
+
+class CreateConnectionRequestContentYandex(CreateConnectionCommon):
+ """
+ Create a connection with strategy=yandex
+ """
+
+ strategy: typing.Literal["yandex"] = "yandex"
+ options: typing.Optional[ConnectionOptionsYandex] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_connection_response_content.py b/src/auth0/management/types/create_connection_response_content.py
new file mode 100644
index 00000000..db2b1383
--- /dev/null
+++ b/src/auth0/management/types/create_connection_response_content.py
@@ -0,0 +1,66 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_authentication_purpose import ConnectionAuthenticationPurpose
+from .connection_connected_accounts_purpose import ConnectionConnectedAccountsPurpose
+from .connection_options import ConnectionOptions
+from .connections_metadata import ConnectionsMetadata
+
+
+class CreateConnectionResponseContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="My connection")
+ """
+ The name of the connection
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Connection name used in login screen
+ """
+
+ options: typing.Optional[ConnectionOptions] = None
+ id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ The connection's identifier
+ """
+
+ strategy: typing.Optional[str] = pydantic.Field(default="auth0")
+ """
+ The type of the connection, related to the identity provider
+ """
+
+ realms: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+ """
+
+ enabled_clients: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ DEPRECATED property. Use the GET /connections/:id/clients endpoint to get the ids of the clients for which the connection is enabled
+ """
+
+ is_domain_connection: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the connection is domain level
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD.
+ """
+
+ metadata: typing.Optional[ConnectionsMetadata] = None
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = None
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_custom_domain_response_content.py b/src/auth0/management/types/create_custom_domain_response_content.py
new file mode 100644
index 00000000..fd8d6785
--- /dev/null
+++ b/src/auth0/management/types/create_custom_domain_response_content.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_domain_status_filter_enum import CustomDomainStatusFilterEnum
+from .custom_domain_type_enum import CustomDomainTypeEnum
+from .domain_certificate import DomainCertificate
+from .domain_metadata import DomainMetadata
+from .domain_verification import DomainVerification
+
+
+class CreateCustomDomainResponseContent(UniversalBaseModel):
+ custom_domain_id: str = pydantic.Field(default="cd_0000000000000001")
+ """
+ ID of the custom domain.
+ """
+
+ domain: str = pydantic.Field(default="login.mycompany.com")
+ """
+ Domain name.
+ """
+
+ primary: bool = pydantic.Field(default=False)
+ """
+ Whether this is a primary domain (true) or not (false).
+ """
+
+ status: CustomDomainStatusFilterEnum
+ type: CustomDomainTypeEnum
+ verification: DomainVerification
+ custom_client_ip_header: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The HTTP header to fetch the client's IP address
+ """
+
+ tls_policy: typing.Optional[str] = pydantic.Field(default="recommended")
+ """
+ The TLS version policy
+ """
+
+ domain_metadata: typing.Optional[DomainMetadata] = None
+ certificate: typing.Optional[DomainCertificate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_directory_provisioning_request_content.py b/src/auth0/management/types/create_directory_provisioning_request_content.py
new file mode 100644
index 00000000..68379d56
--- /dev/null
+++ b/src/auth0/management/types/create_directory_provisioning_request_content.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .directory_provisioning_mapping_item import DirectoryProvisioningMappingItem
+
+
+class CreateDirectoryProvisioningRequestContent(UniversalBaseModel):
+ mapping: typing.Optional[typing.List[DirectoryProvisioningMappingItem]] = pydantic.Field(default=None)
+ """
+ The mapping between Auth0 and IDP user attributes
+ """
+
+ synchronize_automatically: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether periodic automatic synchronization is enabled
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_directory_provisioning_response_content.py b/src/auth0/management/types/create_directory_provisioning_response_content.py
new file mode 100644
index 00000000..483cfe7b
--- /dev/null
+++ b/src/auth0/management/types/create_directory_provisioning_response_content.py
@@ -0,0 +1,69 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .directory_provisioning_mapping_item import DirectoryProvisioningMappingItem
+
+
+class CreateDirectoryProvisioningResponseContent(UniversalBaseModel):
+ connection_id: str = pydantic.Field()
+ """
+ The connection's identifier
+ """
+
+ connection_name: str = pydantic.Field()
+ """
+ The connection's name
+ """
+
+ strategy: str = pydantic.Field()
+ """
+ The connection's strategy
+ """
+
+ mapping: typing.List[DirectoryProvisioningMappingItem] = pydantic.Field()
+ """
+ The mapping between Auth0 and IDP user attributes
+ """
+
+ synchronize_automatically: bool = pydantic.Field()
+ """
+ Whether periodic automatic synchronization is enabled
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ The timestamp at which the directory provisioning configuration was created
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ The timestamp at which the directory provisioning configuration was last updated
+ """
+
+ last_synchronization_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The timestamp at which the connection was last synchronized
+ """
+
+ last_synchronization_status: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The status of the last synchronization
+ """
+
+ last_synchronization_error: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The error message of the last synchronization, if any
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_directory_synchronization_response_content.py b/src/auth0/management/types/create_directory_synchronization_response_content.py
new file mode 100644
index 00000000..2776490f
--- /dev/null
+++ b/src/auth0/management/types/create_directory_synchronization_response_content.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateDirectorySynchronizationResponseContent(UniversalBaseModel):
+ connection_id: str = pydantic.Field()
+ """
+ The connection's identifier
+ """
+
+ synchronization_id: str = pydantic.Field()
+ """
+ The synchronization's identifier
+ """
+
+ status: str = pydantic.Field()
+ """
+ The synchronization status
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_email_provider_response_content.py b/src/auth0/management/types/create_email_provider_response_content.py
new file mode 100644
index 00000000..8d131fd7
--- /dev/null
+++ b/src/auth0/management/types/create_email_provider_response_content.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .email_provider_credentials import EmailProviderCredentials
+from .email_provider_settings import EmailProviderSettings
+
+
+class CreateEmailProviderResponseContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="sendgrid")
+ """
+ Name of the email provider. Can be `mailgun`, `mandrill`, `sendgrid`, `ses`, `sparkpost`, `smtp`, `azure_cs`, `ms365`, or `custom`.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether the provider is enabled (true) or disabled (false).
+ """
+
+ default_from_address: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Email address to use as "from" when no other address specified.
+ """
+
+ credentials: typing.Optional[EmailProviderCredentials] = None
+ settings: typing.Optional[EmailProviderSettings] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_email_template_response_content.py b/src/auth0/management/types/create_email_template_response_content.py
new file mode 100644
index 00000000..08842cb4
--- /dev/null
+++ b/src/auth0/management/types/create_email_template_response_content.py
@@ -0,0 +1,69 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .email_template_name_enum import EmailTemplateNameEnum
+
+
+class CreateEmailTemplateResponseContent(UniversalBaseModel):
+ template: EmailTemplateNameEnum
+ body: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Body of the email template.
+ """
+
+ from_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="from")] = pydantic.Field(
+ default="sender@auth0.com"
+ )
+ """
+ Senders `from` email address.
+ """
+
+ result_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="resultUrl")] = pydantic.Field(
+ default=None
+ )
+ """
+ URL to redirect the user to after a successful action.
+ """
+
+ subject: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Subject line of the email.
+ """
+
+ syntax: typing.Optional[str] = pydantic.Field(default="liquid")
+ """
+ Syntax of the template body.
+ """
+
+ url_lifetime_in_seconds: typing_extensions.Annotated[
+ typing.Optional[float], FieldMetadata(alias="urlLifetimeInSeconds")
+ ] = pydantic.Field(default=None)
+ """
+ Lifetime in seconds that the link within the email will be valid for.
+ """
+
+ include_email_in_redirect: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="includeEmailInRedirect")
+ ] = pydantic.Field(default=None)
+ """
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the template is enabled (true) or disabled (false).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_encryption_key_public_wrapping_response_content.py b/src/auth0/management/types/create_encryption_key_public_wrapping_response_content.py
new file mode 100644
index 00000000..10132a3e
--- /dev/null
+++ b/src/auth0/management/types/create_encryption_key_public_wrapping_response_content.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .encryption_key_public_wrapping_algorithm import EncryptionKeyPublicWrappingAlgorithm
+
+
+class CreateEncryptionKeyPublicWrappingResponseContent(UniversalBaseModel):
+ public_key: str = pydantic.Field()
+ """
+ Public wrapping key in PEM format
+ """
+
+ algorithm: EncryptionKeyPublicWrappingAlgorithm = "CKM_RSA_AES_KEY_WRAP"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_encryption_key_response_content.py b/src/auth0/management/types/create_encryption_key_response_content.py
new file mode 100644
index 00000000..7ee89179
--- /dev/null
+++ b/src/auth0/management/types/create_encryption_key_response_content.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .encryption_key_state import EncryptionKeyState
+from .encryption_key_type import EncryptionKeyType
+
+
+class CreateEncryptionKeyResponseContent(UniversalBaseModel):
+ """
+ Encryption key
+ """
+
+ kid: str = pydantic.Field()
+ """
+ Key ID
+ """
+
+ type: EncryptionKeyType
+ state: EncryptionKeyState
+ created_at: dt.datetime = pydantic.Field()
+ """
+ Key creation timestamp
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ Key update timestamp
+ """
+
+ parent_kid: str = pydantic.Field()
+ """
+ ID of parent wrapping key
+ """
+
+ public_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Public key in PEM format
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_encryption_key_type.py b/src/auth0/management/types/create_encryption_key_type.py
new file mode 100644
index 00000000..74132a8d
--- /dev/null
+++ b/src/auth0/management/types/create_encryption_key_type.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CreateEncryptionKeyType = typing.Union[
+ typing.Literal["customer-provided-root-key", "tenant-encryption-key"], typing.Any
+]
diff --git a/src/auth0/management/types/create_event_stream_action_request_content.py b/src/auth0/management/types/create_event_stream_action_request_content.py
new file mode 100644
index 00000000..9141e9b5
--- /dev/null
+++ b/src/auth0/management/types/create_event_stream_action_request_content.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_action_destination import EventStreamActionDestination
+from .event_stream_status_enum import EventStreamStatusEnum
+from .event_stream_subscription import EventStreamSubscription
+
+
+class CreateEventStreamActionRequestContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the event stream.
+ """
+
+ subscriptions: typing.Optional[typing.List[EventStreamSubscription]] = pydantic.Field(default=None)
+ """
+ List of event types subscribed to in this stream.
+ """
+
+ destination: EventStreamActionDestination
+ status: typing.Optional[EventStreamStatusEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_event_stream_event_bridge_request_content.py b/src/auth0/management/types/create_event_stream_event_bridge_request_content.py
new file mode 100644
index 00000000..cb389cae
--- /dev/null
+++ b/src/auth0/management/types/create_event_stream_event_bridge_request_content.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_event_bridge_destination import EventStreamEventBridgeDestination
+from .event_stream_status_enum import EventStreamStatusEnum
+from .event_stream_subscription import EventStreamSubscription
+
+
+class CreateEventStreamEventBridgeRequestContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the event stream.
+ """
+
+ subscriptions: typing.Optional[typing.List[EventStreamSubscription]] = pydantic.Field(default=None)
+ """
+ List of event types subscribed to in this stream.
+ """
+
+ destination: EventStreamEventBridgeDestination
+ status: typing.Optional[EventStreamStatusEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_event_stream_redelivery_response_content.py b/src/auth0/management/types/create_event_stream_redelivery_response_content.py
new file mode 100644
index 00000000..1da7f3f5
--- /dev/null
+++ b/src/auth0/management/types/create_event_stream_redelivery_response_content.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_delivery_status_enum import EventStreamDeliveryStatusEnum
+from .event_stream_event_type_enum import EventStreamEventTypeEnum
+
+
+class CreateEventStreamRedeliveryResponseContent(UniversalBaseModel):
+ date_from: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ An RFC-3339 date-time for redelivery start, inclusive. Does not allow sub-second precision.
+ """
+
+ date_to: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ An RFC-3339 date-time for redelivery end, exclusive. Does not allow sub-second precision.
+ """
+
+ statuses: typing.Optional[typing.List[EventStreamDeliveryStatusEnum]] = pydantic.Field(default=None)
+ """
+ Filter by status
+ """
+
+ event_types: typing.Optional[typing.List[EventStreamEventTypeEnum]] = pydantic.Field(default=None)
+ """
+ Filter by event type
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_event_stream_response_content.py b/src/auth0/management/types/create_event_stream_response_content.py
new file mode 100644
index 00000000..9d6ce27d
--- /dev/null
+++ b/src/auth0/management/types/create_event_stream_response_content.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .event_stream_action_response_content import EventStreamActionResponseContent
+from .event_stream_event_bridge_response_content import EventStreamEventBridgeResponseContent
+from .event_stream_webhook_response_content import EventStreamWebhookResponseContent
+
+CreateEventStreamResponseContent = typing.Union[
+ EventStreamWebhookResponseContent, EventStreamEventBridgeResponseContent, EventStreamActionResponseContent
+]
diff --git a/src/auth0/management/types/create_event_stream_test_event_response_content.py b/src/auth0/management/types/create_event_stream_test_event_response_content.py
new file mode 100644
index 00000000..b6374c48
--- /dev/null
+++ b/src/auth0/management/types/create_event_stream_test_event_response_content.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_cloud_event import EventStreamCloudEvent
+from .event_stream_delivery_attempt import EventStreamDeliveryAttempt
+from .event_stream_delivery_event_type_enum import EventStreamDeliveryEventTypeEnum
+from .event_stream_delivery_status_enum import EventStreamDeliveryStatusEnum
+
+
+class CreateEventStreamTestEventResponseContent(UniversalBaseModel):
+ """
+ Metadata about a specific attempt to deliver an event
+ """
+
+ id: str = pydantic.Field()
+ """
+ Unique identifier for the delivery
+ """
+
+ event_stream_id: str = pydantic.Field()
+ """
+ Unique identifier for the event stream.
+ """
+
+ status: EventStreamDeliveryStatusEnum = "failed"
+ event_type: EventStreamDeliveryEventTypeEnum
+ attempts: typing.List[EventStreamDeliveryAttempt] = pydantic.Field()
+ """
+ Results of delivery attempts
+ """
+
+ event: typing.Optional[EventStreamCloudEvent] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_event_stream_web_hook_request_content.py b/src/auth0/management/types/create_event_stream_web_hook_request_content.py
new file mode 100644
index 00000000..a2faf72d
--- /dev/null
+++ b/src/auth0/management/types/create_event_stream_web_hook_request_content.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_status_enum import EventStreamStatusEnum
+from .event_stream_subscription import EventStreamSubscription
+from .event_stream_webhook_destination import EventStreamWebhookDestination
+
+
+class CreateEventStreamWebHookRequestContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the event stream.
+ """
+
+ subscriptions: typing.Optional[typing.List[EventStreamSubscription]] = pydantic.Field(default=None)
+ """
+ List of event types subscribed to in this stream.
+ """
+
+ destination: EventStreamWebhookDestination
+ status: typing.Optional[EventStreamStatusEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_export_users_fields.py b/src/auth0/management/types/create_export_users_fields.py
new file mode 100644
index 00000000..e128731d
--- /dev/null
+++ b/src/auth0/management/types/create_export_users_fields.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateExportUsersFields(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Name of the field in the profile.
+ """
+
+ export_as: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Title of the column in the exported CSV.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_export_users_response_content.py b/src/auth0/management/types/create_export_users_response_content.py
new file mode 100644
index 00000000..08abb7cc
--- /dev/null
+++ b/src/auth0/management/types/create_export_users_response_content.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .create_export_users_fields import CreateExportUsersFields
+from .job_file_format_enum import JobFileFormatEnum
+
+
+class CreateExportUsersResponseContent(UniversalBaseModel):
+ status: str = pydantic.Field(default="pending")
+ """
+ Status of this job.
+ """
+
+ type: str = pydantic.Field(default="users_export")
+ """
+ Type of job this is.
+ """
+
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ When this job was created.
+ """
+
+ id: str = pydantic.Field(default="job_0000000000000001")
+ """
+ ID of this job.
+ """
+
+ connection_id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ connection_id of the connection from which users will be exported.
+ """
+
+ format: typing.Optional[JobFileFormatEnum] = None
+ limit: typing.Optional[int] = pydantic.Field(default=5)
+ """
+ Limit the number of records.
+ """
+
+ fields: typing.Optional[typing.List[CreateExportUsersFields]] = pydantic.Field(default=None)
+ """
+ List of fields to be included in the CSV. Defaults to a predefined set of fields.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flow_response_content.py b/src/auth0/management/types/create_flow_response_content.py
new file mode 100644
index 00000000..26e4120a
--- /dev/null
+++ b/src/auth0/management/types/create_flow_response_content.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
+
+
+class CreateFlowResponseContent(UniversalBaseModel):
+ id: str
+ name: str
+ actions: typing.Optional[typing.List["FlowAction"]] = None
+ created_at: dt.datetime
+ updated_at: dt.datetime
+ executed_at: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
+
+
+from .flow_action import FlowAction # noqa: E402, I001
+from .flow_action_flow import FlowActionFlow # noqa: E402, I001
+from .flow_action_flow_boolean_condition import FlowActionFlowBooleanCondition # noqa: E402, I001
+from .flow_action_flow_boolean_condition_params import FlowActionFlowBooleanConditionParams # noqa: E402, I001
+
+update_forward_refs(
+ CreateFlowResponseContent,
+ FlowAction=FlowAction,
+ FlowActionFlow=FlowActionFlow,
+ FlowActionFlowBooleanCondition=FlowActionFlowBooleanCondition,
+ FlowActionFlowBooleanConditionParams=FlowActionFlowBooleanConditionParams,
+)
diff --git a/src/auth0/management/types/create_flows_vault_connection_activecampaign.py b/src/auth0/management/types/create_flows_vault_connection_activecampaign.py
new file mode 100644
index 00000000..9e0b9fc0
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_activecampaign.py
@@ -0,0 +1,12 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_activecampaign_api_key import CreateFlowsVaultConnectionActivecampaignApiKey
+from .create_flows_vault_connection_activecampaign_uninitialized import (
+ CreateFlowsVaultConnectionActivecampaignUninitialized,
+)
+
+CreateFlowsVaultConnectionActivecampaign = typing.Union[
+ CreateFlowsVaultConnectionActivecampaignApiKey, CreateFlowsVaultConnectionActivecampaignUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_activecampaign_api_key.py b/src/auth0/management/types/create_flows_vault_connection_activecampaign_api_key.py
new file mode 100644
index 00000000..ec9bf4ca
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_activecampaign_api_key.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_api_key_with_base_url import FlowsVaultConnectioSetupApiKeyWithBaseUrl
+from .flows_vault_connection_app_id_activecampaign_enum import FlowsVaultConnectionAppIdActivecampaignEnum
+
+
+class CreateFlowsVaultConnectionActivecampaignApiKey(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdActivecampaignEnum = "ACTIVECAMPAIGN"
+ setup: FlowsVaultConnectioSetupApiKeyWithBaseUrl
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_activecampaign_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_activecampaign_uninitialized.py
new file mode 100644
index 00000000..05a1ad96
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_activecampaign_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_activecampaign_enum import FlowsVaultConnectionAppIdActivecampaignEnum
+
+
+class CreateFlowsVaultConnectionActivecampaignUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdActivecampaignEnum = "ACTIVECAMPAIGN"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_airtable.py b/src/auth0/management/types/create_flows_vault_connection_airtable.py
new file mode 100644
index 00000000..84b48269
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_airtable.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_airtable_api_key import CreateFlowsVaultConnectionAirtableApiKey
+from .create_flows_vault_connection_airtable_uninitialized import CreateFlowsVaultConnectionAirtableUninitialized
+
+CreateFlowsVaultConnectionAirtable = typing.Union[
+ CreateFlowsVaultConnectionAirtableApiKey, CreateFlowsVaultConnectionAirtableUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_airtable_api_key.py b/src/auth0/management/types/create_flows_vault_connection_airtable_api_key.py
new file mode 100644
index 00000000..9c7251fe
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_airtable_api_key.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_api_key import FlowsVaultConnectioSetupApiKey
+from .flows_vault_connection_app_id_airtable_enum import FlowsVaultConnectionAppIdAirtableEnum
+
+
+class CreateFlowsVaultConnectionAirtableApiKey(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdAirtableEnum = "AIRTABLE"
+ setup: FlowsVaultConnectioSetupApiKey
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_airtable_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_airtable_uninitialized.py
new file mode 100644
index 00000000..d1fd60b0
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_airtable_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_airtable_enum import FlowsVaultConnectionAppIdAirtableEnum
+
+
+class CreateFlowsVaultConnectionAirtableUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdAirtableEnum = "AIRTABLE"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_auth_0.py b/src/auth0/management/types/create_flows_vault_connection_auth_0.py
new file mode 100644
index 00000000..438e5b71
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_auth_0.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_auth_0_oauth_app import CreateFlowsVaultConnectionAuth0OauthApp
+from .create_flows_vault_connection_auth_0_uninitialized import CreateFlowsVaultConnectionAuth0Uninitialized
+
+CreateFlowsVaultConnectionAuth0 = typing.Union[
+ CreateFlowsVaultConnectionAuth0OauthApp, CreateFlowsVaultConnectionAuth0Uninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_auth_0_oauth_app.py b/src/auth0/management/types/create_flows_vault_connection_auth_0_oauth_app.py
new file mode 100644
index 00000000..10479bf5
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_auth_0_oauth_app.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_oauth_app import FlowsVaultConnectioSetupOauthApp
+from .flows_vault_connection_app_id_auth_0_enum import FlowsVaultConnectionAppIdAuth0Enum
+
+
+class CreateFlowsVaultConnectionAuth0OauthApp(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdAuth0Enum = "AUTH0"
+ setup: FlowsVaultConnectioSetupOauthApp
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_auth_0_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_auth_0_uninitialized.py
new file mode 100644
index 00000000..abf252ed
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_auth_0_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_auth_0_enum import FlowsVaultConnectionAppIdAuth0Enum
+
+
+class CreateFlowsVaultConnectionAuth0Uninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdAuth0Enum = "AUTH0"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_bigquery.py b/src/auth0/management/types/create_flows_vault_connection_bigquery.py
new file mode 100644
index 00000000..fb75613d
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_bigquery.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_bigquery_jwt import CreateFlowsVaultConnectionBigqueryJwt
+from .create_flows_vault_connection_bigquery_uninitialized import CreateFlowsVaultConnectionBigqueryUninitialized
+
+CreateFlowsVaultConnectionBigquery = typing.Union[
+ CreateFlowsVaultConnectionBigqueryJwt, CreateFlowsVaultConnectionBigqueryUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_bigquery_jwt.py b/src/auth0/management/types/create_flows_vault_connection_bigquery_jwt.py
new file mode 100644
index 00000000..5884cc39
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_bigquery_jwt.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_bigquery_oauth_jwt import FlowsVaultConnectioSetupBigqueryOauthJwt
+from .flows_vault_connection_app_id_bigquery_enum import FlowsVaultConnectionAppIdBigqueryEnum
+
+
+class CreateFlowsVaultConnectionBigqueryJwt(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdBigqueryEnum = "BIGQUERY"
+ setup: FlowsVaultConnectioSetupBigqueryOauthJwt
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_bigquery_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_bigquery_uninitialized.py
new file mode 100644
index 00000000..78d232fe
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_bigquery_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_bigquery_enum import FlowsVaultConnectionAppIdBigqueryEnum
+
+
+class CreateFlowsVaultConnectionBigqueryUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdBigqueryEnum = "BIGQUERY"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_clearbit.py b/src/auth0/management/types/create_flows_vault_connection_clearbit.py
new file mode 100644
index 00000000..5491517f
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_clearbit.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_clearbit_api_key import CreateFlowsVaultConnectionClearbitApiKey
+from .create_flows_vault_connection_clearbit_uninitialized import CreateFlowsVaultConnectionClearbitUninitialized
+
+CreateFlowsVaultConnectionClearbit = typing.Union[
+ CreateFlowsVaultConnectionClearbitApiKey, CreateFlowsVaultConnectionClearbitUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_clearbit_api_key.py b/src/auth0/management/types/create_flows_vault_connection_clearbit_api_key.py
new file mode 100644
index 00000000..9ec77771
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_clearbit_api_key.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_secret_api_key import FlowsVaultConnectioSetupSecretApiKey
+from .flows_vault_connection_app_id_clearbit_enum import FlowsVaultConnectionAppIdClearbitEnum
+
+
+class CreateFlowsVaultConnectionClearbitApiKey(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdClearbitEnum = "CLEARBIT"
+ setup: FlowsVaultConnectioSetupSecretApiKey
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_clearbit_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_clearbit_uninitialized.py
new file mode 100644
index 00000000..2f948e65
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_clearbit_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_clearbit_enum import FlowsVaultConnectionAppIdClearbitEnum
+
+
+class CreateFlowsVaultConnectionClearbitUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdClearbitEnum = "CLEARBIT"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_docusign.py b/src/auth0/management/types/create_flows_vault_connection_docusign.py
new file mode 100644
index 00000000..d81b5484
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_docusign.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_docusign_oauth_code import CreateFlowsVaultConnectionDocusignOauthCode
+from .create_flows_vault_connection_docusign_uninitialized import CreateFlowsVaultConnectionDocusignUninitialized
+
+CreateFlowsVaultConnectionDocusign = typing.Union[
+ CreateFlowsVaultConnectionDocusignOauthCode, CreateFlowsVaultConnectionDocusignUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_docusign_oauth_code.py b/src/auth0/management/types/create_flows_vault_connection_docusign_oauth_code.py
new file mode 100644
index 00000000..2f323754
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_docusign_oauth_code.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+from .flows_vault_connection_app_id_docusign_enum import FlowsVaultConnectionAppIdDocusignEnum
+
+
+class CreateFlowsVaultConnectionDocusignOauthCode(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdDocusignEnum = "DOCUSIGN"
+ setup: FlowsVaultConnectioSetupOauthCode
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_docusign_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_docusign_uninitialized.py
new file mode 100644
index 00000000..794770a4
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_docusign_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_docusign_enum import FlowsVaultConnectionAppIdDocusignEnum
+
+
+class CreateFlowsVaultConnectionDocusignUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdDocusignEnum = "DOCUSIGN"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_google_sheets.py b/src/auth0/management/types/create_flows_vault_connection_google_sheets.py
new file mode 100644
index 00000000..ed442c69
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_google_sheets.py
@@ -0,0 +1,12 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_google_sheets_oauth_code import CreateFlowsVaultConnectionGoogleSheetsOauthCode
+from .create_flows_vault_connection_google_sheets_uninitialized import (
+ CreateFlowsVaultConnectionGoogleSheetsUninitialized,
+)
+
+CreateFlowsVaultConnectionGoogleSheets = typing.Union[
+ CreateFlowsVaultConnectionGoogleSheetsOauthCode, CreateFlowsVaultConnectionGoogleSheetsUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_google_sheets_oauth_code.py b/src/auth0/management/types/create_flows_vault_connection_google_sheets_oauth_code.py
new file mode 100644
index 00000000..2e789aa7
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_google_sheets_oauth_code.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+from .flows_vault_connection_app_id_google_sheets_enum import FlowsVaultConnectionAppIdGoogleSheetsEnum
+
+
+class CreateFlowsVaultConnectionGoogleSheetsOauthCode(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdGoogleSheetsEnum = "GOOGLE_SHEETS"
+ setup: FlowsVaultConnectioSetupOauthCode
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_google_sheets_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_google_sheets_uninitialized.py
new file mode 100644
index 00000000..3fb5212a
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_google_sheets_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_google_sheets_enum import FlowsVaultConnectionAppIdGoogleSheetsEnum
+
+
+class CreateFlowsVaultConnectionGoogleSheetsUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdGoogleSheetsEnum = "GOOGLE_SHEETS"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_http.py b/src/auth0/management/types/create_flows_vault_connection_http.py
new file mode 100644
index 00000000..89a79f9f
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_http.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_http_bearer import CreateFlowsVaultConnectionHttpBearer
+from .create_flows_vault_connection_http_uninitialized import CreateFlowsVaultConnectionHttpUninitialized
+
+CreateFlowsVaultConnectionHttp = typing.Union[
+ CreateFlowsVaultConnectionHttpBearer, CreateFlowsVaultConnectionHttpUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_http_bearer.py b/src/auth0/management/types/create_flows_vault_connection_http_bearer.py
new file mode 100644
index 00000000..4db37d91
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_http_bearer.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_http_bearer import FlowsVaultConnectioSetupHttpBearer
+from .flows_vault_connection_app_id_http_enum import FlowsVaultConnectionAppIdHttpEnum
+
+
+class CreateFlowsVaultConnectionHttpBearer(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdHttpEnum = "HTTP"
+ setup: FlowsVaultConnectioSetupHttpBearer
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_http_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_http_uninitialized.py
new file mode 100644
index 00000000..a2474cba
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_http_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_http_enum import FlowsVaultConnectionAppIdHttpEnum
+
+
+class CreateFlowsVaultConnectionHttpUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdHttpEnum = "HTTP"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_hubspot.py b/src/auth0/management/types/create_flows_vault_connection_hubspot.py
new file mode 100644
index 00000000..ce1e3014
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_hubspot.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_hubspot_api_key import CreateFlowsVaultConnectionHubspotApiKey
+from .create_flows_vault_connection_hubspot_oauth_code import CreateFlowsVaultConnectionHubspotOauthCode
+from .create_flows_vault_connection_hubspot_uninitialized import CreateFlowsVaultConnectionHubspotUninitialized
+
+CreateFlowsVaultConnectionHubspot = typing.Union[
+ CreateFlowsVaultConnectionHubspotApiKey,
+ CreateFlowsVaultConnectionHubspotOauthCode,
+ CreateFlowsVaultConnectionHubspotUninitialized,
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_hubspot_api_key.py b/src/auth0/management/types/create_flows_vault_connection_hubspot_api_key.py
new file mode 100644
index 00000000..3217fa97
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_hubspot_api_key.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_api_key import FlowsVaultConnectioSetupApiKey
+from .flows_vault_connection_app_id_hubspot_enum import FlowsVaultConnectionAppIdHubspotEnum
+
+
+class CreateFlowsVaultConnectionHubspotApiKey(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdHubspotEnum = "HUBSPOT"
+ setup: FlowsVaultConnectioSetupApiKey
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_hubspot_oauth_code.py b/src/auth0/management/types/create_flows_vault_connection_hubspot_oauth_code.py
new file mode 100644
index 00000000..3fe4dacf
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_hubspot_oauth_code.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+from .flows_vault_connection_app_id_hubspot_enum import FlowsVaultConnectionAppIdHubspotEnum
+
+
+class CreateFlowsVaultConnectionHubspotOauthCode(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdHubspotEnum = "HUBSPOT"
+ setup: FlowsVaultConnectioSetupOauthCode
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_hubspot_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_hubspot_uninitialized.py
new file mode 100644
index 00000000..99163844
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_hubspot_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_hubspot_enum import FlowsVaultConnectionAppIdHubspotEnum
+
+
+class CreateFlowsVaultConnectionHubspotUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdHubspotEnum = "HUBSPOT"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_jwt.py b/src/auth0/management/types/create_flows_vault_connection_jwt.py
new file mode 100644
index 00000000..18db72b9
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_jwt.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_jwt_jwt import CreateFlowsVaultConnectionJwtJwt
+from .create_flows_vault_connection_jwt_uninitialized import CreateFlowsVaultConnectionJwtUninitialized
+
+CreateFlowsVaultConnectionJwt = typing.Union[
+ CreateFlowsVaultConnectionJwtJwt, CreateFlowsVaultConnectionJwtUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_jwt_jwt.py b/src/auth0/management/types/create_flows_vault_connection_jwt_jwt.py
new file mode 100644
index 00000000..8e444d41
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_jwt_jwt.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_jwt import FlowsVaultConnectioSetupJwt
+from .flows_vault_connection_app_id_jwt_enum import FlowsVaultConnectionAppIdJwtEnum
+
+
+class CreateFlowsVaultConnectionJwtJwt(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdJwtEnum = "JWT"
+ setup: FlowsVaultConnectioSetupJwt
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_jwt_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_jwt_uninitialized.py
new file mode 100644
index 00000000..daf6d0fd
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_jwt_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_jwt_enum import FlowsVaultConnectionAppIdJwtEnum
+
+
+class CreateFlowsVaultConnectionJwtUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdJwtEnum = "JWT"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_mailchimp.py b/src/auth0/management/types/create_flows_vault_connection_mailchimp.py
new file mode 100644
index 00000000..e31af458
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_mailchimp.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_mailchimp_api_key import CreateFlowsVaultConnectionMailchimpApiKey
+from .create_flows_vault_connection_mailchimp_oauth_code import CreateFlowsVaultConnectionMailchimpOauthCode
+from .create_flows_vault_connection_mailchimp_uninitialized import CreateFlowsVaultConnectionMailchimpUninitialized
+
+CreateFlowsVaultConnectionMailchimp = typing.Union[
+ CreateFlowsVaultConnectionMailchimpApiKey,
+ CreateFlowsVaultConnectionMailchimpOauthCode,
+ CreateFlowsVaultConnectionMailchimpUninitialized,
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_mailchimp_api_key.py b/src/auth0/management/types/create_flows_vault_connection_mailchimp_api_key.py
new file mode 100644
index 00000000..a3979195
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_mailchimp_api_key.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_secret_api_key import FlowsVaultConnectioSetupSecretApiKey
+from .flows_vault_connection_app_id_mailchimp_enum import FlowsVaultConnectionAppIdMailchimpEnum
+
+
+class CreateFlowsVaultConnectionMailchimpApiKey(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdMailchimpEnum = "MAILCHIMP"
+ setup: FlowsVaultConnectioSetupSecretApiKey
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_mailchimp_oauth_code.py b/src/auth0/management/types/create_flows_vault_connection_mailchimp_oauth_code.py
new file mode 100644
index 00000000..a9eac751
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_mailchimp_oauth_code.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+from .flows_vault_connection_app_id_mailchimp_enum import FlowsVaultConnectionAppIdMailchimpEnum
+
+
+class CreateFlowsVaultConnectionMailchimpOauthCode(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdMailchimpEnum = "MAILCHIMP"
+ setup: FlowsVaultConnectioSetupOauthCode
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_mailchimp_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_mailchimp_uninitialized.py
new file mode 100644
index 00000000..aa291791
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_mailchimp_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_mailchimp_enum import FlowsVaultConnectionAppIdMailchimpEnum
+
+
+class CreateFlowsVaultConnectionMailchimpUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdMailchimpEnum = "MAILCHIMP"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_mailjet.py b/src/auth0/management/types/create_flows_vault_connection_mailjet.py
new file mode 100644
index 00000000..98366143
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_mailjet.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_mailjet_api_key import CreateFlowsVaultConnectionMailjetApiKey
+from .create_flows_vault_connection_mailjet_uninitialized import CreateFlowsVaultConnectionMailjetUninitialized
+
+CreateFlowsVaultConnectionMailjet = typing.Union[
+ CreateFlowsVaultConnectionMailjetApiKey, CreateFlowsVaultConnectionMailjetUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_mailjet_api_key.py b/src/auth0/management/types/create_flows_vault_connection_mailjet_api_key.py
new file mode 100644
index 00000000..a57d8d11
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_mailjet_api_key.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_mailjet_api_key import FlowsVaultConnectioSetupMailjetApiKey
+from .flows_vault_connection_app_id_mailjet_enum import FlowsVaultConnectionAppIdMailjetEnum
+
+
+class CreateFlowsVaultConnectionMailjetApiKey(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdMailjetEnum = "MAILJET"
+ setup: FlowsVaultConnectioSetupMailjetApiKey
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_mailjet_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_mailjet_uninitialized.py
new file mode 100644
index 00000000..f92c28c2
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_mailjet_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_mailjet_enum import FlowsVaultConnectionAppIdMailjetEnum
+
+
+class CreateFlowsVaultConnectionMailjetUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdMailjetEnum = "MAILJET"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_pipedrive.py b/src/auth0/management/types/create_flows_vault_connection_pipedrive.py
new file mode 100644
index 00000000..6864f679
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_pipedrive.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_pipedrive_oauth_code import CreateFlowsVaultConnectionPipedriveOauthCode
+from .create_flows_vault_connection_pipedrive_token import CreateFlowsVaultConnectionPipedriveToken
+from .create_flows_vault_connection_pipedrive_uninitialized import CreateFlowsVaultConnectionPipedriveUninitialized
+
+CreateFlowsVaultConnectionPipedrive = typing.Union[
+ CreateFlowsVaultConnectionPipedriveToken,
+ CreateFlowsVaultConnectionPipedriveOauthCode,
+ CreateFlowsVaultConnectionPipedriveUninitialized,
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_pipedrive_oauth_code.py b/src/auth0/management/types/create_flows_vault_connection_pipedrive_oauth_code.py
new file mode 100644
index 00000000..84fa3470
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_pipedrive_oauth_code.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+from .flows_vault_connection_app_id_pipedrive_enum import FlowsVaultConnectionAppIdPipedriveEnum
+
+
+class CreateFlowsVaultConnectionPipedriveOauthCode(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdPipedriveEnum = "PIPEDRIVE"
+ setup: FlowsVaultConnectioSetupOauthCode
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_pipedrive_token.py b/src/auth0/management/types/create_flows_vault_connection_pipedrive_token.py
new file mode 100644
index 00000000..9af7cb0a
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_pipedrive_token.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_token import FlowsVaultConnectioSetupToken
+from .flows_vault_connection_app_id_pipedrive_enum import FlowsVaultConnectionAppIdPipedriveEnum
+
+
+class CreateFlowsVaultConnectionPipedriveToken(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdPipedriveEnum = "PIPEDRIVE"
+ setup: FlowsVaultConnectioSetupToken
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_pipedrive_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_pipedrive_uninitialized.py
new file mode 100644
index 00000000..98e5e07b
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_pipedrive_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_pipedrive_enum import FlowsVaultConnectionAppIdPipedriveEnum
+
+
+class CreateFlowsVaultConnectionPipedriveUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdPipedriveEnum = "PIPEDRIVE"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_request_content.py b/src/auth0/management/types/create_flows_vault_connection_request_content.py
new file mode 100644
index 00000000..f32bab9c
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_request_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_activecampaign import CreateFlowsVaultConnectionActivecampaign
+from .create_flows_vault_connection_airtable import CreateFlowsVaultConnectionAirtable
+from .create_flows_vault_connection_auth_0 import CreateFlowsVaultConnectionAuth0
+from .create_flows_vault_connection_bigquery import CreateFlowsVaultConnectionBigquery
+from .create_flows_vault_connection_clearbit import CreateFlowsVaultConnectionClearbit
+from .create_flows_vault_connection_docusign import CreateFlowsVaultConnectionDocusign
+from .create_flows_vault_connection_google_sheets import CreateFlowsVaultConnectionGoogleSheets
+from .create_flows_vault_connection_http import CreateFlowsVaultConnectionHttp
+from .create_flows_vault_connection_hubspot import CreateFlowsVaultConnectionHubspot
+from .create_flows_vault_connection_jwt import CreateFlowsVaultConnectionJwt
+from .create_flows_vault_connection_mailchimp import CreateFlowsVaultConnectionMailchimp
+from .create_flows_vault_connection_mailjet import CreateFlowsVaultConnectionMailjet
+from .create_flows_vault_connection_pipedrive import CreateFlowsVaultConnectionPipedrive
+from .create_flows_vault_connection_salesforce import CreateFlowsVaultConnectionSalesforce
+from .create_flows_vault_connection_sendgrid import CreateFlowsVaultConnectionSendgrid
+from .create_flows_vault_connection_slack import CreateFlowsVaultConnectionSlack
+from .create_flows_vault_connection_stripe import CreateFlowsVaultConnectionStripe
+from .create_flows_vault_connection_telegram import CreateFlowsVaultConnectionTelegram
+from .create_flows_vault_connection_twilio import CreateFlowsVaultConnectionTwilio
+from .create_flows_vault_connection_whatsapp import CreateFlowsVaultConnectionWhatsapp
+from .create_flows_vault_connection_zapier import CreateFlowsVaultConnectionZapier
+
+CreateFlowsVaultConnectionRequestContent = typing.Union[
+ CreateFlowsVaultConnectionActivecampaign,
+ CreateFlowsVaultConnectionAirtable,
+ CreateFlowsVaultConnectionAuth0,
+ CreateFlowsVaultConnectionBigquery,
+ CreateFlowsVaultConnectionClearbit,
+ CreateFlowsVaultConnectionDocusign,
+ CreateFlowsVaultConnectionGoogleSheets,
+ CreateFlowsVaultConnectionHttp,
+ CreateFlowsVaultConnectionHubspot,
+ CreateFlowsVaultConnectionJwt,
+ CreateFlowsVaultConnectionMailchimp,
+ CreateFlowsVaultConnectionMailjet,
+ CreateFlowsVaultConnectionPipedrive,
+ CreateFlowsVaultConnectionSalesforce,
+ CreateFlowsVaultConnectionSendgrid,
+ CreateFlowsVaultConnectionSlack,
+ CreateFlowsVaultConnectionStripe,
+ CreateFlowsVaultConnectionTelegram,
+ CreateFlowsVaultConnectionTwilio,
+ CreateFlowsVaultConnectionWhatsapp,
+ CreateFlowsVaultConnectionZapier,
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_response_content.py b/src/auth0/management/types/create_flows_vault_connection_response_content.py
new file mode 100644
index 00000000..34bf5b63
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_response_content.py
@@ -0,0 +1,65 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateFlowsVaultConnectionResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Flows Vault Connection identifier.
+ """
+
+ app_id: str = pydantic.Field()
+ """
+ Flows Vault Connection app identifier.
+ """
+
+ environment: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Flows Vault Connection environment.
+ """
+
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ account_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Flows Vault Connection custom account name.
+ """
+
+ ready: bool = pydantic.Field()
+ """
+ Whether the Flows Vault Connection is configured.
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was created.
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was updated.
+ """
+
+ refreshed_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was refreshed.
+ """
+
+ fingerprint: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_salesforce.py b/src/auth0/management/types/create_flows_vault_connection_salesforce.py
new file mode 100644
index 00000000..be41c17e
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_salesforce.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_salesforce_oauth_code import CreateFlowsVaultConnectionSalesforceOauthCode
+from .create_flows_vault_connection_salesforce_uninitialized import CreateFlowsVaultConnectionSalesforceUninitialized
+
+CreateFlowsVaultConnectionSalesforce = typing.Union[
+ CreateFlowsVaultConnectionSalesforceOauthCode, CreateFlowsVaultConnectionSalesforceUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_salesforce_oauth_code.py b/src/auth0/management/types/create_flows_vault_connection_salesforce_oauth_code.py
new file mode 100644
index 00000000..7f886a13
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_salesforce_oauth_code.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+from .flows_vault_connection_app_id_salesforce_enum import FlowsVaultConnectionAppIdSalesforceEnum
+
+
+class CreateFlowsVaultConnectionSalesforceOauthCode(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdSalesforceEnum = "SALESFORCE"
+ setup: FlowsVaultConnectioSetupOauthCode
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_salesforce_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_salesforce_uninitialized.py
new file mode 100644
index 00000000..a7781af2
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_salesforce_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_salesforce_enum import FlowsVaultConnectionAppIdSalesforceEnum
+
+
+class CreateFlowsVaultConnectionSalesforceUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdSalesforceEnum = "SALESFORCE"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_sendgrid.py b/src/auth0/management/types/create_flows_vault_connection_sendgrid.py
new file mode 100644
index 00000000..ab284ee2
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_sendgrid.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_sendgrid_api_key import CreateFlowsVaultConnectionSendgridApiKey
+from .create_flows_vault_connection_sendgrid_uninitialized import CreateFlowsVaultConnectionSendgridUninitialized
+
+CreateFlowsVaultConnectionSendgrid = typing.Union[
+ CreateFlowsVaultConnectionSendgridApiKey, CreateFlowsVaultConnectionSendgridUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_sendgrid_api_key.py b/src/auth0/management/types/create_flows_vault_connection_sendgrid_api_key.py
new file mode 100644
index 00000000..64278904
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_sendgrid_api_key.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_api_key import FlowsVaultConnectioSetupApiKey
+from .flows_vault_connection_app_id_sendgrid_enum import FlowsVaultConnectionAppIdSendgridEnum
+
+
+class CreateFlowsVaultConnectionSendgridApiKey(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdSendgridEnum = "SENDGRID"
+ setup: FlowsVaultConnectioSetupApiKey
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_sendgrid_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_sendgrid_uninitialized.py
new file mode 100644
index 00000000..7783d36e
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_sendgrid_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_sendgrid_enum import FlowsVaultConnectionAppIdSendgridEnum
+
+
+class CreateFlowsVaultConnectionSendgridUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdSendgridEnum = "SENDGRID"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_slack.py b/src/auth0/management/types/create_flows_vault_connection_slack.py
new file mode 100644
index 00000000..e5ac6e19
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_slack.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_slack_oauth_code import CreateFlowsVaultConnectionSlackOauthCode
+from .create_flows_vault_connection_slack_uninitialized import CreateFlowsVaultConnectionSlackUninitialized
+from .create_flows_vault_connection_slack_webhook import CreateFlowsVaultConnectionSlackWebhook
+
+CreateFlowsVaultConnectionSlack = typing.Union[
+ CreateFlowsVaultConnectionSlackWebhook,
+ CreateFlowsVaultConnectionSlackOauthCode,
+ CreateFlowsVaultConnectionSlackUninitialized,
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_slack_oauth_code.py b/src/auth0/management/types/create_flows_vault_connection_slack_oauth_code.py
new file mode 100644
index 00000000..c5b9ed47
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_slack_oauth_code.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+from .flows_vault_connection_app_id_slack_enum import FlowsVaultConnectionAppIdSlackEnum
+
+
+class CreateFlowsVaultConnectionSlackOauthCode(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdSlackEnum = "SLACK"
+ setup: FlowsVaultConnectioSetupOauthCode
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_slack_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_slack_uninitialized.py
new file mode 100644
index 00000000..6bf6c185
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_slack_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_slack_enum import FlowsVaultConnectionAppIdSlackEnum
+
+
+class CreateFlowsVaultConnectionSlackUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdSlackEnum = "SLACK"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_slack_webhook.py b/src/auth0/management/types/create_flows_vault_connection_slack_webhook.py
new file mode 100644
index 00000000..dd1a3c7d
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_slack_webhook.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_webhook import FlowsVaultConnectioSetupWebhook
+from .flows_vault_connection_app_id_slack_enum import FlowsVaultConnectionAppIdSlackEnum
+
+
+class CreateFlowsVaultConnectionSlackWebhook(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdSlackEnum = "SLACK"
+ setup: FlowsVaultConnectioSetupWebhook
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_stripe.py b/src/auth0/management/types/create_flows_vault_connection_stripe.py
new file mode 100644
index 00000000..73c90ecf
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_stripe.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_stripe_key_pair import CreateFlowsVaultConnectionStripeKeyPair
+from .create_flows_vault_connection_stripe_oauth_code import CreateFlowsVaultConnectionStripeOauthCode
+from .create_flows_vault_connection_stripe_uninitialized import CreateFlowsVaultConnectionStripeUninitialized
+
+CreateFlowsVaultConnectionStripe = typing.Union[
+ CreateFlowsVaultConnectionStripeKeyPair,
+ CreateFlowsVaultConnectionStripeOauthCode,
+ CreateFlowsVaultConnectionStripeUninitialized,
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_stripe_key_pair.py b/src/auth0/management/types/create_flows_vault_connection_stripe_key_pair.py
new file mode 100644
index 00000000..ccdd6de6
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_stripe_key_pair.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_stripe_key_pair import FlowsVaultConnectioSetupStripeKeyPair
+from .flows_vault_connection_app_id_stripe_enum import FlowsVaultConnectionAppIdStripeEnum
+
+
+class CreateFlowsVaultConnectionStripeKeyPair(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdStripeEnum = "STRIPE"
+ setup: FlowsVaultConnectioSetupStripeKeyPair
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_stripe_oauth_code.py b/src/auth0/management/types/create_flows_vault_connection_stripe_oauth_code.py
new file mode 100644
index 00000000..85df25a3
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_stripe_oauth_code.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+from .flows_vault_connection_app_id_stripe_enum import FlowsVaultConnectionAppIdStripeEnum
+
+
+class CreateFlowsVaultConnectionStripeOauthCode(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdStripeEnum = "STRIPE"
+ setup: FlowsVaultConnectioSetupOauthCode
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_stripe_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_stripe_uninitialized.py
new file mode 100644
index 00000000..daae7785
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_stripe_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_stripe_enum import FlowsVaultConnectionAppIdStripeEnum
+
+
+class CreateFlowsVaultConnectionStripeUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdStripeEnum = "STRIPE"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_telegram.py b/src/auth0/management/types/create_flows_vault_connection_telegram.py
new file mode 100644
index 00000000..94c8aff0
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_telegram.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_telegram_token import CreateFlowsVaultConnectionTelegramToken
+from .create_flows_vault_connection_telegram_uninitialized import CreateFlowsVaultConnectionTelegramUninitialized
+
+CreateFlowsVaultConnectionTelegram = typing.Union[
+ CreateFlowsVaultConnectionTelegramToken, CreateFlowsVaultConnectionTelegramUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_telegram_token.py b/src/auth0/management/types/create_flows_vault_connection_telegram_token.py
new file mode 100644
index 00000000..a825cfde
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_telegram_token.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_token import FlowsVaultConnectioSetupToken
+from .flows_vault_connection_app_id_telegram_enum import FlowsVaultConnectionAppIdTelegramEnum
+
+
+class CreateFlowsVaultConnectionTelegramToken(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdTelegramEnum = "TELEGRAM"
+ setup: FlowsVaultConnectioSetupToken
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_telegram_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_telegram_uninitialized.py
new file mode 100644
index 00000000..ca7b49d7
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_telegram_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_telegram_enum import FlowsVaultConnectionAppIdTelegramEnum
+
+
+class CreateFlowsVaultConnectionTelegramUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdTelegramEnum = "TELEGRAM"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_twilio.py b/src/auth0/management/types/create_flows_vault_connection_twilio.py
new file mode 100644
index 00000000..fe859a63
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_twilio.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_twilio_api_key import CreateFlowsVaultConnectionTwilioApiKey
+from .create_flows_vault_connection_twilio_uninitialized import CreateFlowsVaultConnectionTwilioUninitialized
+
+CreateFlowsVaultConnectionTwilio = typing.Union[
+ CreateFlowsVaultConnectionTwilioApiKey, CreateFlowsVaultConnectionTwilioUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_twilio_api_key.py b/src/auth0/management/types/create_flows_vault_connection_twilio_api_key.py
new file mode 100644
index 00000000..dd25ea76
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_twilio_api_key.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_twilio_api_key import FlowsVaultConnectioSetupTwilioApiKey
+from .flows_vault_connection_app_id_twilio_enum import FlowsVaultConnectionAppIdTwilioEnum
+
+
+class CreateFlowsVaultConnectionTwilioApiKey(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdTwilioEnum = "TWILIO"
+ setup: FlowsVaultConnectioSetupTwilioApiKey
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_twilio_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_twilio_uninitialized.py
new file mode 100644
index 00000000..fafa226b
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_twilio_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_twilio_enum import FlowsVaultConnectionAppIdTwilioEnum
+
+
+class CreateFlowsVaultConnectionTwilioUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdTwilioEnum = "TWILIO"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_whatsapp.py b/src/auth0/management/types/create_flows_vault_connection_whatsapp.py
new file mode 100644
index 00000000..3eb2623a
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_whatsapp.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_whatsapp_token import CreateFlowsVaultConnectionWhatsappToken
+from .create_flows_vault_connection_whatsapp_uninitialized import CreateFlowsVaultConnectionWhatsappUninitialized
+
+CreateFlowsVaultConnectionWhatsapp = typing.Union[
+ CreateFlowsVaultConnectionWhatsappToken, CreateFlowsVaultConnectionWhatsappUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_whatsapp_token.py b/src/auth0/management/types/create_flows_vault_connection_whatsapp_token.py
new file mode 100644
index 00000000..0aea6cac
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_whatsapp_token.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_token import FlowsVaultConnectioSetupToken
+from .flows_vault_connection_app_id_whatsapp_enum import FlowsVaultConnectionAppIdWhatsappEnum
+
+
+class CreateFlowsVaultConnectionWhatsappToken(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdWhatsappEnum = "WHATSAPP"
+ setup: FlowsVaultConnectioSetupToken
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_whatsapp_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_whatsapp_uninitialized.py
new file mode 100644
index 00000000..448f1335
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_whatsapp_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_whatsapp_enum import FlowsVaultConnectionAppIdWhatsappEnum
+
+
+class CreateFlowsVaultConnectionWhatsappUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdWhatsappEnum = "WHATSAPP"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_zapier.py b/src/auth0/management/types/create_flows_vault_connection_zapier.py
new file mode 100644
index 00000000..65bb1eab
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_zapier.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_flows_vault_connection_zapier_uninitialized import CreateFlowsVaultConnectionZapierUninitialized
+from .create_flows_vault_connection_zapier_webhook import CreateFlowsVaultConnectionZapierWebhook
+
+CreateFlowsVaultConnectionZapier = typing.Union[
+ CreateFlowsVaultConnectionZapierWebhook, CreateFlowsVaultConnectionZapierUninitialized
+]
diff --git a/src/auth0/management/types/create_flows_vault_connection_zapier_uninitialized.py b/src/auth0/management/types/create_flows_vault_connection_zapier_uninitialized.py
new file mode 100644
index 00000000..96944a97
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_zapier_uninitialized.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connection_app_id_zapier_enum import FlowsVaultConnectionAppIdZapierEnum
+
+
+class CreateFlowsVaultConnectionZapierUninitialized(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdZapierEnum = "ZAPIER"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_flows_vault_connection_zapier_webhook.py b/src/auth0/management/types/create_flows_vault_connection_zapier_webhook.py
new file mode 100644
index 00000000..7af989c5
--- /dev/null
+++ b/src/auth0/management/types/create_flows_vault_connection_zapier_webhook.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_webhook import FlowsVaultConnectioSetupWebhook
+from .flows_vault_connection_app_id_zapier_enum import FlowsVaultConnectionAppIdZapierEnum
+
+
+class CreateFlowsVaultConnectionZapierWebhook(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ app_id: FlowsVaultConnectionAppIdZapierEnum = "ZAPIER"
+ setup: FlowsVaultConnectioSetupWebhook
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_form_response_content.py b/src/auth0/management/types/create_form_response_content.py
new file mode 100644
index 00000000..9ec6c007
--- /dev/null
+++ b/src/auth0/management/types/create_form_response_content.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_ending_node import FormEndingNode
+from .form_languages import FormLanguages
+from .form_messages import FormMessages
+from .form_node_list import FormNodeList
+from .form_start_node import FormStartNode
+from .form_style import FormStyle
+from .form_translations import FormTranslations
+
+
+class CreateFormResponseContent(UniversalBaseModel):
+ id: str
+ name: str
+ messages: typing.Optional[FormMessages] = None
+ languages: typing.Optional[FormLanguages] = None
+ translations: typing.Optional[FormTranslations] = None
+ nodes: typing.Optional[FormNodeList] = None
+ start: typing.Optional[FormStartNode] = None
+ ending: typing.Optional[FormEndingNode] = None
+ style: typing.Optional[FormStyle] = None
+ created_at: dt.datetime
+ updated_at: dt.datetime
+ embedded_at: typing.Optional[str] = None
+ submitted_at: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_guardian_enrollment_ticket_response_content.py b/src/auth0/management/types/create_guardian_enrollment_ticket_response_content.py
new file mode 100644
index 00000000..a10df488
--- /dev/null
+++ b/src/auth0/management/types/create_guardian_enrollment_ticket_response_content.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateGuardianEnrollmentTicketResponseContent(UniversalBaseModel):
+ ticket_id: typing.Optional[str] = pydantic.Field(default="u2x2-u2x2-u2x2-u2x2-u2x2-u2x2")
+ """
+ The ticket_id used to identify the enrollment
+ """
+
+ ticket_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The url you can use to start enrollment
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_hook_response_content.py b/src/auth0/management/types/create_hook_response_content.py
new file mode 100644
index 00000000..783e16af
--- /dev/null
+++ b/src/auth0/management/types/create_hook_response_content.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .hook_dependencies import HookDependencies
+
+
+class CreateHookResponseContent(UniversalBaseModel):
+ trigger_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="triggerId")] = pydantic.Field(
+ default=None
+ )
+ """
+ Trigger ID
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="00001")
+ """
+ ID of this hook.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="hook")
+ """
+ Name of this hook.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether this hook will be executed (true) or ignored (false).
+ """
+
+ script: typing.Optional[str] = pydantic.Field(
+ default="module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };"
+ )
+ """
+ Code to be executed when this hook runs.
+ """
+
+ dependencies: typing.Optional[HookDependencies] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_hook_secret_request_content.py b/src/auth0/management/types/create_hook_secret_request_content.py
new file mode 100644
index 00000000..75905b7c
--- /dev/null
+++ b/src/auth0/management/types/create_hook_secret_request_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CreateHookSecretRequestContent = typing.Dict[str, str]
diff --git a/src/auth0/management/types/create_import_users_response_content.py b/src/auth0/management/types/create_import_users_response_content.py
new file mode 100644
index 00000000..a688e79a
--- /dev/null
+++ b/src/auth0/management/types/create_import_users_response_content.py
@@ -0,0 +1,47 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateImportUsersResponseContent(UniversalBaseModel):
+ status: str = pydantic.Field(default="pending")
+ """
+ Status of this job.
+ """
+
+ type: str = pydantic.Field(default="users_import")
+ """
+ Type of job this is.
+ """
+
+ created_at: str = pydantic.Field()
+ """
+ When this job was created.
+ """
+
+ id: str = pydantic.Field(default="job_0000000000000001")
+ """
+ ID of this job.
+ """
+
+ connection_id: str = pydantic.Field(default="con_0000000000000001")
+ """
+ connection_id of the connection to which users will be imported.
+ """
+
+ external_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Customer-defined ID.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_log_stream_datadog_request_body.py b/src/auth0/management/types/create_log_stream_datadog_request_body.py
new file mode 100644
index 00000000..bc27cb30
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_datadog_request_body.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .log_stream_datadog_enum import LogStreamDatadogEnum
+from .log_stream_datadog_sink import LogStreamDatadogSink
+from .log_stream_filter import LogStreamFilter
+from .log_stream_pii_config import LogStreamPiiConfig
+
+
+class CreateLogStreamDatadogRequestBody(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ log stream name
+ """
+
+ type: LogStreamDatadogEnum = "datadog"
+ is_priority: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPriority")] = pydantic.Field(
+ default=None
+ )
+ """
+ True for priority log streams, false for non-priority
+ """
+
+ filters: typing.Optional[typing.List[LogStreamFilter]] = pydantic.Field(default=None)
+ """
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+ """
+
+ pii_config: typing.Optional[LogStreamPiiConfig] = None
+ sink: LogStreamDatadogSink
+ start_from: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="startFrom")] = pydantic.Field(
+ default="2021-03-01T19:57:29.532Z"
+ )
+ """
+ The optional datetime (ISO 8601) to start streaming logs from
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_log_stream_event_bridge_request_body.py b/src/auth0/management/types/create_log_stream_event_bridge_request_body.py
new file mode 100644
index 00000000..55d56b55
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_event_bridge_request_body.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .log_stream_event_bridge_enum import LogStreamEventBridgeEnum
+from .log_stream_event_bridge_sink import LogStreamEventBridgeSink
+from .log_stream_filter import LogStreamFilter
+from .log_stream_pii_config import LogStreamPiiConfig
+
+
+class CreateLogStreamEventBridgeRequestBody(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ log stream name
+ """
+
+ type: LogStreamEventBridgeEnum = "eventbridge"
+ is_priority: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPriority")] = pydantic.Field(
+ default=None
+ )
+ """
+ True for priority log streams, false for non-priority
+ """
+
+ filters: typing.Optional[typing.List[LogStreamFilter]] = pydantic.Field(default=None)
+ """
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+ """
+
+ pii_config: typing.Optional[LogStreamPiiConfig] = None
+ sink: LogStreamEventBridgeSink
+ start_from: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="startFrom")] = pydantic.Field(
+ default="2021-03-01T19:57:29.532Z"
+ )
+ """
+ The optional datetime (ISO 8601) to start streaming logs from
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_log_stream_event_grid_request_body.py b/src/auth0/management/types/create_log_stream_event_grid_request_body.py
new file mode 100644
index 00000000..80af4a07
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_event_grid_request_body.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .log_stream_event_grid_enum import LogStreamEventGridEnum
+from .log_stream_event_grid_sink import LogStreamEventGridSink
+from .log_stream_filter import LogStreamFilter
+from .log_stream_pii_config import LogStreamPiiConfig
+
+
+class CreateLogStreamEventGridRequestBody(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ log stream name
+ """
+
+ type: LogStreamEventGridEnum = "eventgrid"
+ is_priority: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPriority")] = pydantic.Field(
+ default=None
+ )
+ """
+ True for priority log streams, false for non-priority
+ """
+
+ filters: typing.Optional[typing.List[LogStreamFilter]] = pydantic.Field(default=None)
+ """
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+ """
+
+ pii_config: typing.Optional[LogStreamPiiConfig] = None
+ sink: LogStreamEventGridSink
+ start_from: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="startFrom")] = pydantic.Field(
+ default="2021-03-01T19:57:29.532Z"
+ )
+ """
+ The optional datetime (ISO 8601) to start streaming logs from
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_log_stream_http_request_body.py b/src/auth0/management/types/create_log_stream_http_request_body.py
new file mode 100644
index 00000000..d1c89109
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_http_request_body.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .log_stream_filter import LogStreamFilter
+from .log_stream_http_enum import LogStreamHttpEnum
+from .log_stream_http_sink import LogStreamHttpSink
+from .log_stream_pii_config import LogStreamPiiConfig
+
+
+class CreateLogStreamHttpRequestBody(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ log stream name
+ """
+
+ type: LogStreamHttpEnum = "http"
+ is_priority: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPriority")] = pydantic.Field(
+ default=None
+ )
+ """
+ True for priority log streams, false for non-priority
+ """
+
+ filters: typing.Optional[typing.List[LogStreamFilter]] = pydantic.Field(default=None)
+ """
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+ """
+
+ pii_config: typing.Optional[LogStreamPiiConfig] = None
+ sink: LogStreamHttpSink
+ start_from: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="startFrom")] = pydantic.Field(
+ default="2021-03-01T19:57:29.532Z"
+ )
+ """
+ The optional datetime (ISO 8601) to start streaming logs from
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_log_stream_mixpanel_request_body.py b/src/auth0/management/types/create_log_stream_mixpanel_request_body.py
new file mode 100644
index 00000000..c45607b0
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_mixpanel_request_body.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .log_stream_filter import LogStreamFilter
+from .log_stream_mixpanel_enum import LogStreamMixpanelEnum
+from .log_stream_mixpanel_sink import LogStreamMixpanelSink
+from .log_stream_pii_config import LogStreamPiiConfig
+
+
+class CreateLogStreamMixpanelRequestBody(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ log stream name
+ """
+
+ type: LogStreamMixpanelEnum = "mixpanel"
+ is_priority: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPriority")] = pydantic.Field(
+ default=None
+ )
+ """
+ True for priority log streams, false for non-priority
+ """
+
+ filters: typing.Optional[typing.List[LogStreamFilter]] = pydantic.Field(default=None)
+ """
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+ """
+
+ pii_config: typing.Optional[LogStreamPiiConfig] = None
+ sink: LogStreamMixpanelSink
+ start_from: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="startFrom")] = pydantic.Field(
+ default="2021-03-01T19:57:29.532Z"
+ )
+ """
+ The optional datetime (ISO 8601) to start streaming logs from
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_log_stream_request_content.py b/src/auth0/management/types/create_log_stream_request_content.py
new file mode 100644
index 00000000..6a181990
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_request_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .create_log_stream_datadog_request_body import CreateLogStreamDatadogRequestBody
+from .create_log_stream_event_bridge_request_body import CreateLogStreamEventBridgeRequestBody
+from .create_log_stream_event_grid_request_body import CreateLogStreamEventGridRequestBody
+from .create_log_stream_http_request_body import CreateLogStreamHttpRequestBody
+from .create_log_stream_mixpanel_request_body import CreateLogStreamMixpanelRequestBody
+from .create_log_stream_segment_request_body import CreateLogStreamSegmentRequestBody
+from .create_log_stream_splunk_request_body import CreateLogStreamSplunkRequestBody
+from .create_log_stream_sumo_request_body import CreateLogStreamSumoRequestBody
+
+CreateLogStreamRequestContent = typing.Union[
+ CreateLogStreamHttpRequestBody,
+ CreateLogStreamEventBridgeRequestBody,
+ CreateLogStreamEventGridRequestBody,
+ CreateLogStreamDatadogRequestBody,
+ CreateLogStreamSplunkRequestBody,
+ CreateLogStreamSumoRequestBody,
+ CreateLogStreamSegmentRequestBody,
+ CreateLogStreamMixpanelRequestBody,
+]
diff --git a/src/auth0/management/types/create_log_stream_response_content.py b/src/auth0/management/types/create_log_stream_response_content.py
new file mode 100644
index 00000000..0a04d242
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .log_stream_datadog_response_schema import LogStreamDatadogResponseSchema
+from .log_stream_event_bridge_response_schema import LogStreamEventBridgeResponseSchema
+from .log_stream_event_grid_response_schema import LogStreamEventGridResponseSchema
+from .log_stream_http_response_schema import LogStreamHttpResponseSchema
+from .log_stream_mixpanel_response_schema import LogStreamMixpanelResponseSchema
+from .log_stream_segment_response_schema import LogStreamSegmentResponseSchema
+from .log_stream_splunk_response_schema import LogStreamSplunkResponseSchema
+from .log_stream_sumo_response_schema import LogStreamSumoResponseSchema
+
+CreateLogStreamResponseContent = typing.Union[
+ LogStreamHttpResponseSchema,
+ LogStreamEventBridgeResponseSchema,
+ LogStreamEventGridResponseSchema,
+ LogStreamDatadogResponseSchema,
+ LogStreamSplunkResponseSchema,
+ LogStreamSumoResponseSchema,
+ LogStreamSegmentResponseSchema,
+ LogStreamMixpanelResponseSchema,
+]
diff --git a/src/auth0/management/types/create_log_stream_segment_request_body.py b/src/auth0/management/types/create_log_stream_segment_request_body.py
new file mode 100644
index 00000000..a61a7c56
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_segment_request_body.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .log_stream_filter import LogStreamFilter
+from .log_stream_pii_config import LogStreamPiiConfig
+from .log_stream_segment_enum import LogStreamSegmentEnum
+from .log_stream_segment_sink_write_key import LogStreamSegmentSinkWriteKey
+
+
+class CreateLogStreamSegmentRequestBody(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ log stream name
+ """
+
+ type: LogStreamSegmentEnum = "segment"
+ is_priority: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPriority")] = pydantic.Field(
+ default=None
+ )
+ """
+ True for priority log streams, false for non-priority
+ """
+
+ filters: typing.Optional[typing.List[LogStreamFilter]] = pydantic.Field(default=None)
+ """
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+ """
+
+ pii_config: typing.Optional[LogStreamPiiConfig] = None
+ sink: LogStreamSegmentSinkWriteKey
+ start_from: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="startFrom")] = pydantic.Field(
+ default="2021-03-01T19:57:29.532Z"
+ )
+ """
+ The optional datetime (ISO 8601) to start streaming logs from
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_log_stream_splunk_request_body.py b/src/auth0/management/types/create_log_stream_splunk_request_body.py
new file mode 100644
index 00000000..9ecf5a35
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_splunk_request_body.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .log_stream_filter import LogStreamFilter
+from .log_stream_pii_config import LogStreamPiiConfig
+from .log_stream_splunk_enum import LogStreamSplunkEnum
+from .log_stream_splunk_sink import LogStreamSplunkSink
+
+
+class CreateLogStreamSplunkRequestBody(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ log stream name
+ """
+
+ type: LogStreamSplunkEnum = "splunk"
+ is_priority: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPriority")] = pydantic.Field(
+ default=None
+ )
+ """
+ True for priority log streams, false for non-priority
+ """
+
+ filters: typing.Optional[typing.List[LogStreamFilter]] = pydantic.Field(default=None)
+ """
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+ """
+
+ pii_config: typing.Optional[LogStreamPiiConfig] = None
+ sink: LogStreamSplunkSink
+ start_from: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="startFrom")] = pydantic.Field(
+ default="2021-03-01T19:57:29.532Z"
+ )
+ """
+ The optional datetime (ISO 8601) to start streaming logs from
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_log_stream_sumo_request_body.py b/src/auth0/management/types/create_log_stream_sumo_request_body.py
new file mode 100644
index 00000000..dd95b249
--- /dev/null
+++ b/src/auth0/management/types/create_log_stream_sumo_request_body.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .log_stream_filter import LogStreamFilter
+from .log_stream_pii_config import LogStreamPiiConfig
+from .log_stream_sumo_enum import LogStreamSumoEnum
+from .log_stream_sumo_sink import LogStreamSumoSink
+
+
+class CreateLogStreamSumoRequestBody(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ log stream name
+ """
+
+ type: LogStreamSumoEnum = "sumo"
+ is_priority: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPriority")] = pydantic.Field(
+ default=None
+ )
+ """
+ True for priority log streams, false for non-priority
+ """
+
+ filters: typing.Optional[typing.List[LogStreamFilter]] = pydantic.Field(default=None)
+ """
+ Only logs events matching these filters will be delivered by the stream. If omitted or empty, all events will be delivered.
+ """
+
+ pii_config: typing.Optional[LogStreamPiiConfig] = None
+ sink: LogStreamSumoSink
+ start_from: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="startFrom")] = pydantic.Field(
+ default="2021-03-01T19:57:29.532Z"
+ )
+ """
+ The optional datetime (ISO 8601) to start streaming logs from
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_organization_discovery_domain_response_content.py b/src/auth0/management/types/create_organization_discovery_domain_response_content.py
new file mode 100644
index 00000000..c14fdffe
--- /dev/null
+++ b/src/auth0/management/types/create_organization_discovery_domain_response_content.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_discovery_domain_status import OrganizationDiscoveryDomainStatus
+
+
+class CreateOrganizationDiscoveryDomainResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Organization discovery domain identifier.
+ """
+
+ domain: str = pydantic.Field()
+ """
+ The domain name to associate with the organization e.g. acme.com.
+ """
+
+ status: OrganizationDiscoveryDomainStatus
+ verification_txt: str = pydantic.Field()
+ """
+ A unique token generated for the discovery domain. This must be placed in a DNS TXT record at the location specified by the verification_host field to prove domain ownership.
+ """
+
+ verification_host: str = pydantic.Field()
+ """
+ The full domain where the TXT record should be added.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_organization_invitation_response_content.py b/src/auth0/management/types/create_organization_invitation_response_content.py
new file mode 100644
index 00000000..7574ef68
--- /dev/null
+++ b/src/auth0/management/types/create_organization_invitation_response_content.py
@@ -0,0 +1,73 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .app_metadata import AppMetadata
+from .organization_invitation_invitee import OrganizationInvitationInvitee
+from .organization_invitation_inviter import OrganizationInvitationInviter
+from .user_metadata import UserMetadata
+
+
+class CreateOrganizationInvitationResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="uinv_0000000000000001")
+ """
+ The id of the user invitation.
+ """
+
+ organization_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Organization identifier.
+ """
+
+ inviter: typing.Optional[OrganizationInvitationInviter] = None
+ invitee: typing.Optional[OrganizationInvitationInvitee] = None
+ invitation_url: typing.Optional[str] = pydantic.Field(
+ default="https://mycompany.org/login?invitation=f81dWWYW6gzGGicxT8Ha0txBkGNcAcYr&organization=org_0000000000000001&organization_name=acme"
+ )
+ """
+ The invitation url to be send to the invitee.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted timestamp representing the creation time of the invitation.
+ """
+
+ expires_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted timestamp representing the expiration time of the invitation.
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default="AaiyAPdpYdesoKnqjj8HJqRn4T5titww")
+ """
+ Auth0 client ID. Used to resolve the application's login initiation endpoint.
+ """
+
+ connection_id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ The id of the connection to force invitee to authenticate with.
+ """
+
+ app_metadata: typing.Optional[AppMetadata] = None
+ user_metadata: typing.Optional[UserMetadata] = None
+ roles: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of roles IDs to associated with the user.
+ """
+
+ ticket_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The id of the invitation ticket
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_organization_response_content.py b/src/auth0/management/types/create_organization_response_content.py
new file mode 100644
index 00000000..281801e2
--- /dev/null
+++ b/src/auth0/management/types/create_organization_response_content.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_branding import OrganizationBranding
+from .organization_enabled_connection import OrganizationEnabledConnection
+from .organization_metadata import OrganizationMetadata
+from .token_quota import TokenQuota
+
+
+class CreateOrganizationResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Organization identifier.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="organization-1")
+ """
+ The name of this organization.
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default="Acme Users")
+ """
+ Friendly name of this organization.
+ """
+
+ branding: typing.Optional[OrganizationBranding] = None
+ metadata: typing.Optional[OrganizationMetadata] = None
+ token_quota: typing.Optional[TokenQuota] = None
+ enabled_connections: typing.Optional[typing.List[OrganizationEnabledConnection]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_phone_provider_send_test_response_content.py b/src/auth0/management/types/create_phone_provider_send_test_response_content.py
new file mode 100644
index 00000000..cacac88b
--- /dev/null
+++ b/src/auth0/management/types/create_phone_provider_send_test_response_content.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreatePhoneProviderSendTestResponseContent(UniversalBaseModel):
+ code: typing.Optional[float] = pydantic.Field(default=None)
+ """
+ The status code of the operation.
+ """
+
+ message: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The description of the operation status.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_phone_template_response_content.py b/src/auth0/management/types/create_phone_template_response_content.py
new file mode 100644
index 00000000..2a07b97a
--- /dev/null
+++ b/src/auth0/management/types/create_phone_template_response_content.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .phone_template_content import PhoneTemplateContent
+from .phone_template_notification_type_enum import PhoneTemplateNotificationTypeEnum
+
+
+class CreatePhoneTemplateResponseContent(UniversalBaseModel):
+ id: str
+ channel: typing.Optional[str] = None
+ customizable: typing.Optional[bool] = None
+ tenant: typing.Optional[str] = None
+ content: PhoneTemplateContent
+ type: PhoneTemplateNotificationTypeEnum
+ disabled: bool = pydantic.Field(default=False)
+ """
+ Whether the template is enabled (false) or disabled (true).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_phone_template_test_notification_response_content.py b/src/auth0/management/types/create_phone_template_test_notification_response_content.py
new file mode 100644
index 00000000..8c1614f9
--- /dev/null
+++ b/src/auth0/management/types/create_phone_template_test_notification_response_content.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreatePhoneTemplateTestNotificationResponseContent(UniversalBaseModel):
+ message: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_public_key_device_credential_response_content.py b/src/auth0/management/types/create_public_key_device_credential_response_content.py
new file mode 100644
index 00000000..01784496
--- /dev/null
+++ b/src/auth0/management/types/create_public_key_device_credential_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreatePublicKeyDeviceCredentialResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field(default="dcr_0000000000000001")
+ """
+ The credential's identifier
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_resource_server_response_content.py b/src/auth0/management/types/create_resource_server_response_content.py
new file mode 100644
index 00000000..b834b655
--- /dev/null
+++ b/src/auth0/management/types/create_resource_server_response_content.py
@@ -0,0 +1,91 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .resource_server_consent_policy_enum import ResourceServerConsentPolicyEnum
+from .resource_server_proof_of_possession import ResourceServerProofOfPossession
+from .resource_server_scope import ResourceServerScope
+from .resource_server_subject_type_authorization import ResourceServerSubjectTypeAuthorization
+from .resource_server_token_dialect_response_enum import ResourceServerTokenDialectResponseEnum
+from .resource_server_token_encryption import ResourceServerTokenEncryption
+from .signing_algorithm_enum import SigningAlgorithmEnum
+
+
+class CreateResourceServerResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the API (resource server).
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Friendly name for this resource server. Can not contain `<` or `>` characters.
+ """
+
+ is_system: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this is an Auth0 system API (true) or a custom API (false).
+ """
+
+ identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique identifier for the API used as the audience parameter on authorization calls. Can not be changed once set.
+ """
+
+ scopes: typing.Optional[typing.List[ResourceServerScope]] = pydantic.Field(default=None)
+ """
+ List of permissions (scopes) that this API uses.
+ """
+
+ signing_alg: typing.Optional[SigningAlgorithmEnum] = None
+ signing_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Secret used to sign tokens when using symmetric algorithms (HS256).
+ """
+
+ allow_offline_access: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether refresh tokens can be issued for this API (true) or not (false).
+ """
+
+ skip_consent_for_verifiable_first_party_clients: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether to skip user consent for applications flagged as first party (true) or not (false).
+ """
+
+ token_lifetime: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Expiration value (in seconds) for access tokens issued for this API from the token endpoint.
+ """
+
+ token_lifetime_for_web: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Expiration value (in seconds) for access tokens issued for this API via Implicit or Hybrid Flows. Cannot be greater than the `token_lifetime` value.
+ """
+
+ enforce_policies: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether authorization polices are enforced (true) or unenforced (false).
+ """
+
+ token_dialect: typing.Optional[ResourceServerTokenDialectResponseEnum] = None
+ token_encryption: typing.Optional[ResourceServerTokenEncryption] = None
+ consent_policy: typing.Optional[ResourceServerConsentPolicyEnum] = None
+ authorization_details: typing.Optional[typing.List[typing.Any]] = None
+ proof_of_possession: typing.Optional[ResourceServerProofOfPossession] = None
+ subject_type_authorization: typing.Optional[ResourceServerSubjectTypeAuthorization] = None
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The client ID of the client that this resource server is linked to
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_role_response_content.py b/src/auth0/management/types/create_role_response_content.py
new file mode 100644
index 00000000..7dafd79e
--- /dev/null
+++ b/src/auth0/management/types/create_role_response_content.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateRoleResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID for this role.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of this role.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Description of this role.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_rule_response_content.py b/src/auth0/management/types/create_rule_response_content.py
new file mode 100644
index 00000000..84ca700c
--- /dev/null
+++ b/src/auth0/management/types/create_rule_response_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateRuleResponseContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="rule_1")
+ """
+ Name of this rule.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ ID of this rule.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether the rule is enabled (true), or disabled (false).
+ """
+
+ script: typing.Optional[str] = pydantic.Field(
+ default="function (user, context, callback) {\n callback(null, user, context);\n}"
+ )
+ """
+ Code to be executed when this rule runs.
+ """
+
+ order: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+ """
+
+ stage: typing.Optional[str] = pydantic.Field(default="login_success")
+ """
+ Execution stage of this rule. Can be `login_success`, `login_failure`, or `pre_authorize`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_scim_configuration_request_content.py b/src/auth0/management/types/create_scim_configuration_request_content.py
new file mode 100644
index 00000000..874268d2
--- /dev/null
+++ b/src/auth0/management/types/create_scim_configuration_request_content.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .scim_mapping_item import ScimMappingItem
+
+
+class CreateScimConfigurationRequestContent(UniversalBaseModel):
+ user_id_attribute: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ User ID attribute for generating unique user ids
+ """
+
+ mapping: typing.Optional[typing.List[ScimMappingItem]] = pydantic.Field(default=None)
+ """
+ The mapping between auth0 and SCIM
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_scim_configuration_response_content.py b/src/auth0/management/types/create_scim_configuration_response_content.py
new file mode 100644
index 00000000..812ca2e2
--- /dev/null
+++ b/src/auth0/management/types/create_scim_configuration_response_content.py
@@ -0,0 +1,58 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .scim_mapping_item import ScimMappingItem
+
+
+class CreateScimConfigurationResponseContent(UniversalBaseModel):
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The connection's identifier
+ """
+
+ connection_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The connection's identifier
+ """
+
+ strategy: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The connection's strategy
+ """
+
+ tenant_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The tenant's name
+ """
+
+ user_id_attribute: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ User ID attribute for generating unique user ids
+ """
+
+ mapping: typing.Optional[typing.List[ScimMappingItem]] = pydantic.Field(default=None)
+ """
+ The mapping between auth0 and SCIM
+ """
+
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The Date Time Scim Configuration was created
+ """
+
+ updated_on: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The Date Time Scim Configuration was last updated
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_scim_token_response_content.py b/src/auth0/management/types/create_scim_token_response_content.py
new file mode 100644
index 00000000..d00dde3c
--- /dev/null
+++ b/src/auth0/management/types/create_scim_token_response_content.py
@@ -0,0 +1,42 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateScimTokenResponseContent(UniversalBaseModel):
+ token_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The token's identifier
+ """
+
+ token: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The scim client's token
+ """
+
+ scopes: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ The scopes of the scim token
+ """
+
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The token's created at timestamp
+ """
+
+ valid_until: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The token's valid until at timestamp
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_self_service_profile_response_content.py b/src/auth0/management/types/create_self_service_profile_response_content.py
new file mode 100644
index 00000000..06404752
--- /dev/null
+++ b/src/auth0/management/types/create_self_service_profile_response_content.py
@@ -0,0 +1,64 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .self_service_profile_allowed_strategy_enum import SelfServiceProfileAllowedStrategyEnum
+from .self_service_profile_branding_properties import SelfServiceProfileBrandingProperties
+from .self_service_profile_user_attribute import SelfServiceProfileUserAttribute
+
+
+class CreateSelfServiceProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="ssp_n7SNCL8seoyV1TuSTCnAeo")
+ """
+ The unique ID of the self-service Profile.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the self-service Profile.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The description of the self-service Profile.
+ """
+
+ user_attributes: typing.Optional[typing.List[SelfServiceProfileUserAttribute]] = pydantic.Field(default=None)
+ """
+ List of attributes to be mapped that will be shown to the user during the SS-SSO flow.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this self-service Profile was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this self-service Profile was updated.
+ """
+
+ branding: typing.Optional[SelfServiceProfileBrandingProperties] = None
+ allowed_strategies: typing.Optional[typing.List[SelfServiceProfileAllowedStrategyEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+ """
+
+ user_attribute_profile_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the user-attribute-profile to associate with this self-service profile.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_self_service_profile_sso_ticket_response_content.py b/src/auth0/management/types/create_self_service_profile_sso_ticket_response_content.py
new file mode 100644
index 00000000..d74972da
--- /dev/null
+++ b/src/auth0/management/types/create_self_service_profile_sso_ticket_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateSelfServiceProfileSsoTicketResponseContent(UniversalBaseModel):
+ ticket: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The URL for the created ticket.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_token_exchange_profile_response_content.py b/src/auth0/management/types/create_token_exchange_profile_response_content.py
new file mode 100644
index 00000000..04365ebb
--- /dev/null
+++ b/src/auth0/management/types/create_token_exchange_profile_response_content.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .token_exchange_profile_type_enum import TokenExchangeProfileTypeEnum
+
+
+class CreateTokenExchangeProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The unique ID of the token exchange profile.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="Token Exchange Profile 1")
+ """
+ Friendly name of this profile.
+ """
+
+ subject_token_type: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+ """
+
+ action_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the Custom Token Exchange action to execute for this profile, in order to validate the subject_token. The action must use the custom-token-exchange trigger.
+ """
+
+ type: typing.Optional[TokenExchangeProfileTypeEnum] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this profile was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this profile was updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_token_quota.py b/src/auth0/management/types/create_token_quota.py
new file mode 100644
index 00000000..749c58cb
--- /dev/null
+++ b/src/auth0/management/types/create_token_quota.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .token_quota_client_credentials import TokenQuotaClientCredentials
+
+
+class CreateTokenQuota(UniversalBaseModel):
+ client_credentials: TokenQuotaClientCredentials
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_user_attribute_profile_response_content.py b/src/auth0/management/types/create_user_attribute_profile_response_content.py
new file mode 100644
index 00000000..05a1b7bf
--- /dev/null
+++ b/src/auth0/management/types/create_user_attribute_profile_response_content.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_id import UserAttributeProfileId
+from .user_attribute_profile_name import UserAttributeProfileName
+from .user_attribute_profile_user_attributes import UserAttributeProfileUserAttributes
+from .user_attribute_profile_user_id import UserAttributeProfileUserId
+
+
+class CreateUserAttributeProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[UserAttributeProfileId] = None
+ name: typing.Optional[UserAttributeProfileName] = None
+ user_id: typing.Optional[UserAttributeProfileUserId] = None
+ user_attributes: typing.Optional[UserAttributeProfileUserAttributes] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_user_authentication_method_response_content.py b/src/auth0/management/types/create_user_authentication_method_response_content.py
new file mode 100644
index 00000000..93aa48dc
--- /dev/null
+++ b/src/auth0/management/types/create_user_authentication_method_response_content.py
@@ -0,0 +1,78 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .created_user_authentication_method_type_enum import CreatedUserAuthenticationMethodTypeEnum
+from .preferred_authentication_method_enum import PreferredAuthenticationMethodEnum
+from .user_authentication_method_properties import UserAuthenticationMethodProperties
+
+
+class CreateUserAuthenticationMethodResponseContent(UniversalBaseModel):
+ """
+ The successfully created authentication method.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the newly created authentication method (automatically generated by the application)
+ """
+
+ type: CreatedUserAuthenticationMethodTypeEnum
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ A human-readable label to identify the authentication method.
+ """
+
+ totp_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Base32 encoded secret for TOTP generation
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to email authentication methods only. The email address used to send verification messages.
+ """
+
+ authentication_methods: typing.Optional[typing.List[UserAuthenticationMethodProperties]] = None
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = None
+ key_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authenticators only. The id of the credential.
+ """
+
+ public_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authenticators only. The public key.
+ """
+
+ aaguid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. Authenticator Attestation Globally Unique Identifier.
+ """
+
+ relying_party_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authenticators only. The relying party identifier.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Authentication method creation date
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_user_response_content.py b/src/auth0/management/types/create_user_response_content.py
new file mode 100644
index 00000000..3edae1a4
--- /dev/null
+++ b/src/auth0/management/types/create_user_response_content.py
@@ -0,0 +1,106 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_app_metadata_schema import UserAppMetadataSchema
+from .user_date_schema import UserDateSchema
+from .user_identity_schema import UserIdentitySchema
+from .user_metadata_schema import UserMetadataSchema
+
+
+class CreateUserResponseContent(UniversalBaseModel):
+ user_id: typing.Optional[str] = pydantic.Field(default="auth0|507f1f77bcf86cd799439020")
+ """
+ ID of the user which can be used when interacting with other APIs.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default="john.doe@gmail.com")
+ """
+ Email address of this user.
+ """
+
+ email_verified: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this email address is verified (true) or unverified (false).
+ """
+
+ username: typing.Optional[str] = pydantic.Field(default="johndoe")
+ """
+ Username of this user.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default="+199999999999999")
+ """
+ Phone number for this user. Follows the E.164 recommendation.
+ """
+
+ phone_verified: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this phone number has been verified (true) or not (false).
+ """
+
+ created_at: typing.Optional[UserDateSchema] = None
+ updated_at: typing.Optional[UserDateSchema] = None
+ identities: typing.Optional[typing.List[UserIdentitySchema]] = pydantic.Field(default=None)
+ """
+ Array of user identity objects when accounts are linked.
+ """
+
+ app_metadata: typing.Optional[UserAppMetadataSchema] = None
+ user_metadata: typing.Optional[UserMetadataSchema] = None
+ picture: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL to picture, photo, or avatar of this user.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of this user.
+ """
+
+ nickname: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Preferred nickname or alias of this user.
+ """
+
+ multifactor: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of multi-factor authentication providers with which this user has enrolled.
+ """
+
+ last_ip: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Last IP address from which this user logged in.
+ """
+
+ last_login: typing.Optional[UserDateSchema] = None
+ logins_count: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Total number of logins this user has performed.
+ """
+
+ blocked: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this user was blocked by an administrator (true) or is not (false).
+ """
+
+ given_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Given name/first name/forename of this user.
+ """
+
+ family_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Family name/last name/surname of this user.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_verifiable_credential_template_response_content.py b/src/auth0/management/types/create_verifiable_credential_template_response_content.py
new file mode 100644
index 00000000..3e5bc8a0
--- /dev/null
+++ b/src/auth0/management/types/create_verifiable_credential_template_response_content.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .mdl_presentation_request import MdlPresentationRequest
+
+
+class CreateVerifiableCredentialTemplateResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="vct_0000000000000001")
+ """
+ The id of the template.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the template.
+ """
+
+ type: typing.Optional[str] = pydantic.Field(default="mdl")
+ """
+ The type of the template.
+ """
+
+ dialect: typing.Optional[str] = pydantic.Field(default="simplified/1.0")
+ """
+ The dialect of the template.
+ """
+
+ presentation: typing.Optional[MdlPresentationRequest] = None
+ custom_certificate_authority: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The custom certificate authority.
+ """
+
+ well_known_trusted_issuers: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The well-known trusted issuers, comma separated.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time the template was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time the template was created.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/create_verification_email_response_content.py b/src/auth0/management/types/create_verification_email_response_content.py
new file mode 100644
index 00000000..415ca112
--- /dev/null
+++ b/src/auth0/management/types/create_verification_email_response_content.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreateVerificationEmailResponseContent(UniversalBaseModel):
+ status: str = pydantic.Field(default="completed")
+ """
+ Status of this job.
+ """
+
+ type: str = pydantic.Field(default="verification_email")
+ """
+ Type of job this is.
+ """
+
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ When this job was created.
+ """
+
+ id: str = pydantic.Field(default="job_0000000000000001")
+ """
+ ID of this job.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/created_authentication_method_type_enum.py b/src/auth0/management/types/created_authentication_method_type_enum.py
new file mode 100644
index 00000000..169d5c45
--- /dev/null
+++ b/src/auth0/management/types/created_authentication_method_type_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CreatedAuthenticationMethodTypeEnum = typing.Union[
+ typing.Literal["phone", "email", "totp", "webauthn-roaming"], typing.Any
+]
diff --git a/src/auth0/management/types/created_user_authentication_method_type_enum.py b/src/auth0/management/types/created_user_authentication_method_type_enum.py
new file mode 100644
index 00000000..50a85b46
--- /dev/null
+++ b/src/auth0/management/types/created_user_authentication_method_type_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CreatedUserAuthenticationMethodTypeEnum = typing.Union[
+ typing.Literal["phone", "email", "totp", "webauthn-roaming", "passkey"], typing.Any
+]
diff --git a/src/auth0/management/types/credential_id.py b/src/auth0/management/types/credential_id.py
new file mode 100644
index 00000000..9c6b44a6
--- /dev/null
+++ b/src/auth0/management/types/credential_id.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CredentialId(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Credential ID
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/custom_domain.py b/src/auth0/management/types/custom_domain.py
new file mode 100644
index 00000000..bf7c67b3
--- /dev/null
+++ b/src/auth0/management/types/custom_domain.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_domain_status_filter_enum import CustomDomainStatusFilterEnum
+from .custom_domain_type_enum import CustomDomainTypeEnum
+from .domain_certificate import DomainCertificate
+from .domain_metadata import DomainMetadata
+from .domain_verification import DomainVerification
+
+
+class CustomDomain(UniversalBaseModel):
+ custom_domain_id: str = pydantic.Field(default="cd_0000000000000001")
+ """
+ ID of the custom domain.
+ """
+
+ domain: str = pydantic.Field(default="login.mycompany.com")
+ """
+ Domain name.
+ """
+
+ primary: bool = pydantic.Field(default=False)
+ """
+ Whether this is a primary domain (true) or not (false).
+ """
+
+ status: CustomDomainStatusFilterEnum
+ type: CustomDomainTypeEnum
+ origin_domain_name: typing.Optional[str] = pydantic.Field(
+ default="mycompany_cd_0000000000000001.edge.tenants.auth0.com"
+ )
+ """
+ Intermediate address.
+ """
+
+ verification: typing.Optional[DomainVerification] = None
+ custom_client_ip_header: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The HTTP header to fetch the client's IP address
+ """
+
+ tls_policy: typing.Optional[str] = pydantic.Field(default="recommended")
+ """
+ The TLS version policy
+ """
+
+ domain_metadata: typing.Optional[DomainMetadata] = None
+ certificate: typing.Optional[DomainCertificate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/custom_domain_custom_client_ip_header.py b/src/auth0/management/types/custom_domain_custom_client_ip_header.py
new file mode 100644
index 00000000..afef5a63
--- /dev/null
+++ b/src/auth0/management/types/custom_domain_custom_client_ip_header.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .custom_domain_custom_client_ip_header_enum import CustomDomainCustomClientIpHeaderEnum
+
+CustomDomainCustomClientIpHeader = typing.Optional[CustomDomainCustomClientIpHeaderEnum]
diff --git a/src/auth0/management/types/custom_domain_custom_client_ip_header_enum.py b/src/auth0/management/types/custom_domain_custom_client_ip_header_enum.py
new file mode 100644
index 00000000..c3696764
--- /dev/null
+++ b/src/auth0/management/types/custom_domain_custom_client_ip_header_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomDomainCustomClientIpHeaderEnum = typing.Union[
+ typing.Literal["true-client-ip", "cf-connecting-ip", "x-forwarded-for", "x-azure-clientip", ""], typing.Any
+]
diff --git a/src/auth0/management/types/custom_domain_provisioning_type_enum.py b/src/auth0/management/types/custom_domain_provisioning_type_enum.py
new file mode 100644
index 00000000..5d69eb64
--- /dev/null
+++ b/src/auth0/management/types/custom_domain_provisioning_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomDomainProvisioningTypeEnum = typing.Union[typing.Literal["auth0_managed_certs", "self_managed_certs"], typing.Any]
diff --git a/src/auth0/management/types/custom_domain_status_filter_enum.py b/src/auth0/management/types/custom_domain_status_filter_enum.py
new file mode 100644
index 00000000..7c6c05b4
--- /dev/null
+++ b/src/auth0/management/types/custom_domain_status_filter_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomDomainStatusFilterEnum = typing.Union[typing.Literal["pending_verification", "ready", "failed"], typing.Any]
diff --git a/src/auth0/management/types/custom_domain_tls_policy_enum.py b/src/auth0/management/types/custom_domain_tls_policy_enum.py
new file mode 100644
index 00000000..7028f502
--- /dev/null
+++ b/src/auth0/management/types/custom_domain_tls_policy_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomDomainTlsPolicyEnum = typing.Literal["recommended"]
diff --git a/src/auth0/management/types/custom_domain_type_enum.py b/src/auth0/management/types/custom_domain_type_enum.py
new file mode 100644
index 00000000..e3c0be36
--- /dev/null
+++ b/src/auth0/management/types/custom_domain_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomDomainTypeEnum = typing.Union[typing.Literal["auth0_managed_certs", "self_managed_certs"], typing.Any]
diff --git a/src/auth0/management/types/custom_domain_verification_method_enum.py b/src/auth0/management/types/custom_domain_verification_method_enum.py
new file mode 100644
index 00000000..ea189c44
--- /dev/null
+++ b/src/auth0/management/types/custom_domain_verification_method_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomDomainVerificationMethodEnum = typing.Literal["txt"]
diff --git a/src/auth0/management/types/custom_provider_configuration.py b/src/auth0/management/types/custom_provider_configuration.py
new file mode 100644
index 00000000..9c127225
--- /dev/null
+++ b/src/auth0/management/types/custom_provider_configuration.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_provider_delivery_method_enum import CustomProviderDeliveryMethodEnum
+
+
+class CustomProviderConfiguration(UniversalBaseModel):
+ delivery_methods: typing.List[CustomProviderDeliveryMethodEnum]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/custom_provider_credentials.py b/src/auth0/management/types/custom_provider_credentials.py
new file mode 100644
index 00000000..282bf91a
--- /dev/null
+++ b/src/auth0/management/types/custom_provider_credentials.py
@@ -0,0 +1,17 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CustomProviderCredentials(UniversalBaseModel):
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/custom_provider_delivery_method_enum.py b/src/auth0/management/types/custom_provider_delivery_method_enum.py
new file mode 100644
index 00000000..e6050ce0
--- /dev/null
+++ b/src/auth0/management/types/custom_provider_delivery_method_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomProviderDeliveryMethodEnum = typing.Union[typing.Literal["text", "voice"], typing.Any]
diff --git a/src/auth0/management/types/custom_signing_key_algorithm_enum.py b/src/auth0/management/types/custom_signing_key_algorithm_enum.py
new file mode 100644
index 00000000..305cf667
--- /dev/null
+++ b/src/auth0/management/types/custom_signing_key_algorithm_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomSigningKeyAlgorithmEnum = typing.Union[
+ typing.Literal["RS256", "RS384", "RS512", "ES256", "ES384", "ES512", "PS256", "PS384", "PS512"], typing.Any
+]
diff --git a/src/auth0/management/types/custom_signing_key_curve_enum.py b/src/auth0/management/types/custom_signing_key_curve_enum.py
new file mode 100644
index 00000000..5e33ef2a
--- /dev/null
+++ b/src/auth0/management/types/custom_signing_key_curve_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomSigningKeyCurveEnum = typing.Union[typing.Literal["P-256", "P-384", "P-521"], typing.Any]
diff --git a/src/auth0/management/types/custom_signing_key_jwk.py b/src/auth0/management/types/custom_signing_key_jwk.py
new file mode 100644
index 00000000..96405f3a
--- /dev/null
+++ b/src/auth0/management/types/custom_signing_key_jwk.py
@@ -0,0 +1,86 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .custom_signing_key_algorithm_enum import CustomSigningKeyAlgorithmEnum
+from .custom_signing_key_curve_enum import CustomSigningKeyCurveEnum
+from .custom_signing_key_operation_enum import CustomSigningKeyOperationEnum
+from .custom_signing_key_type_enum import CustomSigningKeyTypeEnum
+from .custom_signing_key_use_enum import CustomSigningKeyUseEnum
+
+
+class CustomSigningKeyJwk(UniversalBaseModel):
+ """
+ JWK representing a custom public signing key.
+ """
+
+ kty: CustomSigningKeyTypeEnum
+ kid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Key identifier
+ """
+
+ use: typing.Optional[CustomSigningKeyUseEnum] = None
+ key_ops: typing.Optional[typing.List[CustomSigningKeyOperationEnum]] = pydantic.Field(default=None)
+ """
+ Key operations
+ """
+
+ alg: typing.Optional[CustomSigningKeyAlgorithmEnum] = None
+ n: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Key modulus
+ """
+
+ e: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Key exponent
+ """
+
+ crv: typing.Optional[CustomSigningKeyCurveEnum] = None
+ x: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ X coordinate
+ """
+
+ y: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Y coordinate
+ """
+
+ x_5_u: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="x5u")] = pydantic.Field(default=None)
+ """
+ X.509 URL
+ """
+
+ x_5_c: typing_extensions.Annotated[typing.Optional[typing.List[str]], FieldMetadata(alias="x5c")] = pydantic.Field(
+ default=None
+ )
+ """
+ X.509 certificate chain
+ """
+
+ x_5_t: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="x5t")] = pydantic.Field(default=None)
+ """
+ X.509 certificate SHA-1 thumbprint
+ """
+
+ x_5_t_s_256: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="x5t#S256")] = pydantic.Field(
+ default=None
+ )
+ """
+ X.509 certificate SHA-256 thumbprint
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/custom_signing_key_operation_enum.py b/src/auth0/management/types/custom_signing_key_operation_enum.py
new file mode 100644
index 00000000..52a870e3
--- /dev/null
+++ b/src/auth0/management/types/custom_signing_key_operation_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomSigningKeyOperationEnum = typing.Literal["verify"]
diff --git a/src/auth0/management/types/custom_signing_key_type_enum.py b/src/auth0/management/types/custom_signing_key_type_enum.py
new file mode 100644
index 00000000..29b960fe
--- /dev/null
+++ b/src/auth0/management/types/custom_signing_key_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomSigningKeyTypeEnum = typing.Union[typing.Literal["EC", "RSA"], typing.Any]
diff --git a/src/auth0/management/types/custom_signing_key_use_enum.py b/src/auth0/management/types/custom_signing_key_use_enum.py
new file mode 100644
index 00000000..1dd23fdb
--- /dev/null
+++ b/src/auth0/management/types/custom_signing_key_use_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CustomSigningKeyUseEnum = typing.Literal["sig"]
diff --git a/src/auth0/management/types/daily_stats.py b/src/auth0/management/types/daily_stats.py
new file mode 100644
index 00000000..0d661a3b
--- /dev/null
+++ b/src/auth0/management/types/daily_stats.py
@@ -0,0 +1,47 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class DailyStats(UniversalBaseModel):
+ date: typing.Optional[str] = pydantic.Field(default="2014-01-01T00:00:00.000Z")
+ """
+ Date these events occurred in ISO 8601 format.
+ """
+
+ logins: typing.Optional[int] = pydantic.Field(default=100)
+ """
+ Number of logins on this date.
+ """
+
+ signups: typing.Optional[int] = pydantic.Field(default=100)
+ """
+ Number of signups on this date.
+ """
+
+ leaked_passwords: typing.Optional[int] = pydantic.Field(default=100)
+ """
+ Number of breached-password detections on this date (subscription required).
+ """
+
+ updated_at: typing.Optional[str] = pydantic.Field(default="2014-01-01T02:00:00.000Z")
+ """
+ Date and time this stats entry was last updated in ISO 8601 format.
+ """
+
+ created_at: typing.Optional[str] = pydantic.Field(default="2014-01-01T20:00:00.000Z")
+ """
+ Approximate date and time the first event occurred in ISO 8601 format.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/default_token_quota.py b/src/auth0/management/types/default_token_quota.py
new file mode 100644
index 00000000..1cca6822
--- /dev/null
+++ b/src/auth0/management/types/default_token_quota.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .token_quota_configuration import TokenQuotaConfiguration
+
+
+class DefaultTokenQuota(UniversalBaseModel):
+ """
+ Token Quota configuration, to configure quotas for token issuance for clients and organizations. Applied to all clients and organizations unless overridden in individual client or organization settings.
+ """
+
+ clients: typing.Optional[TokenQuotaConfiguration] = None
+ organizations: typing.Optional[TokenQuotaConfiguration] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/delete_hook_secret_request_content.py b/src/auth0/management/types/delete_hook_secret_request_content.py
new file mode 100644
index 00000000..bd1c1ff1
--- /dev/null
+++ b/src/auth0/management/types/delete_hook_secret_request_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+DeleteHookSecretRequestContent = typing.List[str]
diff --git a/src/auth0/management/types/delete_user_identity_response_content.py b/src/auth0/management/types/delete_user_identity_response_content.py
new file mode 100644
index 00000000..0e747300
--- /dev/null
+++ b/src/auth0/management/types/delete_user_identity_response_content.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .delete_user_identity_response_content_item import DeleteUserIdentityResponseContentItem
+
+DeleteUserIdentityResponseContent = typing.List[DeleteUserIdentityResponseContentItem]
diff --git a/src/auth0/management/types/delete_user_identity_response_content_item.py b/src/auth0/management/types/delete_user_identity_response_content_item.py
new file mode 100644
index 00000000..51e86288
--- /dev/null
+++ b/src/auth0/management/types/delete_user_identity_response_content_item.py
@@ -0,0 +1,61 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .user_profile_data import UserProfileData
+
+
+class DeleteUserIdentityResponseContentItem(UniversalBaseModel):
+ connection: str = pydantic.Field(default="Initial-Connection")
+ """
+ The name of the connection for the identity.
+ """
+
+ user_id: str = pydantic.Field(default="5457edea1b8f22891a000004")
+ """
+ The unique identifier for the user for the identity.
+ """
+
+ provider: str = pydantic.Field(default="auth0")
+ """
+ The type of identity provider.
+ """
+
+ is_social: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isSocial")] = pydantic.Field(
+ default=None
+ )
+ """
+ true if the identity provider is a social provider, falses otherwise
+ """
+
+ access_token: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ IDP access token returned only if scope read:user_idp_tokens is defined
+ """
+
+ access_token_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ IDP access token secret returned only if scope read:user_idp_tokens is defined.
+ """
+
+ refresh_token: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ IDP refresh token returned only if scope read:user_idp_tokens is defined.
+ """
+
+ profile_data: typing_extensions.Annotated[typing.Optional[UserProfileData], FieldMetadata(alias="profileData")] = (
+ None
+ )
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/deploy_action_response_content.py b/src/auth0/management/types/deploy_action_response_content.py
new file mode 100644
index 00000000..48880a25
--- /dev/null
+++ b/src/auth0/management/types/deploy_action_response_content.py
@@ -0,0 +1,91 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_base import ActionBase
+from .action_error import ActionError
+from .action_secret_response import ActionSecretResponse
+from .action_trigger import ActionTrigger
+from .action_version_build_status_enum import ActionVersionBuildStatusEnum
+from .action_version_dependency import ActionVersionDependency
+
+
+class DeployActionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="12a3b9e6-06e6-4a29-96bf-90c82fe79a0d")
+ """
+ The unique id of an action version.
+ """
+
+ action_id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The id of the action to which this version belongs.
+ """
+
+ code: typing.Optional[str] = pydantic.Field(default="module.exports = () => {}")
+ """
+ The source code of this specific version of the action.
+ """
+
+ dependencies: typing.Optional[typing.List[ActionVersionDependency]] = pydantic.Field(default=None)
+ """
+ The list of third party npm modules, and their versions, that this specific version depends on.
+ """
+
+ deployed: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Indicates if this specific version is the currently one deployed.
+ """
+
+ runtime: typing.Optional[str] = pydantic.Field(default="node22")
+ """
+ The Node runtime. For example: `node22`
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretResponse]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ status: typing.Optional[ActionVersionBuildStatusEnum] = None
+ number: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ The index of this version in list of versions for the action.
+ """
+
+ errors: typing.Optional[typing.List[ActionError]] = pydantic.Field(default=None)
+ """
+ Any errors that occurred while the version was being built.
+ """
+
+ action: typing.Optional[ActionBase] = None
+ built_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was built successfully.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when a version was updated. Versions are never updated externally. Only Auth0 will update an action version as it is being built.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this version supports. At this time, a version can only target a single trigger at a time.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/deploy_action_version_request_body_params.py b/src/auth0/management/types/deploy_action_version_request_body_params.py
new file mode 100644
index 00000000..2ce3ace5
--- /dev/null
+++ b/src/auth0/management/types/deploy_action_version_request_body_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class DeployActionVersionRequestBodyParams(UniversalBaseModel):
+ update_draft: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if the draft of the action should be updated with the reverted version.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/deploy_action_version_request_content.py b/src/auth0/management/types/deploy_action_version_request_content.py
new file mode 100644
index 00000000..87ac98fe
--- /dev/null
+++ b/src/auth0/management/types/deploy_action_version_request_content.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .deploy_action_version_request_body_params import DeployActionVersionRequestBodyParams
+
+DeployActionVersionRequestContent = typing.Optional[DeployActionVersionRequestBodyParams]
diff --git a/src/auth0/management/types/deploy_action_version_response_content.py b/src/auth0/management/types/deploy_action_version_response_content.py
new file mode 100644
index 00000000..fed78f4e
--- /dev/null
+++ b/src/auth0/management/types/deploy_action_version_response_content.py
@@ -0,0 +1,91 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_base import ActionBase
+from .action_error import ActionError
+from .action_secret_response import ActionSecretResponse
+from .action_trigger import ActionTrigger
+from .action_version_build_status_enum import ActionVersionBuildStatusEnum
+from .action_version_dependency import ActionVersionDependency
+
+
+class DeployActionVersionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="12a3b9e6-06e6-4a29-96bf-90c82fe79a0d")
+ """
+ The unique id of an action version.
+ """
+
+ action_id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The id of the action to which this version belongs.
+ """
+
+ code: typing.Optional[str] = pydantic.Field(default="module.exports = () => {}")
+ """
+ The source code of this specific version of the action.
+ """
+
+ dependencies: typing.Optional[typing.List[ActionVersionDependency]] = pydantic.Field(default=None)
+ """
+ The list of third party npm modules, and their versions, that this specific version depends on.
+ """
+
+ deployed: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Indicates if this specific version is the currently one deployed.
+ """
+
+ runtime: typing.Optional[str] = pydantic.Field(default="node22")
+ """
+ The Node runtime. For example: `node22`
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretResponse]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ status: typing.Optional[ActionVersionBuildStatusEnum] = None
+ number: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ The index of this version in list of versions for the action.
+ """
+
+ errors: typing.Optional[typing.List[ActionError]] = pydantic.Field(default=None)
+ """
+ Any errors that occurred while the version was being built.
+ """
+
+ action: typing.Optional[ActionBase] = None
+ built_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was built successfully.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when a version was updated. Versions are never updated externally. Only Auth0 will update an action version as it is being built.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this version supports. At this time, a version can only target a single trigger at a time.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/device_credential.py b/src/auth0/management/types/device_credential.py
new file mode 100644
index 00000000..b0655e64
--- /dev/null
+++ b/src/auth0/management/types/device_credential.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .device_credential_type_enum import DeviceCredentialTypeEnum
+
+
+class DeviceCredential(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="dcr_0000000000000001")
+ """
+ ID of this device.
+ """
+
+ device_name: typing.Optional[str] = pydantic.Field(default="iPhone Mobile Safari UI/WKWebView")
+ """
+ User agent for this device
+ """
+
+ device_id: typing.Optional[str] = pydantic.Field(default="550e8400-e29b-41d4-a716-446655440000")
+ """
+ Unique identifier for the device. NOTE: This field is generally not populated for refresh_tokens and rotating_refresh_tokens
+ """
+
+ type: typing.Optional[DeviceCredentialTypeEnum] = None
+ user_id: typing.Optional[str] = pydantic.Field(default="usr_5457edea1b8f33391a000004")
+ """
+ user_id this credential is associated with.
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default="AaiyAPdpYdesoKnqjj8HJqRn4T5titww")
+ """
+ client_id of the client (application) this credential is for.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/device_credential_public_key_type_enum.py b/src/auth0/management/types/device_credential_public_key_type_enum.py
new file mode 100644
index 00000000..541ffb87
--- /dev/null
+++ b/src/auth0/management/types/device_credential_public_key_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+DeviceCredentialPublicKeyTypeEnum = typing.Literal["public_key"]
diff --git a/src/auth0/management/types/device_credential_type_enum.py b/src/auth0/management/types/device_credential_type_enum.py
new file mode 100644
index 00000000..20d4ddc9
--- /dev/null
+++ b/src/auth0/management/types/device_credential_type_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+DeviceCredentialTypeEnum = typing.Union[
+ typing.Literal["public_key", "refresh_token", "rotating_refresh_token"], typing.Any
+]
diff --git a/src/auth0/management/types/directory_provisioning_mapping_item.py b/src/auth0/management/types/directory_provisioning_mapping_item.py
new file mode 100644
index 00000000..96f9a8db
--- /dev/null
+++ b/src/auth0/management/types/directory_provisioning_mapping_item.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class DirectoryProvisioningMappingItem(UniversalBaseModel):
+ auth_0: typing_extensions.Annotated[str, FieldMetadata(alias="auth0")] = pydantic.Field()
+ """
+ The field location in the Auth0 schema
+ """
+
+ idp: str = pydantic.Field()
+ """
+ The field location in the IDP schema
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/domain_certificate.py b/src/auth0/management/types/domain_certificate.py
new file mode 100644
index 00000000..da75177e
--- /dev/null
+++ b/src/auth0/management/types/domain_certificate.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .domain_certificate_authority_enum import DomainCertificateAuthorityEnum
+from .domain_certificate_status_enum import DomainCertificateStatusEnum
+
+
+class DomainCertificate(UniversalBaseModel):
+ """
+ Certificate information. This object is relevant only for Custom Domains with Auth0-Managed Certificates.
+ """
+
+ status: typing.Optional[DomainCertificateStatusEnum] = None
+ error_msg: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ A user-friendly error message will be presented if the certificate status is provisioning_failed or renewing_failed.
+ """
+
+ certificate_authority: typing.Optional[DomainCertificateAuthorityEnum] = None
+ renews_before: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The certificate will be renewed prior to this date.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/domain_certificate_authority_enum.py b/src/auth0/management/types/domain_certificate_authority_enum.py
new file mode 100644
index 00000000..04f2f9ba
--- /dev/null
+++ b/src/auth0/management/types/domain_certificate_authority_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+DomainCertificateAuthorityEnum = typing.Union[typing.Literal["letsencrypt", "googletrust"], typing.Any]
diff --git a/src/auth0/management/types/domain_certificate_status_enum.py b/src/auth0/management/types/domain_certificate_status_enum.py
new file mode 100644
index 00000000..a83f469b
--- /dev/null
+++ b/src/auth0/management/types/domain_certificate_status_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+DomainCertificateStatusEnum = typing.Union[
+ typing.Literal["provisioning", "provisioning_failed", "provisioned", "renewing_failed"], typing.Any
+]
diff --git a/src/auth0/management/types/domain_metadata.py b/src/auth0/management/types/domain_metadata.py
new file mode 100644
index 00000000..da04ff6f
--- /dev/null
+++ b/src/auth0/management/types/domain_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+DomainMetadata = typing.Dict[str, typing.Optional[str]]
diff --git a/src/auth0/management/types/domain_verification.py b/src/auth0/management/types/domain_verification.py
new file mode 100644
index 00000000..bbcad425
--- /dev/null
+++ b/src/auth0/management/types/domain_verification.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .domain_verification_method import DomainVerificationMethod
+from .domain_verification_status_enum import DomainVerificationStatusEnum
+
+
+class DomainVerification(UniversalBaseModel):
+ """
+ Domain verification settings.
+ """
+
+ methods: typing.Optional[typing.List[DomainVerificationMethod]] = pydantic.Field(default=None)
+ """
+ Domain verification methods.
+ """
+
+ status: typing.Optional[DomainVerificationStatusEnum] = None
+ error_msg: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The user0-friendly error message in case of failed verification. This field is relevant only for Custom Domains with Auth0-Managed Certificates.
+ """
+
+ last_verified_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The date and time when the custom domain was last verified. This field is relevant only for Custom Domains with Auth0-Managed Certificates.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/domain_verification_method.py b/src/auth0/management/types/domain_verification_method.py
new file mode 100644
index 00000000..9a8344f2
--- /dev/null
+++ b/src/auth0/management/types/domain_verification_method.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .domain_verification_method_name_enum import DomainVerificationMethodNameEnum
+
+
+class DomainVerificationMethod(UniversalBaseModel):
+ name: DomainVerificationMethodNameEnum
+ record: str = pydantic.Field(default="auth0-domain-verification=...")
+ """
+ Value used to verify the domain.
+ """
+
+ domain: typing.Optional[str] = pydantic.Field(default="_cf-custom-hostname.login.mycompany.com")
+ """
+ The name of the txt record for verification
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/domain_verification_method_name_enum.py b/src/auth0/management/types/domain_verification_method_name_enum.py
new file mode 100644
index 00000000..65003138
--- /dev/null
+++ b/src/auth0/management/types/domain_verification_method_name_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+DomainVerificationMethodNameEnum = typing.Union[typing.Literal["cname", "txt"], typing.Any]
diff --git a/src/auth0/management/types/domain_verification_status_enum.py b/src/auth0/management/types/domain_verification_status_enum.py
new file mode 100644
index 00000000..1b1570d3
--- /dev/null
+++ b/src/auth0/management/types/domain_verification_status_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+DomainVerificationStatusEnum = typing.Union[typing.Literal["verified", "pending", "failed"], typing.Any]
diff --git a/src/auth0/management/types/email_attribute.py b/src/auth0/management/types/email_attribute.py
new file mode 100644
index 00000000..248a64eb
--- /dev/null
+++ b/src/auth0/management/types/email_attribute.py
@@ -0,0 +1,38 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_attribute_identifier import ConnectionAttributeIdentifier
+from .signup_verified import SignupVerified
+from .verification_method_enum import VerificationMethodEnum
+
+
+class EmailAttribute(UniversalBaseModel):
+ """
+ Configuration for the email attribute for users.
+ """
+
+ identifier: typing.Optional[ConnectionAttributeIdentifier] = None
+ unique: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines if the attribute is unique in a given connection
+ """
+
+ profile_required: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines if property should be required for users
+ """
+
+ verification_method: typing.Optional[VerificationMethodEnum] = None
+ signup: typing.Optional[SignupVerified] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/email_mailgun_region_enum.py b/src/auth0/management/types/email_mailgun_region_enum.py
new file mode 100644
index 00000000..d86f0e8a
--- /dev/null
+++ b/src/auth0/management/types/email_mailgun_region_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EmailMailgunRegionEnum = typing.Literal["eu"]
diff --git a/src/auth0/management/types/email_provider_credentials.py b/src/auth0/management/types/email_provider_credentials.py
new file mode 100644
index 00000000..623c0723
--- /dev/null
+++ b/src/auth0/management/types/email_provider_credentials.py
@@ -0,0 +1,46 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class EmailProviderCredentials(UniversalBaseModel):
+ """
+ Credentials required to use the provider.
+ """
+
+ api_user: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ API User.
+ """
+
+ region: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ AWS or SparkPost region.
+ """
+
+ smtp_host: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SMTP host.
+ """
+
+ smtp_port: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ SMTP port.
+ """
+
+ smtp_user: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SMTP username.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/email_provider_credentials_schema.py b/src/auth0/management/types/email_provider_credentials_schema.py
new file mode 100644
index 00000000..769807d2
--- /dev/null
+++ b/src/auth0/management/types/email_provider_credentials_schema.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .email_provider_credentials_schema_access_key_id import EmailProviderCredentialsSchemaAccessKeyId
+from .email_provider_credentials_schema_api_key import EmailProviderCredentialsSchemaApiKey
+from .email_provider_credentials_schema_client_id import EmailProviderCredentialsSchemaClientId
+from .email_provider_credentials_schema_connection_string import EmailProviderCredentialsSchemaConnectionString
+from .email_provider_credentials_schema_smtp_host import EmailProviderCredentialsSchemaSmtpHost
+from .email_provider_credentials_schema_three import EmailProviderCredentialsSchemaThree
+from .email_provider_credentials_schema_zero import EmailProviderCredentialsSchemaZero
+from .extensibility_email_provider_credentials import ExtensibilityEmailProviderCredentials
+
+EmailProviderCredentialsSchema = typing.Union[
+ EmailProviderCredentialsSchemaZero,
+ EmailProviderCredentialsSchemaAccessKeyId,
+ EmailProviderCredentialsSchemaSmtpHost,
+ EmailProviderCredentialsSchemaThree,
+ EmailProviderCredentialsSchemaApiKey,
+ EmailProviderCredentialsSchemaConnectionString,
+ EmailProviderCredentialsSchemaClientId,
+ ExtensibilityEmailProviderCredentials,
+]
diff --git a/src/auth0/management/types/email_provider_credentials_schema_access_key_id.py b/src/auth0/management/types/email_provider_credentials_schema_access_key_id.py
new file mode 100644
index 00000000..ba9d7fa6
--- /dev/null
+++ b/src/auth0/management/types/email_provider_credentials_schema_access_key_id.py
@@ -0,0 +1,38 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class EmailProviderCredentialsSchemaAccessKeyId(UniversalBaseModel):
+ access_key_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accessKeyId")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ AWS Access Key ID.
+ """
+
+ secret_access_key: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="secretAccessKey")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ AWS Secret Access Key.
+ """
+
+ region: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ AWS region.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/email_provider_credentials_schema_api_key.py b/src/auth0/management/types/email_provider_credentials_schema_api_key.py
new file mode 100644
index 00000000..cf032c22
--- /dev/null
+++ b/src/auth0/management/types/email_provider_credentials_schema_api_key.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .email_mailgun_region_enum import EmailMailgunRegionEnum
+
+
+class EmailProviderCredentialsSchemaApiKey(UniversalBaseModel):
+ api_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ API Key
+ """
+
+ domain: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Domain
+ """
+
+ region: typing.Optional[EmailMailgunRegionEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/email_provider_credentials_schema_client_id.py b/src/auth0/management/types/email_provider_credentials_schema_client_id.py
new file mode 100644
index 00000000..15ad1373
--- /dev/null
+++ b/src/auth0/management/types/email_provider_credentials_schema_client_id.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class EmailProviderCredentialsSchemaClientId(UniversalBaseModel):
+ tenant_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tenantId")] = pydantic.Field(
+ default=None
+ )
+ """
+ Microsoft 365 Tenant ID.
+ """
+
+ client_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="clientId")] = pydantic.Field(
+ default=None
+ )
+ """
+ Microsoft 365 Client ID.
+ """
+
+ client_secret: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="clientSecret")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Microsoft 365 Client Secret.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/email_provider_credentials_schema_connection_string.py b/src/auth0/management/types/email_provider_credentials_schema_connection_string.py
new file mode 100644
index 00000000..aaaa6d85
--- /dev/null
+++ b/src/auth0/management/types/email_provider_credentials_schema_connection_string.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class EmailProviderCredentialsSchemaConnectionString(UniversalBaseModel):
+ connection_string: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="connectionString")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ Azure Communication Services Connection String.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/email_provider_credentials_schema_smtp_host.py b/src/auth0/management/types/email_provider_credentials_schema_smtp_host.py
new file mode 100644
index 00000000..ee6e8c7c
--- /dev/null
+++ b/src/auth0/management/types/email_provider_credentials_schema_smtp_host.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .email_smtp_host import EmailSmtpHost
+
+
+class EmailProviderCredentialsSchemaSmtpHost(UniversalBaseModel):
+ smtp_host: typing.Optional[EmailSmtpHost] = None
+ smtp_port: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ SMTP port.
+ """
+
+ smtp_user: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SMTP username.
+ """
+
+ smtp_pass: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SMTP password.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/email_provider_credentials_schema_three.py b/src/auth0/management/types/email_provider_credentials_schema_three.py
new file mode 100644
index 00000000..6856f3fa
--- /dev/null
+++ b/src/auth0/management/types/email_provider_credentials_schema_three.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .email_spark_post_region_enum import EmailSparkPostRegionEnum
+
+
+class EmailProviderCredentialsSchemaThree(UniversalBaseModel):
+ api_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ API Key
+ """
+
+ region: typing.Optional[EmailSparkPostRegionEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/email_provider_credentials_schema_zero.py b/src/auth0/management/types/email_provider_credentials_schema_zero.py
new file mode 100644
index 00000000..58dce9c6
--- /dev/null
+++ b/src/auth0/management/types/email_provider_credentials_schema_zero.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class EmailProviderCredentialsSchemaZero(UniversalBaseModel):
+ api_key: str = pydantic.Field()
+ """
+ API Key
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/email_provider_name_enum.py b/src/auth0/management/types/email_provider_name_enum.py
new file mode 100644
index 00000000..2a02a8a9
--- /dev/null
+++ b/src/auth0/management/types/email_provider_name_enum.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EmailProviderNameEnum = typing.Union[
+ typing.Literal["mailgun", "mandrill", "sendgrid", "ses", "sparkpost", "smtp", "azure_cs", "ms365", "custom"],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/email_provider_settings.py b/src/auth0/management/types/email_provider_settings.py
new file mode 100644
index 00000000..f9c75e5f
--- /dev/null
+++ b/src/auth0/management/types/email_provider_settings.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EmailProviderSettings = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/email_smtp_host.py b/src/auth0/management/types/email_smtp_host.py
new file mode 100644
index 00000000..18c25e77
--- /dev/null
+++ b/src/auth0/management/types/email_smtp_host.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+EmailSmtpHost = str
diff --git a/src/auth0/management/types/email_spark_post_region_enum.py b/src/auth0/management/types/email_spark_post_region_enum.py
new file mode 100644
index 00000000..04b3cb10
--- /dev/null
+++ b/src/auth0/management/types/email_spark_post_region_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EmailSparkPostRegionEnum = typing.Literal["eu"]
diff --git a/src/auth0/management/types/email_specific_provider_settings_with_additional_properties.py b/src/auth0/management/types/email_specific_provider_settings_with_additional_properties.py
new file mode 100644
index 00000000..1f79bb9e
--- /dev/null
+++ b/src/auth0/management/types/email_specific_provider_settings_with_additional_properties.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EmailSpecificProviderSettingsWithAdditionalProperties = typing.Optional[typing.Dict[str, typing.Any]]
diff --git a/src/auth0/management/types/email_template_name_enum.py b/src/auth0/management/types/email_template_name_enum.py
new file mode 100644
index 00000000..ccab2222
--- /dev/null
+++ b/src/auth0/management/types/email_template_name_enum.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EmailTemplateNameEnum = typing.Union[
+ typing.Literal[
+ "verify_email",
+ "verify_email_by_code",
+ "reset_email",
+ "reset_email_by_code",
+ "welcome_email",
+ "blocked_account",
+ "stolen_credentials",
+ "enrollment_email",
+ "mfa_oob_code",
+ "user_invitation",
+ "change_password",
+ "password_reset",
+ "async_approval",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/enabled_features_enum.py b/src/auth0/management/types/enabled_features_enum.py
new file mode 100644
index 00000000..23283f92
--- /dev/null
+++ b/src/auth0/management/types/enabled_features_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EnabledFeaturesEnum = typing.Union[typing.Literal["scim", "universal_logout"], typing.Any]
diff --git a/src/auth0/management/types/encryption_key.py b/src/auth0/management/types/encryption_key.py
new file mode 100644
index 00000000..0d0de307
--- /dev/null
+++ b/src/auth0/management/types/encryption_key.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .encryption_key_state import EncryptionKeyState
+from .encryption_key_type import EncryptionKeyType
+
+
+class EncryptionKey(UniversalBaseModel):
+ """
+ Encryption key
+ """
+
+ kid: str = pydantic.Field()
+ """
+ Key ID
+ """
+
+ type: EncryptionKeyType
+ state: EncryptionKeyState
+ created_at: dt.datetime = pydantic.Field()
+ """
+ Key creation timestamp
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ Key update timestamp
+ """
+
+ parent_kid: str = pydantic.Field()
+ """
+ ID of parent wrapping key
+ """
+
+ public_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Public key in PEM format
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/encryption_key_public_wrapping_algorithm.py b/src/auth0/management/types/encryption_key_public_wrapping_algorithm.py
new file mode 100644
index 00000000..02cdaee5
--- /dev/null
+++ b/src/auth0/management/types/encryption_key_public_wrapping_algorithm.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EncryptionKeyPublicWrappingAlgorithm = typing.Literal["CKM_RSA_AES_KEY_WRAP"]
diff --git a/src/auth0/management/types/encryption_key_state.py b/src/auth0/management/types/encryption_key_state.py
new file mode 100644
index 00000000..06c37e46
--- /dev/null
+++ b/src/auth0/management/types/encryption_key_state.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EncryptionKeyState = typing.Union[typing.Literal["pre-activation", "active", "deactivated", "destroyed"], typing.Any]
diff --git a/src/auth0/management/types/encryption_key_type.py b/src/auth0/management/types/encryption_key_type.py
new file mode 100644
index 00000000..2f29c9d5
--- /dev/null
+++ b/src/auth0/management/types/encryption_key_type.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EncryptionKeyType = typing.Union[
+ typing.Literal["customer-provided-root-key", "environment-root-key", "tenant-master-key", "tenant-encryption-key"],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/event_stream_action_configuration.py b/src/auth0/management/types/event_stream_action_configuration.py
new file mode 100644
index 00000000..7a6d4a8d
--- /dev/null
+++ b/src/auth0/management/types/event_stream_action_configuration.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class EventStreamActionConfiguration(UniversalBaseModel):
+ """
+ Configuration specific to an action destination.
+ """
+
+ action_id: str = pydantic.Field()
+ """
+ Action ID for the action destination.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_action_destination.py b/src/auth0/management/types/event_stream_action_destination.py
new file mode 100644
index 00000000..2d9c6185
--- /dev/null
+++ b/src/auth0/management/types/event_stream_action_destination.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_action_configuration import EventStreamActionConfiguration
+from .event_stream_action_destination_type_enum import EventStreamActionDestinationTypeEnum
+
+
+class EventStreamActionDestination(UniversalBaseModel):
+ type: EventStreamActionDestinationTypeEnum = "action"
+ configuration: EventStreamActionConfiguration
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_action_destination_type_enum.py b/src/auth0/management/types/event_stream_action_destination_type_enum.py
new file mode 100644
index 00000000..c071cb0c
--- /dev/null
+++ b/src/auth0/management/types/event_stream_action_destination_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamActionDestinationTypeEnum = typing.Literal["action"]
diff --git a/src/auth0/management/types/event_stream_action_response_content.py b/src/auth0/management/types/event_stream_action_response_content.py
new file mode 100644
index 00000000..78ab8de2
--- /dev/null
+++ b/src/auth0/management/types/event_stream_action_response_content.py
@@ -0,0 +1,48 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_action_destination import EventStreamActionDestination
+from .event_stream_status_enum import EventStreamStatusEnum
+from .event_stream_subscription import EventStreamSubscription
+
+
+class EventStreamActionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique identifier for the event stream.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the event stream.
+ """
+
+ subscriptions: typing.Optional[typing.List[EventStreamSubscription]] = pydantic.Field(default=None)
+ """
+ List of event types subscribed to in this stream.
+ """
+
+ destination: typing.Optional[EventStreamActionDestination] = None
+ status: typing.Optional[EventStreamStatusEnum] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp when the event stream was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp when the event stream was last updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_cloud_event.py b/src/auth0/management/types/event_stream_cloud_event.py
new file mode 100644
index 00000000..3964de94
--- /dev/null
+++ b/src/auth0/management/types/event_stream_cloud_event.py
@@ -0,0 +1,52 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class EventStreamCloudEvent(UniversalBaseModel):
+ """
+ Event content. This will only be set if delivery failed.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique identifier for the event
+ """
+
+ source: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Where the event originated
+ """
+
+ specversion: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Version of CloudEvents spec
+ """
+
+ type: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Type of the event (e.g., user.created)
+ """
+
+ time: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp at which the event was generated
+ """
+
+ data: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Event contents encoded as a string.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_delivery.py b/src/auth0/management/types/event_stream_delivery.py
new file mode 100644
index 00000000..8278f786
--- /dev/null
+++ b/src/auth0/management/types/event_stream_delivery.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_cloud_event import EventStreamCloudEvent
+from .event_stream_delivery_attempt import EventStreamDeliveryAttempt
+from .event_stream_delivery_event_type_enum import EventStreamDeliveryEventTypeEnum
+from .event_stream_delivery_status_enum import EventStreamDeliveryStatusEnum
+
+
+class EventStreamDelivery(UniversalBaseModel):
+ """
+ Metadata about a specific attempt to deliver an event
+ """
+
+ id: str = pydantic.Field()
+ """
+ Unique identifier for the delivery
+ """
+
+ event_stream_id: str = pydantic.Field()
+ """
+ Unique identifier for the event stream.
+ """
+
+ status: EventStreamDeliveryStatusEnum = "failed"
+ event_type: EventStreamDeliveryEventTypeEnum
+ attempts: typing.List[EventStreamDeliveryAttempt] = pydantic.Field()
+ """
+ Results of delivery attempts
+ """
+
+ event: typing.Optional[EventStreamCloudEvent] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_delivery_attempt.py b/src/auth0/management/types/event_stream_delivery_attempt.py
new file mode 100644
index 00000000..eca4d752
--- /dev/null
+++ b/src/auth0/management/types/event_stream_delivery_attempt.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_delivery_status_enum import EventStreamDeliveryStatusEnum
+
+
+class EventStreamDeliveryAttempt(UniversalBaseModel):
+ status: EventStreamDeliveryStatusEnum = "failed"
+ timestamp: dt.datetime = pydantic.Field()
+ """
+ Timestamp of delivery attempt
+ """
+
+ error_message: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Delivery error message, if applicable
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_delivery_event_type_enum.py b/src/auth0/management/types/event_stream_delivery_event_type_enum.py
new file mode 100644
index 00000000..16680d74
--- /dev/null
+++ b/src/auth0/management/types/event_stream_delivery_event_type_enum.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamDeliveryEventTypeEnum = typing.Union[
+ typing.Literal[
+ "user.created",
+ "user.deleted",
+ "user.updated",
+ "organization.created",
+ "organization.updated",
+ "organization.deleted",
+ "organization.member.added",
+ "organization.member.deleted",
+ "organization.member.role.assigned",
+ "organization.member.role.deleted",
+ "organization.connection.added",
+ "organization.connection.updated",
+ "organization.connection.removed",
+ "group.created",
+ "group.updated",
+ "group.deleted",
+ "group.member.added",
+ "group.member.deleted",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/event_stream_delivery_status_enum.py b/src/auth0/management/types/event_stream_delivery_status_enum.py
new file mode 100644
index 00000000..e846b80b
--- /dev/null
+++ b/src/auth0/management/types/event_stream_delivery_status_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamDeliveryStatusEnum = typing.Literal["failed"]
diff --git a/src/auth0/management/types/event_stream_destination_patch.py b/src/auth0/management/types/event_stream_destination_patch.py
new file mode 100644
index 00000000..283b833c
--- /dev/null
+++ b/src/auth0/management/types/event_stream_destination_patch.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .event_stream_action_destination import EventStreamActionDestination
+from .event_stream_webhook_destination import EventStreamWebhookDestination
+
+EventStreamDestinationPatch = typing.Union[EventStreamWebhookDestination, EventStreamActionDestination]
diff --git a/src/auth0/management/types/event_stream_event_bridge_aws_region_enum.py b/src/auth0/management/types/event_stream_event_bridge_aws_region_enum.py
new file mode 100644
index 00000000..863e1388
--- /dev/null
+++ b/src/auth0/management/types/event_stream_event_bridge_aws_region_enum.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamEventBridgeAwsRegionEnum = typing.Union[
+ typing.Literal[
+ "af-south-1",
+ "ap-east-1",
+ "ap-east-2",
+ "ap-northeast-1",
+ "ap-northeast-2",
+ "ap-northeast-3",
+ "ap-south-1",
+ "ap-south-2",
+ "ap-southeast-1",
+ "ap-southeast-2",
+ "ap-southeast-3",
+ "ap-southeast-4",
+ "ap-southeast-5",
+ "ap-southeast-6",
+ "ap-southeast-7",
+ "ca-central-1",
+ "ca-west-1",
+ "eu-central-1",
+ "eu-central-2",
+ "eu-north-1",
+ "eu-south-1",
+ "eu-south-2",
+ "eu-west-1",
+ "eu-west-2",
+ "eu-west-3",
+ "il-central-1",
+ "me-central-1",
+ "me-south-1",
+ "mx-central-1",
+ "sa-east-1",
+ "us-gov-east-1",
+ "us-gov-west-1",
+ "us-east-1",
+ "us-east-2",
+ "us-west-1",
+ "us-west-2",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/event_stream_event_bridge_configuration.py b/src/auth0/management/types/event_stream_event_bridge_configuration.py
new file mode 100644
index 00000000..b03488e9
--- /dev/null
+++ b/src/auth0/management/types/event_stream_event_bridge_configuration.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_event_bridge_aws_region_enum import EventStreamEventBridgeAwsRegionEnum
+
+
+class EventStreamEventBridgeConfiguration(UniversalBaseModel):
+ """
+ Configuration specific to an eventbridge destination.
+ """
+
+ aws_account_id: str = pydantic.Field()
+ """
+ AWS Account ID for EventBridge destination.
+ """
+
+ aws_region: EventStreamEventBridgeAwsRegionEnum
+ aws_partner_event_source: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ AWS Partner Event Source for EventBridge destination.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_event_bridge_destination.py b/src/auth0/management/types/event_stream_event_bridge_destination.py
new file mode 100644
index 00000000..5a0fd2d7
--- /dev/null
+++ b/src/auth0/management/types/event_stream_event_bridge_destination.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_event_bridge_configuration import EventStreamEventBridgeConfiguration
+from .event_stream_event_bridge_destination_type_enum import EventStreamEventBridgeDestinationTypeEnum
+
+
+class EventStreamEventBridgeDestination(UniversalBaseModel):
+ type: EventStreamEventBridgeDestinationTypeEnum = "eventbridge"
+ configuration: EventStreamEventBridgeConfiguration
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_event_bridge_destination_type_enum.py b/src/auth0/management/types/event_stream_event_bridge_destination_type_enum.py
new file mode 100644
index 00000000..ab21d82a
--- /dev/null
+++ b/src/auth0/management/types/event_stream_event_bridge_destination_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamEventBridgeDestinationTypeEnum = typing.Literal["eventbridge"]
diff --git a/src/auth0/management/types/event_stream_event_bridge_response_content.py b/src/auth0/management/types/event_stream_event_bridge_response_content.py
new file mode 100644
index 00000000..cfc68613
--- /dev/null
+++ b/src/auth0/management/types/event_stream_event_bridge_response_content.py
@@ -0,0 +1,48 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_event_bridge_destination import EventStreamEventBridgeDestination
+from .event_stream_status_enum import EventStreamStatusEnum
+from .event_stream_subscription import EventStreamSubscription
+
+
+class EventStreamEventBridgeResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique identifier for the event stream.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the event stream.
+ """
+
+ subscriptions: typing.Optional[typing.List[EventStreamSubscription]] = pydantic.Field(default=None)
+ """
+ List of event types subscribed to in this stream.
+ """
+
+ destination: typing.Optional[EventStreamEventBridgeDestination] = None
+ status: typing.Optional[EventStreamStatusEnum] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp when the event stream was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp when the event stream was last updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_event_type_enum.py b/src/auth0/management/types/event_stream_event_type_enum.py
new file mode 100644
index 00000000..3abee6a7
--- /dev/null
+++ b/src/auth0/management/types/event_stream_event_type_enum.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamEventTypeEnum = typing.Union[
+ typing.Literal[
+ "user.created",
+ "user.deleted",
+ "user.updated",
+ "organization.created",
+ "organization.updated",
+ "organization.deleted",
+ "organization.member.added",
+ "organization.member.deleted",
+ "organization.member.role.assigned",
+ "organization.member.role.deleted",
+ "organization.connection.added",
+ "organization.connection.updated",
+ "organization.connection.removed",
+ "group.created",
+ "group.updated",
+ "group.deleted",
+ "group.member.added",
+ "group.member.deleted",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/event_stream_response_content.py b/src/auth0/management/types/event_stream_response_content.py
new file mode 100644
index 00000000..9706a598
--- /dev/null
+++ b/src/auth0/management/types/event_stream_response_content.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .event_stream_action_response_content import EventStreamActionResponseContent
+from .event_stream_event_bridge_response_content import EventStreamEventBridgeResponseContent
+from .event_stream_webhook_response_content import EventStreamWebhookResponseContent
+
+EventStreamResponseContent = typing.Union[
+ EventStreamWebhookResponseContent, EventStreamEventBridgeResponseContent, EventStreamActionResponseContent
+]
diff --git a/src/auth0/management/types/event_stream_status_enum.py b/src/auth0/management/types/event_stream_status_enum.py
new file mode 100644
index 00000000..b1f14373
--- /dev/null
+++ b/src/auth0/management/types/event_stream_status_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamStatusEnum = typing.Union[typing.Literal["enabled", "disabled"], typing.Any]
diff --git a/src/auth0/management/types/event_stream_subscription.py b/src/auth0/management/types/event_stream_subscription.py
new file mode 100644
index 00000000..cf68b4f2
--- /dev/null
+++ b/src/auth0/management/types/event_stream_subscription.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class EventStreamSubscription(UniversalBaseModel):
+ """
+ Event types
+ """
+
+ event_type: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_test_event_type_enum.py b/src/auth0/management/types/event_stream_test_event_type_enum.py
new file mode 100644
index 00000000..6f58b5ef
--- /dev/null
+++ b/src/auth0/management/types/event_stream_test_event_type_enum.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamTestEventTypeEnum = typing.Union[
+ typing.Literal[
+ "user.created",
+ "user.deleted",
+ "user.updated",
+ "organization.created",
+ "organization.updated",
+ "organization.deleted",
+ "organization.member.added",
+ "organization.member.deleted",
+ "organization.member.role.assigned",
+ "organization.member.role.deleted",
+ "organization.connection.added",
+ "organization.connection.updated",
+ "organization.connection.removed",
+ "group.created",
+ "group.updated",
+ "group.deleted",
+ "group.member.added",
+ "group.member.deleted",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/event_stream_webhook_authorization_response.py b/src/auth0/management/types/event_stream_webhook_authorization_response.py
new file mode 100644
index 00000000..941dca93
--- /dev/null
+++ b/src/auth0/management/types/event_stream_webhook_authorization_response.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .event_stream_webhook_basic_auth import EventStreamWebhookBasicAuth
+from .event_stream_webhook_bearer_auth import EventStreamWebhookBearerAuth
+
+EventStreamWebhookAuthorizationResponse = typing.Union[EventStreamWebhookBasicAuth, EventStreamWebhookBearerAuth]
diff --git a/src/auth0/management/types/event_stream_webhook_basic_auth.py b/src/auth0/management/types/event_stream_webhook_basic_auth.py
new file mode 100644
index 00000000..4e4d6a62
--- /dev/null
+++ b/src/auth0/management/types/event_stream_webhook_basic_auth.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_webhook_basic_auth_method_enum import EventStreamWebhookBasicAuthMethodEnum
+
+
+class EventStreamWebhookBasicAuth(UniversalBaseModel):
+ """
+ Basic Authorization for HTTP requests (e.g., 'Basic credentials').
+ """
+
+ method: EventStreamWebhookBasicAuthMethodEnum = "basic"
+ username: str = pydantic.Field()
+ """
+ Username
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_webhook_basic_auth_method_enum.py b/src/auth0/management/types/event_stream_webhook_basic_auth_method_enum.py
new file mode 100644
index 00000000..22f8b115
--- /dev/null
+++ b/src/auth0/management/types/event_stream_webhook_basic_auth_method_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamWebhookBasicAuthMethodEnum = typing.Literal["basic"]
diff --git a/src/auth0/management/types/event_stream_webhook_bearer_auth.py b/src/auth0/management/types/event_stream_webhook_bearer_auth.py
new file mode 100644
index 00000000..44a29ddf
--- /dev/null
+++ b/src/auth0/management/types/event_stream_webhook_bearer_auth.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_webhook_bearer_auth_method_enum import EventStreamWebhookBearerAuthMethodEnum
+
+
+class EventStreamWebhookBearerAuth(UniversalBaseModel):
+ """
+ Bearer Authorization for HTTP requests (e.g., 'Bearer token').
+ """
+
+ method: EventStreamWebhookBearerAuthMethodEnum = "bearer"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_webhook_bearer_auth_method_enum.py b/src/auth0/management/types/event_stream_webhook_bearer_auth_method_enum.py
new file mode 100644
index 00000000..8e68ec41
--- /dev/null
+++ b/src/auth0/management/types/event_stream_webhook_bearer_auth_method_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamWebhookBearerAuthMethodEnum = typing.Literal["bearer"]
diff --git a/src/auth0/management/types/event_stream_webhook_configuration.py b/src/auth0/management/types/event_stream_webhook_configuration.py
new file mode 100644
index 00000000..305c5dbb
--- /dev/null
+++ b/src/auth0/management/types/event_stream_webhook_configuration.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_webhook_authorization_response import EventStreamWebhookAuthorizationResponse
+
+
+class EventStreamWebhookConfiguration(UniversalBaseModel):
+ """
+ Configuration specific to a webhook destination.
+ """
+
+ webhook_endpoint: str = pydantic.Field()
+ """
+ Target HTTP endpoint URL.
+ """
+
+ webhook_authorization: EventStreamWebhookAuthorizationResponse
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_webhook_destination.py b/src/auth0/management/types/event_stream_webhook_destination.py
new file mode 100644
index 00000000..50832335
--- /dev/null
+++ b/src/auth0/management/types/event_stream_webhook_destination.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_webhook_configuration import EventStreamWebhookConfiguration
+from .event_stream_webhook_destination_type_enum import EventStreamWebhookDestinationTypeEnum
+
+
+class EventStreamWebhookDestination(UniversalBaseModel):
+ type: EventStreamWebhookDestinationTypeEnum = "webhook"
+ configuration: EventStreamWebhookConfiguration
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/event_stream_webhook_destination_type_enum.py b/src/auth0/management/types/event_stream_webhook_destination_type_enum.py
new file mode 100644
index 00000000..2cd5ccb8
--- /dev/null
+++ b/src/auth0/management/types/event_stream_webhook_destination_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+EventStreamWebhookDestinationTypeEnum = typing.Literal["webhook"]
diff --git a/src/auth0/management/types/event_stream_webhook_response_content.py b/src/auth0/management/types/event_stream_webhook_response_content.py
new file mode 100644
index 00000000..69501cc1
--- /dev/null
+++ b/src/auth0/management/types/event_stream_webhook_response_content.py
@@ -0,0 +1,48 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_status_enum import EventStreamStatusEnum
+from .event_stream_subscription import EventStreamSubscription
+from .event_stream_webhook_destination import EventStreamWebhookDestination
+
+
+class EventStreamWebhookResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique identifier for the event stream.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the event stream.
+ """
+
+ subscriptions: typing.Optional[typing.List[EventStreamSubscription]] = pydantic.Field(default=None)
+ """
+ List of event types subscribed to in this stream.
+ """
+
+ destination: typing.Optional[EventStreamWebhookDestination] = None
+ status: typing.Optional[EventStreamStatusEnum] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp when the event stream was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp when the event stream was last updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/express_configuration.py b/src/auth0/management/types/express_configuration.py
new file mode 100644
index 00000000..5ffaa41b
--- /dev/null
+++ b/src/auth0/management/types/express_configuration.py
@@ -0,0 +1,67 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .linked_client_configuration import LinkedClientConfiguration
+
+
+class ExpressConfiguration(UniversalBaseModel):
+ """
+ Application specific configuration for use with the OIN Express Configuration feature.
+ """
+
+ initiate_login_uri_template: str = pydantic.Field()
+ """
+ The URI users should bookmark to log in to this application. Variable substitution is permitted for the following properties: organization_name, organization_id, and connection_name.
+ """
+
+ user_attribute_profile_id: str = pydantic.Field()
+ """
+ The ID of the user attribute profile to use for this application.
+ """
+
+ connection_profile_id: str = pydantic.Field()
+ """
+ The ID of the connection profile to use for this application.
+ """
+
+ enable_client: bool = pydantic.Field()
+ """
+ When true, all connections made via express configuration will be enabled for this application.
+ """
+
+ enable_organization: bool = pydantic.Field()
+ """
+ When true, all connections made via express configuration will have the associated organization enabled.
+ """
+
+ linked_clients: typing.Optional[typing.List[LinkedClientConfiguration]] = pydantic.Field(default=None)
+ """
+ List of client IDs that are linked to this express configuration (e.g. web or mobile clients).
+ """
+
+ okta_oin_client_id: str = pydantic.Field()
+ """
+ This is the unique identifier for the Okta OIN Express Configuration Client, which Okta will use for this application.
+ """
+
+ admin_login_domain: str = pydantic.Field()
+ """
+ This is the domain that admins are expected to log in via for authenticating for express configuration. It can be either the canonical domain or a registered custom domain.
+ """
+
+ oin_submission_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The identifier of the published application in the OKTA OIN.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/express_configuration_or_null.py b/src/auth0/management/types/express_configuration_or_null.py
new file mode 100644
index 00000000..283f1a99
--- /dev/null
+++ b/src/auth0/management/types/express_configuration_or_null.py
@@ -0,0 +1,67 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .linked_client_configuration import LinkedClientConfiguration
+
+
+class ExpressConfigurationOrNull(UniversalBaseModel):
+ """
+ Application specific configuration for use with the OIN Express Configuration feature.
+ """
+
+ initiate_login_uri_template: str = pydantic.Field()
+ """
+ The URI users should bookmark to log in to this application. Variable substitution is permitted for the following properties: organization_name, organization_id, and connection_name.
+ """
+
+ user_attribute_profile_id: str = pydantic.Field()
+ """
+ The ID of the user attribute profile to use for this application.
+ """
+
+ connection_profile_id: str = pydantic.Field()
+ """
+ The ID of the connection profile to use for this application.
+ """
+
+ enable_client: bool = pydantic.Field()
+ """
+ When true, all connections made via express configuration will be enabled for this application.
+ """
+
+ enable_organization: bool = pydantic.Field()
+ """
+ When true, all connections made via express configuration will have the associated organization enabled.
+ """
+
+ linked_clients: typing.Optional[typing.List[LinkedClientConfiguration]] = pydantic.Field(default=None)
+ """
+ List of client IDs that are linked to this express configuration (e.g. web or mobile clients).
+ """
+
+ okta_oin_client_id: str = pydantic.Field()
+ """
+ This is the unique identifier for the Okta OIN Express Configuration Client, which Okta will use for this application.
+ """
+
+ admin_login_domain: str = pydantic.Field()
+ """
+ This is the domain that admins are expected to log in via for authenticating for express configuration. It can be either the canonical domain or a registered custom domain.
+ """
+
+ oin_submission_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The identifier of the published application in the OKTA OIN.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/extensibility_email_provider_credentials.py b/src/auth0/management/types/extensibility_email_provider_credentials.py
new file mode 100644
index 00000000..78a1e3fd
--- /dev/null
+++ b/src/auth0/management/types/extensibility_email_provider_credentials.py
@@ -0,0 +1,17 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class ExtensibilityEmailProviderCredentials(UniversalBaseModel):
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/federated_connection_token_set.py b/src/auth0/management/types/federated_connection_token_set.py
new file mode 100644
index 00000000..7e91759d
--- /dev/null
+++ b/src/auth0/management/types/federated_connection_token_set.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FederatedConnectionTokenSet(UniversalBaseModel):
+ id: typing.Optional[str] = None
+ connection: typing.Optional[str] = None
+ scope: typing.Optional[str] = None
+ expires_at: typing.Optional[dt.datetime] = None
+ issued_at: typing.Optional[dt.datetime] = None
+ last_used_at: typing.Optional[dt.datetime] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action.py b/src/auth0/management/types/flow_action.py
new file mode 100644
index 00000000..64499a6a
--- /dev/null
+++ b/src/auth0/management/types/flow_action.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from .flow_action_activecampaign import FlowActionActivecampaign
+from .flow_action_airtable import FlowActionAirtable
+from .flow_action_auth_0 import FlowActionAuth0
+from .flow_action_bigquery import FlowActionBigquery
+from .flow_action_clearbit import FlowActionClearbit
+from .flow_action_email import FlowActionEmail
+from .flow_action_google_sheets import FlowActionGoogleSheets
+from .flow_action_http import FlowActionHttp
+from .flow_action_hubspot import FlowActionHubspot
+from .flow_action_json import FlowActionJson
+from .flow_action_jwt import FlowActionJwt
+from .flow_action_mailchimp import FlowActionMailchimp
+from .flow_action_mailjet import FlowActionMailjet
+from .flow_action_otp import FlowActionOtp
+from .flow_action_pipedrive import FlowActionPipedrive
+from .flow_action_salesforce import FlowActionSalesforce
+from .flow_action_sendgrid import FlowActionSendgrid
+from .flow_action_slack import FlowActionSlack
+from .flow_action_stripe import FlowActionStripe
+from .flow_action_telegram import FlowActionTelegram
+from .flow_action_twilio import FlowActionTwilio
+from .flow_action_whatsapp import FlowActionWhatsapp
+from .flow_action_xml import FlowActionXml
+from .flow_action_zapier import FlowActionZapier
+
+if typing.TYPE_CHECKING:
+ from .flow_action_flow import FlowActionFlow
+FlowAction = typing.Union[
+ FlowActionActivecampaign,
+ FlowActionAirtable,
+ FlowActionAuth0,
+ FlowActionBigquery,
+ FlowActionClearbit,
+ FlowActionEmail,
+ "FlowActionFlow",
+ FlowActionGoogleSheets,
+ FlowActionHttp,
+ FlowActionHubspot,
+ FlowActionJson,
+ FlowActionJwt,
+ FlowActionMailchimp,
+ FlowActionMailjet,
+ FlowActionOtp,
+ FlowActionPipedrive,
+ FlowActionSalesforce,
+ FlowActionSendgrid,
+ FlowActionSlack,
+ FlowActionStripe,
+ FlowActionTelegram,
+ FlowActionTwilio,
+ FlowActionWhatsapp,
+ FlowActionXml,
+ FlowActionZapier,
+]
diff --git a/src/auth0/management/types/flow_action_activecampaign.py b/src/auth0/management/types/flow_action_activecampaign.py
new file mode 100644
index 00000000..0689b392
--- /dev/null
+++ b/src/auth0/management/types/flow_action_activecampaign.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_activecampaign_list_contacts import FlowActionActivecampaignListContacts
+from .flow_action_activecampaign_upsert_contact import FlowActionActivecampaignUpsertContact
+
+FlowActionActivecampaign = typing.Union[FlowActionActivecampaignListContacts, FlowActionActivecampaignUpsertContact]
diff --git a/src/auth0/management/types/flow_action_activecampaign_list_contacts.py b/src/auth0/management/types/flow_action_activecampaign_list_contacts.py
new file mode 100644
index 00000000..9f9b4759
--- /dev/null
+++ b/src/auth0/management/types/flow_action_activecampaign_list_contacts.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_activecampaign_list_contacts_params import FlowActionActivecampaignListContactsParams
+
+
+class FlowActionActivecampaignListContacts(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["ACTIVECAMPAIGN"] = "ACTIVECAMPAIGN"
+ action: typing.Literal["LIST_CONTACTS"] = "LIST_CONTACTS"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionActivecampaignListContactsParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_activecampaign_list_contacts_params.py b/src/auth0/management/types/flow_action_activecampaign_list_contacts_params.py
new file mode 100644
index 00000000..7000d5ae
--- /dev/null
+++ b/src/auth0/management/types/flow_action_activecampaign_list_contacts_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionActivecampaignListContactsParams(UniversalBaseModel):
+ connection_id: str
+ email: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_activecampaign_upsert_contact.py b/src/auth0/management/types/flow_action_activecampaign_upsert_contact.py
new file mode 100644
index 00000000..f3a428e0
--- /dev/null
+++ b/src/auth0/management/types/flow_action_activecampaign_upsert_contact.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_activecampaign_upsert_contact_params import FlowActionActivecampaignUpsertContactParams
+
+
+class FlowActionActivecampaignUpsertContact(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["ACTIVECAMPAIGN"] = "ACTIVECAMPAIGN"
+ action: typing.Literal["UPSERT_CONTACT"] = "UPSERT_CONTACT"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionActivecampaignUpsertContactParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_activecampaign_upsert_contact_params.py b/src/auth0/management/types/flow_action_activecampaign_upsert_contact_params.py
new file mode 100644
index 00000000..a729287d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_activecampaign_upsert_contact_params.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_activecampaign_upsert_contact_params_custom_fields import (
+ FlowActionActivecampaignUpsertContactParamsCustomFields,
+)
+
+
+class FlowActionActivecampaignUpsertContactParams(UniversalBaseModel):
+ connection_id: str
+ email: str
+ first_name: typing.Optional[str] = None
+ last_name: typing.Optional[str] = None
+ phone: typing.Optional[str] = None
+ custom_fields: typing.Optional[FlowActionActivecampaignUpsertContactParamsCustomFields] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_activecampaign_upsert_contact_params_custom_fields.py b/src/auth0/management/types/flow_action_activecampaign_upsert_contact_params_custom_fields.py
new file mode 100644
index 00000000..45a6c128
--- /dev/null
+++ b/src/auth0/management/types/flow_action_activecampaign_upsert_contact_params_custom_fields.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionActivecampaignUpsertContactParamsCustomFields = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_airtable.py b/src/auth0/management/types/flow_action_airtable.py
new file mode 100644
index 00000000..a4b443a1
--- /dev/null
+++ b/src/auth0/management/types/flow_action_airtable.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_airtable_create_record import FlowActionAirtableCreateRecord
+from .flow_action_airtable_list_records import FlowActionAirtableListRecords
+from .flow_action_airtable_update_record import FlowActionAirtableUpdateRecord
+
+FlowActionAirtable = typing.Union[
+ FlowActionAirtableCreateRecord, FlowActionAirtableListRecords, FlowActionAirtableUpdateRecord
+]
diff --git a/src/auth0/management/types/flow_action_airtable_create_record.py b/src/auth0/management/types/flow_action_airtable_create_record.py
new file mode 100644
index 00000000..06ec6b06
--- /dev/null
+++ b/src/auth0/management/types/flow_action_airtable_create_record.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_airtable_create_record_params import FlowActionAirtableCreateRecordParams
+
+
+class FlowActionAirtableCreateRecord(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["AIRTABLE"] = "AIRTABLE"
+ action: typing.Literal["CREATE_RECORD"] = "CREATE_RECORD"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionAirtableCreateRecordParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_airtable_create_record_params.py b/src/auth0/management/types/flow_action_airtable_create_record_params.py
new file mode 100644
index 00000000..094e4ab9
--- /dev/null
+++ b/src/auth0/management/types/flow_action_airtable_create_record_params.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_airtable_create_record_params_fields import FlowActionAirtableCreateRecordParamsFields
+
+
+class FlowActionAirtableCreateRecordParams(UniversalBaseModel):
+ connection_id: str
+ base_id: str
+ table_name: str
+ fields: typing.Optional[FlowActionAirtableCreateRecordParamsFields] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_airtable_create_record_params_fields.py b/src/auth0/management/types/flow_action_airtable_create_record_params_fields.py
new file mode 100644
index 00000000..d0f5bf57
--- /dev/null
+++ b/src/auth0/management/types/flow_action_airtable_create_record_params_fields.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionAirtableCreateRecordParamsFields = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_airtable_list_records.py b/src/auth0/management/types/flow_action_airtable_list_records.py
new file mode 100644
index 00000000..d1bf388d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_airtable_list_records.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_airtable_list_records_params import FlowActionAirtableListRecordsParams
+
+
+class FlowActionAirtableListRecords(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["AIRTABLE"] = "AIRTABLE"
+ action: typing.Literal["LIST_RECORDS"] = "LIST_RECORDS"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionAirtableListRecordsParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_airtable_list_records_params.py b/src/auth0/management/types/flow_action_airtable_list_records_params.py
new file mode 100644
index 00000000..7f9df903
--- /dev/null
+++ b/src/auth0/management/types/flow_action_airtable_list_records_params.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionAirtableListRecordsParams(UniversalBaseModel):
+ connection_id: str
+ base_id: str
+ table_name: str
+ query: typing.Optional[str] = None
+ view: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_airtable_update_record.py b/src/auth0/management/types/flow_action_airtable_update_record.py
new file mode 100644
index 00000000..6e230c21
--- /dev/null
+++ b/src/auth0/management/types/flow_action_airtable_update_record.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_airtable_update_record_params import FlowActionAirtableUpdateRecordParams
+
+
+class FlowActionAirtableUpdateRecord(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["AIRTABLE"] = "AIRTABLE"
+ action: typing.Literal["UPDATE_RECORD"] = "UPDATE_RECORD"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionAirtableUpdateRecordParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_airtable_update_record_params.py b/src/auth0/management/types/flow_action_airtable_update_record_params.py
new file mode 100644
index 00000000..70e8c680
--- /dev/null
+++ b/src/auth0/management/types/flow_action_airtable_update_record_params.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_airtable_update_record_params_fields import FlowActionAirtableUpdateRecordParamsFields
+
+
+class FlowActionAirtableUpdateRecordParams(UniversalBaseModel):
+ connection_id: str
+ base_id: str
+ table_name: str
+ record_id: str
+ fields: typing.Optional[FlowActionAirtableUpdateRecordParamsFields] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_airtable_update_record_params_fields.py b/src/auth0/management/types/flow_action_airtable_update_record_params_fields.py
new file mode 100644
index 00000000..27e4736c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_airtable_update_record_params_fields.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionAirtableUpdateRecordParamsFields = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_auth_0.py b/src/auth0/management/types/flow_action_auth_0.py
new file mode 100644
index 00000000..7b325a30
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0.py
@@ -0,0 +1,17 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_auth_0_create_user import FlowActionAuth0CreateUser
+from .flow_action_auth_0_get_user import FlowActionAuth0GetUser
+from .flow_action_auth_0_send_email import FlowActionAuth0SendEmail
+from .flow_action_auth_0_send_request import FlowActionAuth0SendRequest
+from .flow_action_auth_0_update_user import FlowActionAuth0UpdateUser
+
+FlowActionAuth0 = typing.Union[
+ FlowActionAuth0CreateUser,
+ FlowActionAuth0GetUser,
+ FlowActionAuth0UpdateUser,
+ FlowActionAuth0SendRequest,
+ FlowActionAuth0SendEmail,
+]
diff --git a/src/auth0/management/types/flow_action_auth_0_create_user.py b/src/auth0/management/types/flow_action_auth_0_create_user.py
new file mode 100644
index 00000000..04f3b01b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_create_user.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_auth_0_create_user_params import FlowActionAuth0CreateUserParams
+
+
+class FlowActionAuth0CreateUser(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["AUTH0"] = "AUTH0"
+ action: typing.Literal["CREATE_USER"] = "CREATE_USER"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionAuth0CreateUserParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_create_user_params.py b/src/auth0/management/types/flow_action_auth_0_create_user_params.py
new file mode 100644
index 00000000..0b75156c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_create_user_params.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_auth_0_create_user_params_payload import FlowActionAuth0CreateUserParamsPayload
+
+
+class FlowActionAuth0CreateUserParams(UniversalBaseModel):
+ connection_id: str
+ payload: FlowActionAuth0CreateUserParamsPayload
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_create_user_params_payload.py b/src/auth0/management/types/flow_action_auth_0_create_user_params_payload.py
new file mode 100644
index 00000000..7cd7d376
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_create_user_params_payload.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionAuth0CreateUserParamsPayload = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_auth_0_get_user.py b/src/auth0/management/types/flow_action_auth_0_get_user.py
new file mode 100644
index 00000000..e0641bef
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_get_user.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_auth_0_get_user_params import FlowActionAuth0GetUserParams
+
+
+class FlowActionAuth0GetUser(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["AUTH0"] = "AUTH0"
+ action: typing.Literal["GET_USER"] = "GET_USER"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionAuth0GetUserParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_get_user_params.py b/src/auth0/management/types/flow_action_auth_0_get_user_params.py
new file mode 100644
index 00000000..9e0e0f23
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_get_user_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionAuth0GetUserParams(UniversalBaseModel):
+ connection_id: str
+ user_id: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_send_email.py b/src/auth0/management/types/flow_action_auth_0_send_email.py
new file mode 100644
index 00000000..e9abdf5e
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_email.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_auth_0_send_email_params import FlowActionAuth0SendEmailParams
+
+
+class FlowActionAuth0SendEmail(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["AUTH0"] = "AUTH0"
+ action: typing.Literal["SEND_EMAIL"] = "SEND_EMAIL"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionAuth0SendEmailParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_send_email_params.py b/src/auth0/management/types/flow_action_auth_0_send_email_params.py
new file mode 100644
index 00000000..91847230
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_email_params.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .flow_action_auth_0_send_email_params_from import FlowActionAuth0SendEmailParamsFrom
+from .flow_action_auth_0_send_email_params_to import FlowActionAuth0SendEmailParamsTo
+from .flow_action_auth_0_send_request_params_custom_vars import FlowActionAuth0SendRequestParamsCustomVars
+
+
+class FlowActionAuth0SendEmailParams(UniversalBaseModel):
+ from_: typing_extensions.Annotated[
+ typing.Optional[FlowActionAuth0SendEmailParamsFrom], FieldMetadata(alias="from")
+ ] = None
+ to: FlowActionAuth0SendEmailParamsTo
+ subject: str
+ body: str
+ custom_vars: typing.Optional[FlowActionAuth0SendRequestParamsCustomVars] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_send_email_params_from.py b/src/auth0/management/types/flow_action_auth_0_send_email_params_from.py
new file mode 100644
index 00000000..5c4b71cd
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_email_params_from.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_auth_0_send_email_params_from_email import FlowActionAuth0SendEmailParamsFromEmail
+
+
+class FlowActionAuth0SendEmailParamsFrom(UniversalBaseModel):
+ name: typing.Optional[str] = None
+ email: FlowActionAuth0SendEmailParamsFromEmail
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_send_email_params_from_email.py b/src/auth0/management/types/flow_action_auth_0_send_email_params_from_email.py
new file mode 100644
index 00000000..6f9456a5
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_email_params_from_email.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+FlowActionAuth0SendEmailParamsFromEmail = str
diff --git a/src/auth0/management/types/flow_action_auth_0_send_email_params_to.py b/src/auth0/management/types/flow_action_auth_0_send_email_params_to.py
new file mode 100644
index 00000000..c97f9335
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_email_params_to.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+FlowActionAuth0SendEmailParamsTo = str
diff --git a/src/auth0/management/types/flow_action_auth_0_send_request.py b/src/auth0/management/types/flow_action_auth_0_send_request.py
new file mode 100644
index 00000000..439f93b3
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_request.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_auth_0_send_request_params import FlowActionAuth0SendRequestParams
+
+
+class FlowActionAuth0SendRequest(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["AUTH0"] = "AUTH0"
+ action: typing.Literal["SEND_REQUEST"] = "SEND_REQUEST"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionAuth0SendRequestParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_send_request_params.py b/src/auth0/management/types/flow_action_auth_0_send_request_params.py
new file mode 100644
index 00000000..7c63d67c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_request_params.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_auth_0_send_request_params_headers import FlowActionAuth0SendRequestParamsHeaders
+from .flow_action_auth_0_send_request_params_method import FlowActionAuth0SendRequestParamsMethod
+from .flow_action_auth_0_send_request_params_payload import FlowActionAuth0SendRequestParamsPayload
+from .flow_action_auth_0_send_request_params_query_params import FlowActionAuth0SendRequestParamsQueryParams
+
+
+class FlowActionAuth0SendRequestParams(UniversalBaseModel):
+ connection_id: str
+ pathname: str
+ method: typing.Optional[FlowActionAuth0SendRequestParamsMethod] = None
+ headers: typing.Optional[FlowActionAuth0SendRequestParamsHeaders] = None
+ params: typing.Optional[FlowActionAuth0SendRequestParamsQueryParams] = None
+ payload: typing.Optional[FlowActionAuth0SendRequestParamsPayload] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_send_request_params_custom_vars.py b/src/auth0/management/types/flow_action_auth_0_send_request_params_custom_vars.py
new file mode 100644
index 00000000..1235e9c4
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_request_params_custom_vars.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionAuth0SendRequestParamsCustomVars = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_auth_0_send_request_params_headers.py b/src/auth0/management/types/flow_action_auth_0_send_request_params_headers.py
new file mode 100644
index 00000000..cc261d75
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_request_params_headers.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionAuth0SendRequestParamsHeaders = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_auth_0_send_request_params_method.py b/src/auth0/management/types/flow_action_auth_0_send_request_params_method.py
new file mode 100644
index 00000000..3e70072b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_request_params_method.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionAuth0SendRequestParamsMethod = typing.Union[
+ typing.Literal["GET", "POST", "PUT", "PATCH", "DELETE"], typing.Any
+]
diff --git a/src/auth0/management/types/flow_action_auth_0_send_request_params_payload.py b/src/auth0/management/types/flow_action_auth_0_send_request_params_payload.py
new file mode 100644
index 00000000..0d214ef7
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_request_params_payload.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_auth_0_send_request_params_payload_object import FlowActionAuth0SendRequestParamsPayloadObject
+
+FlowActionAuth0SendRequestParamsPayload = typing.Union[
+ str, typing.List[typing.Any], FlowActionAuth0SendRequestParamsPayloadObject
+]
diff --git a/src/auth0/management/types/flow_action_auth_0_send_request_params_payload_object.py b/src/auth0/management/types/flow_action_auth_0_send_request_params_payload_object.py
new file mode 100644
index 00000000..ec8354c9
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_request_params_payload_object.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionAuth0SendRequestParamsPayloadObject = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_auth_0_send_request_params_query_params.py b/src/auth0/management/types/flow_action_auth_0_send_request_params_query_params.py
new file mode 100644
index 00000000..aa704f7e
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_request_params_query_params.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_auth_0_send_request_params_query_params_value import FlowActionAuth0SendRequestParamsQueryParamsValue
+
+FlowActionAuth0SendRequestParamsQueryParams = typing.Dict[
+ str, typing.Optional[FlowActionAuth0SendRequestParamsQueryParamsValue]
+]
diff --git a/src/auth0/management/types/flow_action_auth_0_send_request_params_query_params_value.py b/src/auth0/management/types/flow_action_auth_0_send_request_params_query_params_value.py
new file mode 100644
index 00000000..62a9e38f
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_send_request_params_query_params_value.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionAuth0SendRequestParamsQueryParamsValue = typing.Union[float, str]
diff --git a/src/auth0/management/types/flow_action_auth_0_update_user.py b/src/auth0/management/types/flow_action_auth_0_update_user.py
new file mode 100644
index 00000000..544acd7b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_update_user.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_auth_0_update_user_params import FlowActionAuth0UpdateUserParams
+
+
+class FlowActionAuth0UpdateUser(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["AUTH0"] = "AUTH0"
+ action: typing.Literal["UPDATE_USER"] = "UPDATE_USER"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionAuth0UpdateUserParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_update_user_params.py b/src/auth0/management/types/flow_action_auth_0_update_user_params.py
new file mode 100644
index 00000000..f0877460
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_update_user_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_auth_0_update_user_params_changes import FlowActionAuth0UpdateUserParamsChanges
+
+
+class FlowActionAuth0UpdateUserParams(UniversalBaseModel):
+ connection_id: str
+ user_id: str
+ changes: FlowActionAuth0UpdateUserParamsChanges
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_auth_0_update_user_params_changes.py b/src/auth0/management/types/flow_action_auth_0_update_user_params_changes.py
new file mode 100644
index 00000000..60140746
--- /dev/null
+++ b/src/auth0/management/types/flow_action_auth_0_update_user_params_changes.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionAuth0UpdateUserParamsChanges = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_bigquery.py b/src/auth0/management/types/flow_action_bigquery.py
new file mode 100644
index 00000000..6711cc93
--- /dev/null
+++ b/src/auth0/management/types/flow_action_bigquery.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_bigquery_insert_rows import FlowActionBigqueryInsertRows
+
+FlowActionBigquery = FlowActionBigqueryInsertRows
diff --git a/src/auth0/management/types/flow_action_bigquery_insert_rows.py b/src/auth0/management/types/flow_action_bigquery_insert_rows.py
new file mode 100644
index 00000000..033039df
--- /dev/null
+++ b/src/auth0/management/types/flow_action_bigquery_insert_rows.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_bigquery_insert_rows_params import FlowActionBigqueryInsertRowsParams
+
+
+class FlowActionBigqueryInsertRows(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["BIGQUERY"] = "BIGQUERY"
+ action: typing.Literal["INSERT_ROWS"] = "INSERT_ROWS"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionBigqueryInsertRowsParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_bigquery_insert_rows_params.py b/src/auth0/management/types/flow_action_bigquery_insert_rows_params.py
new file mode 100644
index 00000000..bacf9675
--- /dev/null
+++ b/src/auth0/management/types/flow_action_bigquery_insert_rows_params.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_bigquery_insert_rows_params_data import FlowActionBigqueryInsertRowsParamsData
+
+
+class FlowActionBigqueryInsertRowsParams(UniversalBaseModel):
+ connection_id: str
+ dataset_id: str
+ table_id: str
+ data: typing.Optional[FlowActionBigqueryInsertRowsParamsData] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_bigquery_insert_rows_params_data.py b/src/auth0/management/types/flow_action_bigquery_insert_rows_params_data.py
new file mode 100644
index 00000000..f55b9e71
--- /dev/null
+++ b/src/auth0/management/types/flow_action_bigquery_insert_rows_params_data.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionBigqueryInsertRowsParamsData = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_clearbit.py b/src/auth0/management/types/flow_action_clearbit.py
new file mode 100644
index 00000000..f10fb840
--- /dev/null
+++ b/src/auth0/management/types/flow_action_clearbit.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_clearbit_find_company import FlowActionClearbitFindCompany
+from .flow_action_clearbit_find_person import FlowActionClearbitFindPerson
+
+FlowActionClearbit = typing.Union[FlowActionClearbitFindPerson, FlowActionClearbitFindCompany]
diff --git a/src/auth0/management/types/flow_action_clearbit_find_company.py b/src/auth0/management/types/flow_action_clearbit_find_company.py
new file mode 100644
index 00000000..08ad33b7
--- /dev/null
+++ b/src/auth0/management/types/flow_action_clearbit_find_company.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_clearbit_find_company_params import FlowActionClearbitFindCompanyParams
+
+
+class FlowActionClearbitFindCompany(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["CLEARBIT"] = "CLEARBIT"
+ action: typing.Literal["FIND_COMPANY"] = "FIND_COMPANY"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionClearbitFindCompanyParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_clearbit_find_company_params.py b/src/auth0/management/types/flow_action_clearbit_find_company_params.py
new file mode 100644
index 00000000..fb5aeffe
--- /dev/null
+++ b/src/auth0/management/types/flow_action_clearbit_find_company_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionClearbitFindCompanyParams(UniversalBaseModel):
+ connection_id: str
+ domain: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_clearbit_find_person.py b/src/auth0/management/types/flow_action_clearbit_find_person.py
new file mode 100644
index 00000000..b43c260f
--- /dev/null
+++ b/src/auth0/management/types/flow_action_clearbit_find_person.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_clearbit_find_person_params import FlowActionClearbitFindPersonParams
+
+
+class FlowActionClearbitFindPerson(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["CLEARBIT"] = "CLEARBIT"
+ action: typing.Literal["FIND_PERSON"] = "FIND_PERSON"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionClearbitFindPersonParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_clearbit_find_person_params.py b/src/auth0/management/types/flow_action_clearbit_find_person_params.py
new file mode 100644
index 00000000..a38664ed
--- /dev/null
+++ b/src/auth0/management/types/flow_action_clearbit_find_person_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionClearbitFindPersonParams(UniversalBaseModel):
+ connection_id: str
+ email: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_email.py b/src/auth0/management/types/flow_action_email.py
new file mode 100644
index 00000000..69b863fb
--- /dev/null
+++ b/src/auth0/management/types/flow_action_email.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_email_verify_email import FlowActionEmailVerifyEmail
+
+FlowActionEmail = FlowActionEmailVerifyEmail
diff --git a/src/auth0/management/types/flow_action_email_verify_email.py b/src/auth0/management/types/flow_action_email_verify_email.py
new file mode 100644
index 00000000..5d1a8cbc
--- /dev/null
+++ b/src/auth0/management/types/flow_action_email_verify_email.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_email_verify_email_params import FlowActionEmailVerifyEmailParams
+
+
+class FlowActionEmailVerifyEmail(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["EMAIL"] = "EMAIL"
+ action: typing.Literal["VERIFY_EMAIL"] = "VERIFY_EMAIL"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionEmailVerifyEmailParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_email_verify_email_params.py b/src/auth0/management/types/flow_action_email_verify_email_params.py
new file mode 100644
index 00000000..1f0c3799
--- /dev/null
+++ b/src/auth0/management/types/flow_action_email_verify_email_params.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_email_verify_email_params_rules import FlowActionEmailVerifyEmailParamsRules
+
+
+class FlowActionEmailVerifyEmailParams(UniversalBaseModel):
+ email: str
+ rules: typing.Optional[FlowActionEmailVerifyEmailParamsRules] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_email_verify_email_params_rules.py b/src/auth0/management/types/flow_action_email_verify_email_params_rules.py
new file mode 100644
index 00000000..f4a92146
--- /dev/null
+++ b/src/auth0/management/types/flow_action_email_verify_email_params_rules.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionEmailVerifyEmailParamsRules(UniversalBaseModel):
+ require_mx_record: typing.Optional[bool] = None
+ block_aliases: typing.Optional[bool] = None
+ block_free_emails: typing.Optional[bool] = None
+ block_disposable_emails: typing.Optional[bool] = None
+ blocklist: typing.Optional[typing.List[str]] = None
+ allowlist: typing.Optional[typing.List[str]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow.py b/src/auth0/management/types/flow_action_flow.py
new file mode 100644
index 00000000..2ea7db82
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from .flow_action_flow_delay_flow import FlowActionFlowDelayFlow
+from .flow_action_flow_do_nothing import FlowActionFlowDoNothing
+from .flow_action_flow_error_message import FlowActionFlowErrorMessage
+from .flow_action_flow_map_value import FlowActionFlowMapValue
+from .flow_action_flow_return_json import FlowActionFlowReturnJson
+from .flow_action_flow_store_vars import FlowActionFlowStoreVars
+
+if typing.TYPE_CHECKING:
+ from .flow_action_flow_boolean_condition import FlowActionFlowBooleanCondition
+FlowActionFlow = typing.Union[
+ "FlowActionFlowBooleanCondition",
+ FlowActionFlowDelayFlow,
+ FlowActionFlowDoNothing,
+ FlowActionFlowErrorMessage,
+ FlowActionFlowMapValue,
+ FlowActionFlowReturnJson,
+ FlowActionFlowStoreVars,
+]
diff --git a/src/auth0/management/types/flow_action_flow_boolean_condition.py b/src/auth0/management/types/flow_action_flow_boolean_condition.py
new file mode 100644
index 00000000..b578dafa
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_boolean_condition.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
+
+
+class FlowActionFlowBooleanCondition(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["FLOW"] = "FLOW"
+ action: typing.Literal["BOOLEAN_CONDITION"] = "BOOLEAN_CONDITION"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: "FlowActionFlowBooleanConditionParams"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
+
+
+from .flow_action import FlowAction # noqa: E402, I001
+from .flow_action_flow import FlowActionFlow # noqa: E402, I001
+from .flow_action_flow_boolean_condition_params import FlowActionFlowBooleanConditionParams # noqa: E402, I001
+
+update_forward_refs(
+ FlowActionFlowBooleanCondition,
+ FlowAction=FlowAction,
+ FlowActionFlow=FlowActionFlow,
+ FlowActionFlowBooleanConditionParams=FlowActionFlowBooleanConditionParams,
+)
diff --git a/src/auth0/management/types/flow_action_flow_boolean_condition_params.py b/src/auth0/management/types/flow_action_flow_boolean_condition_params.py
new file mode 100644
index 00000000..a38ae700
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_boolean_condition_params.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
+from ..core.serialization import FieldMetadata
+
+
+class FlowActionFlowBooleanConditionParams(UniversalBaseModel):
+ then: typing.Optional[typing.List["FlowAction"]] = None
+ else_: typing_extensions.Annotated[typing.Optional[typing.List["FlowAction"]], FieldMetadata(alias="else")] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
+
+
+from .flow_action import FlowAction # noqa: E402, I001
+from .flow_action_flow import FlowActionFlow # noqa: E402, I001
+from .flow_action_flow_boolean_condition import FlowActionFlowBooleanCondition # noqa: E402, I001
+
+update_forward_refs(
+ FlowActionFlowBooleanConditionParams,
+ FlowAction=FlowAction,
+ FlowActionFlow=FlowActionFlow,
+ FlowActionFlowBooleanCondition=FlowActionFlowBooleanCondition,
+)
diff --git a/src/auth0/management/types/flow_action_flow_delay_flow.py b/src/auth0/management/types/flow_action_flow_delay_flow.py
new file mode 100644
index 00000000..c2c2d1c3
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_delay_flow.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_delay_flow_params import FlowActionFlowDelayFlowParams
+
+
+class FlowActionFlowDelayFlow(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["FLOW"] = "FLOW"
+ action: typing.Literal["DELAY_FLOW"] = "DELAY_FLOW"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionFlowDelayFlowParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_delay_flow_params.py b/src/auth0/management/types/flow_action_flow_delay_flow_params.py
new file mode 100644
index 00000000..667c2954
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_delay_flow_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_delay_flow_params_number import FlowActionFlowDelayFlowParamsNumber
+from .flow_action_flow_delay_flow_params_units import FlowActionFlowDelayFlowParamsUnits
+
+
+class FlowActionFlowDelayFlowParams(UniversalBaseModel):
+ number: FlowActionFlowDelayFlowParamsNumber
+ units: typing.Optional[FlowActionFlowDelayFlowParamsUnits] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_delay_flow_params_number.py b/src/auth0/management/types/flow_action_flow_delay_flow_params_number.py
new file mode 100644
index 00000000..37c59345
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_delay_flow_params_number.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionFlowDelayFlowParamsNumber = typing.Union[int, str]
diff --git a/src/auth0/management/types/flow_action_flow_delay_flow_params_units.py b/src/auth0/management/types/flow_action_flow_delay_flow_params_units.py
new file mode 100644
index 00000000..e6b7aeca
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_delay_flow_params_units.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionFlowDelayFlowParamsUnits = typing.Union[typing.Literal["SECONDS", "MINUTES", "HOURS", "DAYS"], typing.Any]
diff --git a/src/auth0/management/types/flow_action_flow_do_nothing.py b/src/auth0/management/types/flow_action_flow_do_nothing.py
new file mode 100644
index 00000000..52d4e9c5
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_do_nothing.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_do_nothing_params import FlowActionFlowDoNothingParams
+
+
+class FlowActionFlowDoNothing(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["FLOW"] = "FLOW"
+ action: typing.Literal["DO_NOTHING"] = "DO_NOTHING"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: typing.Optional[FlowActionFlowDoNothingParams] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_do_nothing_params.py b/src/auth0/management/types/flow_action_flow_do_nothing_params.py
new file mode 100644
index 00000000..1572d329
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_do_nothing_params.py
@@ -0,0 +1,17 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionFlowDoNothingParams(UniversalBaseModel):
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_error_message.py b/src/auth0/management/types/flow_action_flow_error_message.py
new file mode 100644
index 00000000..4d04af6e
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_error_message.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_error_message_params import FlowActionFlowErrorMessageParams
+
+
+class FlowActionFlowErrorMessage(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["FLOW"] = "FLOW"
+ action: typing.Literal["ERROR_MESSAGE"] = "ERROR_MESSAGE"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionFlowErrorMessageParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_error_message_params.py b/src/auth0/management/types/flow_action_flow_error_message_params.py
new file mode 100644
index 00000000..8247b7f1
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_error_message_params.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionFlowErrorMessageParams(UniversalBaseModel):
+ message: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_map_value.py b/src/auth0/management/types/flow_action_flow_map_value.py
new file mode 100644
index 00000000..418d97ed
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_map_value.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_map_value_params import FlowActionFlowMapValueParams
+
+
+class FlowActionFlowMapValue(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["FLOW"] = "FLOW"
+ action: typing.Literal["MAP_VALUE"] = "MAP_VALUE"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionFlowMapValueParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_map_value_params.py b/src/auth0/management/types/flow_action_flow_map_value_params.py
new file mode 100644
index 00000000..c19c397b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_map_value_params.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_map_value_params_cases import FlowActionFlowMapValueParamsCases
+from .flow_action_flow_map_value_params_fallback import FlowActionFlowMapValueParamsFallback
+from .flow_action_flow_map_value_params_input import FlowActionFlowMapValueParamsInput
+
+
+class FlowActionFlowMapValueParams(UniversalBaseModel):
+ input: FlowActionFlowMapValueParamsInput
+ cases: typing.Optional[FlowActionFlowMapValueParamsCases] = None
+ fallback: typing.Optional[FlowActionFlowMapValueParamsFallback] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_map_value_params_cases.py b/src/auth0/management/types/flow_action_flow_map_value_params_cases.py
new file mode 100644
index 00000000..b16a9ac6
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_map_value_params_cases.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionFlowMapValueParamsCases = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_flow_map_value_params_fallback.py b/src/auth0/management/types/flow_action_flow_map_value_params_fallback.py
new file mode 100644
index 00000000..b60fcd9a
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_map_value_params_fallback.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_flow_map_value_params_fallback_object import FlowActionFlowMapValueParamsFallbackObject
+
+FlowActionFlowMapValueParamsFallback = typing.Union[
+ str, float, FlowActionFlowMapValueParamsFallbackObject, typing.List[typing.Any]
+]
diff --git a/src/auth0/management/types/flow_action_flow_map_value_params_fallback_object.py b/src/auth0/management/types/flow_action_flow_map_value_params_fallback_object.py
new file mode 100644
index 00000000..ff6529cb
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_map_value_params_fallback_object.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionFlowMapValueParamsFallbackObject = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_flow_map_value_params_input.py b/src/auth0/management/types/flow_action_flow_map_value_params_input.py
new file mode 100644
index 00000000..8c8e9d4d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_map_value_params_input.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionFlowMapValueParamsInput = typing.Union[str, float]
diff --git a/src/auth0/management/types/flow_action_flow_return_json.py b/src/auth0/management/types/flow_action_flow_return_json.py
new file mode 100644
index 00000000..9cc2e98a
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_return_json.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_return_json_params import FlowActionFlowReturnJsonParams
+
+
+class FlowActionFlowReturnJson(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["FLOW"] = "FLOW"
+ action: typing.Literal["RETURN_JSON"] = "RETURN_JSON"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionFlowReturnJsonParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_return_json_params.py b/src/auth0/management/types/flow_action_flow_return_json_params.py
new file mode 100644
index 00000000..895f0652
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_return_json_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_return_json_params_payload import FlowActionFlowReturnJsonParamsPayload
+
+
+class FlowActionFlowReturnJsonParams(UniversalBaseModel):
+ payload: FlowActionFlowReturnJsonParamsPayload
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_return_json_params_payload.py b/src/auth0/management/types/flow_action_flow_return_json_params_payload.py
new file mode 100644
index 00000000..a66d9c8d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_return_json_params_payload.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_flow_return_json_params_payload_object import FlowActionFlowReturnJsonParamsPayloadObject
+
+FlowActionFlowReturnJsonParamsPayload = typing.Union[FlowActionFlowReturnJsonParamsPayloadObject, str]
diff --git a/src/auth0/management/types/flow_action_flow_return_json_params_payload_object.py b/src/auth0/management/types/flow_action_flow_return_json_params_payload_object.py
new file mode 100644
index 00000000..7b274c6a
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_return_json_params_payload_object.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionFlowReturnJsonParamsPayloadObject = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_flow_store_vars.py b/src/auth0/management/types/flow_action_flow_store_vars.py
new file mode 100644
index 00000000..0008e58b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_store_vars.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_store_vars_params import FlowActionFlowStoreVarsParams
+
+
+class FlowActionFlowStoreVars(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["FLOW"] = "FLOW"
+ action: typing.Literal["STORE_VARS"] = "STORE_VARS"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionFlowStoreVarsParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_store_vars_params.py b/src/auth0/management/types/flow_action_flow_store_vars_params.py
new file mode 100644
index 00000000..d405ccf9
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_store_vars_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_flow_store_vars_params_vars import FlowActionFlowStoreVarsParamsVars
+
+
+class FlowActionFlowStoreVarsParams(UniversalBaseModel):
+ vars: FlowActionFlowStoreVarsParamsVars
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_flow_store_vars_params_vars.py b/src/auth0/management/types/flow_action_flow_store_vars_params_vars.py
new file mode 100644
index 00000000..b4912acc
--- /dev/null
+++ b/src/auth0/management/types/flow_action_flow_store_vars_params_vars.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionFlowStoreVarsParamsVars = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_google_sheets.py b/src/auth0/management/types/flow_action_google_sheets.py
new file mode 100644
index 00000000..d958c31c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_google_sheets.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_google_sheets_add_row import FlowActionGoogleSheetsAddRow
+
+FlowActionGoogleSheets = FlowActionGoogleSheetsAddRow
diff --git a/src/auth0/management/types/flow_action_google_sheets_add_row.py b/src/auth0/management/types/flow_action_google_sheets_add_row.py
new file mode 100644
index 00000000..5f1438ac
--- /dev/null
+++ b/src/auth0/management/types/flow_action_google_sheets_add_row.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_google_sheets_add_row_params import FlowActionGoogleSheetsAddRowParams
+
+
+class FlowActionGoogleSheetsAddRow(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["GOOGLE_SHEETS"] = "GOOGLE_SHEETS"
+ action: typing.Literal["ADD_ROW"] = "ADD_ROW"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionGoogleSheetsAddRowParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_google_sheets_add_row_params.py b/src/auth0/management/types/flow_action_google_sheets_add_row_params.py
new file mode 100644
index 00000000..a52048f6
--- /dev/null
+++ b/src/auth0/management/types/flow_action_google_sheets_add_row_params.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_google_sheets_add_row_params_sheet_id import FlowActionGoogleSheetsAddRowParamsSheetId
+from .flow_action_google_sheets_add_row_params_values import FlowActionGoogleSheetsAddRowParamsValues
+
+
+class FlowActionGoogleSheetsAddRowParams(UniversalBaseModel):
+ connection_id: str
+ spreadsheet_id: str
+ sheet_id: typing.Optional[FlowActionGoogleSheetsAddRowParamsSheetId] = None
+ values: typing.Optional[FlowActionGoogleSheetsAddRowParamsValues] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_google_sheets_add_row_params_sheet_id.py b/src/auth0/management/types/flow_action_google_sheets_add_row_params_sheet_id.py
new file mode 100644
index 00000000..8eefe60e
--- /dev/null
+++ b/src/auth0/management/types/flow_action_google_sheets_add_row_params_sheet_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionGoogleSheetsAddRowParamsSheetId = typing.Union[int, str]
diff --git a/src/auth0/management/types/flow_action_google_sheets_add_row_params_values.py b/src/auth0/management/types/flow_action_google_sheets_add_row_params_values.py
new file mode 100644
index 00000000..524c4e44
--- /dev/null
+++ b/src/auth0/management/types/flow_action_google_sheets_add_row_params_values.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionGoogleSheetsAddRowParamsValues = typing.List[typing.Optional[str]]
diff --git a/src/auth0/management/types/flow_action_http.py b/src/auth0/management/types/flow_action_http.py
new file mode 100644
index 00000000..4d84ae26
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_http_send_request import FlowActionHttpSendRequest
+
+FlowActionHttp = FlowActionHttpSendRequest
diff --git a/src/auth0/management/types/flow_action_http_send_request.py b/src/auth0/management/types/flow_action_http_send_request.py
new file mode 100644
index 00000000..eb176571
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_http_send_request_params import FlowActionHttpSendRequestParams
+
+
+class FlowActionHttpSendRequest(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["HTTP"] = "HTTP"
+ action: typing.Literal["SEND_REQUEST"] = "SEND_REQUEST"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionHttpSendRequestParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_http_send_request_params.py b/src/auth0/management/types/flow_action_http_send_request_params.py
new file mode 100644
index 00000000..d16764d5
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request_params.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_http_send_request_params_basic_auth import FlowActionHttpSendRequestParamsBasicAuth
+from .flow_action_http_send_request_params_content_type import FlowActionHttpSendRequestParamsContentType
+from .flow_action_http_send_request_params_headers import FlowActionHttpSendRequestParamsHeaders
+from .flow_action_http_send_request_params_method import FlowActionHttpSendRequestParamsMethod
+from .flow_action_http_send_request_params_payload import FlowActionHttpSendRequestParamsPayload
+from .flow_action_http_send_request_params_query_params import FlowActionHttpSendRequestParamsQueryParams
+
+
+class FlowActionHttpSendRequestParams(UniversalBaseModel):
+ connection_id: typing.Optional[str] = None
+ url: str
+ method: typing.Optional[FlowActionHttpSendRequestParamsMethod] = None
+ headers: typing.Optional[FlowActionHttpSendRequestParamsHeaders] = None
+ basic: typing.Optional[FlowActionHttpSendRequestParamsBasicAuth] = None
+ params: typing.Optional[FlowActionHttpSendRequestParamsQueryParams] = None
+ payload: typing.Optional[FlowActionHttpSendRequestParamsPayload] = None
+ content_type: typing.Optional[FlowActionHttpSendRequestParamsContentType] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_http_send_request_params_basic_auth.py b/src/auth0/management/types/flow_action_http_send_request_params_basic_auth.py
new file mode 100644
index 00000000..fe952576
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request_params_basic_auth.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionHttpSendRequestParamsBasicAuth(UniversalBaseModel):
+ username: typing.Optional[str] = None
+ password: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_http_send_request_params_content_type.py b/src/auth0/management/types/flow_action_http_send_request_params_content_type.py
new file mode 100644
index 00000000..d7901125
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request_params_content_type.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionHttpSendRequestParamsContentType = typing.Union[typing.Literal["JSON", "FORM", "XML"], typing.Any]
diff --git a/src/auth0/management/types/flow_action_http_send_request_params_headers.py b/src/auth0/management/types/flow_action_http_send_request_params_headers.py
new file mode 100644
index 00000000..2363bb1d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request_params_headers.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionHttpSendRequestParamsHeaders = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_http_send_request_params_method.py b/src/auth0/management/types/flow_action_http_send_request_params_method.py
new file mode 100644
index 00000000..380e7e27
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request_params_method.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionHttpSendRequestParamsMethod = typing.Union[
+ typing.Literal["GET", "POST", "PUT", "PATCH", "DELETE"], typing.Any
+]
diff --git a/src/auth0/management/types/flow_action_http_send_request_params_payload.py b/src/auth0/management/types/flow_action_http_send_request_params_payload.py
new file mode 100644
index 00000000..a3e8da05
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request_params_payload.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_http_send_request_params_payload_object import FlowActionHttpSendRequestParamsPayloadObject
+
+FlowActionHttpSendRequestParamsPayload = typing.Union[
+ str, typing.List[typing.Any], FlowActionHttpSendRequestParamsPayloadObject
+]
diff --git a/src/auth0/management/types/flow_action_http_send_request_params_payload_object.py b/src/auth0/management/types/flow_action_http_send_request_params_payload_object.py
new file mode 100644
index 00000000..f87aad0b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request_params_payload_object.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionHttpSendRequestParamsPayloadObject = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_http_send_request_params_query_params.py b/src/auth0/management/types/flow_action_http_send_request_params_query_params.py
new file mode 100644
index 00000000..9b4f4fbb
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request_params_query_params.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_http_send_request_params_query_params_value import FlowActionHttpSendRequestParamsQueryParamsValue
+
+FlowActionHttpSendRequestParamsQueryParams = typing.Dict[
+ str, typing.Optional[FlowActionHttpSendRequestParamsQueryParamsValue]
+]
diff --git a/src/auth0/management/types/flow_action_http_send_request_params_query_params_value.py b/src/auth0/management/types/flow_action_http_send_request_params_query_params_value.py
new file mode 100644
index 00000000..9e2bef12
--- /dev/null
+++ b/src/auth0/management/types/flow_action_http_send_request_params_query_params_value.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionHttpSendRequestParamsQueryParamsValue = typing.Union[float, str]
diff --git a/src/auth0/management/types/flow_action_hubspot.py b/src/auth0/management/types/flow_action_hubspot.py
new file mode 100644
index 00000000..6b05484b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_hubspot.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_hubspot_enroll_contact import FlowActionHubspotEnrollContact
+from .flow_action_hubspot_get_contact import FlowActionHubspotGetContact
+from .flow_action_hubspot_upsert_contact import FlowActionHubspotUpsertContact
+
+FlowActionHubspot = typing.Union[
+ FlowActionHubspotEnrollContact, FlowActionHubspotGetContact, FlowActionHubspotUpsertContact
+]
diff --git a/src/auth0/management/types/flow_action_hubspot_enroll_contact.py b/src/auth0/management/types/flow_action_hubspot_enroll_contact.py
new file mode 100644
index 00000000..e88e5515
--- /dev/null
+++ b/src/auth0/management/types/flow_action_hubspot_enroll_contact.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_hubspot_enroll_contact_params import FlowActionHubspotEnrollContactParams
+
+
+class FlowActionHubspotEnrollContact(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["HUBSPOT"] = "HUBSPOT"
+ action: typing.Literal["ENROLL_CONTACT"] = "ENROLL_CONTACT"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionHubspotEnrollContactParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_hubspot_enroll_contact_params.py b/src/auth0/management/types/flow_action_hubspot_enroll_contact_params.py
new file mode 100644
index 00000000..cbe7fe8d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_hubspot_enroll_contact_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_hubspot_enroll_contact_params_workflow_id import FlowActionHubspotEnrollContactParamsWorkflowId
+
+
+class FlowActionHubspotEnrollContactParams(UniversalBaseModel):
+ connection_id: str
+ email: str
+ workflow_id: FlowActionHubspotEnrollContactParamsWorkflowId
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_hubspot_enroll_contact_params_workflow_id.py b/src/auth0/management/types/flow_action_hubspot_enroll_contact_params_workflow_id.py
new file mode 100644
index 00000000..1693f5b8
--- /dev/null
+++ b/src/auth0/management/types/flow_action_hubspot_enroll_contact_params_workflow_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionHubspotEnrollContactParamsWorkflowId = typing.Union[str, int]
diff --git a/src/auth0/management/types/flow_action_hubspot_get_contact.py b/src/auth0/management/types/flow_action_hubspot_get_contact.py
new file mode 100644
index 00000000..26831878
--- /dev/null
+++ b/src/auth0/management/types/flow_action_hubspot_get_contact.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_hubspot_get_contact_params import FlowActionHubspotGetContactParams
+
+
+class FlowActionHubspotGetContact(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["HUBSPOT"] = "HUBSPOT"
+ action: typing.Literal["GET_CONTACT"] = "GET_CONTACT"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionHubspotGetContactParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_hubspot_get_contact_params.py b/src/auth0/management/types/flow_action_hubspot_get_contact_params.py
new file mode 100644
index 00000000..9f3ba426
--- /dev/null
+++ b/src/auth0/management/types/flow_action_hubspot_get_contact_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionHubspotGetContactParams(UniversalBaseModel):
+ connection_id: str
+ email: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_hubspot_upsert_contact.py b/src/auth0/management/types/flow_action_hubspot_upsert_contact.py
new file mode 100644
index 00000000..9e8b4155
--- /dev/null
+++ b/src/auth0/management/types/flow_action_hubspot_upsert_contact.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_hubspot_upsert_contact_params import FlowActionHubspotUpsertContactParams
+
+
+class FlowActionHubspotUpsertContact(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["HUBSPOT"] = "HUBSPOT"
+ action: typing.Literal["UPSERT_CONTACT"] = "UPSERT_CONTACT"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionHubspotUpsertContactParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_hubspot_upsert_contact_params.py b/src/auth0/management/types/flow_action_hubspot_upsert_contact_params.py
new file mode 100644
index 00000000..c9380bad
--- /dev/null
+++ b/src/auth0/management/types/flow_action_hubspot_upsert_contact_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_hubspot_upsert_contact_params_property import FlowActionHubspotUpsertContactParamsProperty
+
+
+class FlowActionHubspotUpsertContactParams(UniversalBaseModel):
+ connection_id: str
+ email: str
+ properties: typing.Optional[typing.List[FlowActionHubspotUpsertContactParamsProperty]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_hubspot_upsert_contact_params_property.py b/src/auth0/management/types/flow_action_hubspot_upsert_contact_params_property.py
new file mode 100644
index 00000000..c30fb41b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_hubspot_upsert_contact_params_property.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionHubspotUpsertContactParamsProperty(UniversalBaseModel):
+ property: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_json.py b/src/auth0/management/types/flow_action_json.py
new file mode 100644
index 00000000..01ce22dc
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_json_create_json import FlowActionJsonCreateJson
+from .flow_action_json_parse_json import FlowActionJsonParseJson
+from .flow_action_json_serialize_json import FlowActionJsonSerializeJson
+
+FlowActionJson = typing.Union[FlowActionJsonCreateJson, FlowActionJsonParseJson, FlowActionJsonSerializeJson]
diff --git a/src/auth0/management/types/flow_action_json_create_json.py b/src/auth0/management/types/flow_action_json_create_json.py
new file mode 100644
index 00000000..613b694f
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json_create_json.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_json_create_json_params import FlowActionJsonCreateJsonParams
+
+
+class FlowActionJsonCreateJson(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["JSON"] = "JSON"
+ action: typing.Literal["CREATE_JSON"] = "CREATE_JSON"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionJsonCreateJsonParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_json_create_json_params.py b/src/auth0/management/types/flow_action_json_create_json_params.py
new file mode 100644
index 00000000..4c483928
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json_create_json_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_json_create_json_params_object import FlowActionJsonCreateJsonParamsObject
+
+
+class FlowActionJsonCreateJsonParams(UniversalBaseModel):
+ object: FlowActionJsonCreateJsonParamsObject
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_json_create_json_params_object.py b/src/auth0/management/types/flow_action_json_create_json_params_object.py
new file mode 100644
index 00000000..2256a54b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json_create_json_params_object.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionJsonCreateJsonParamsObject = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_json_parse_json.py b/src/auth0/management/types/flow_action_json_parse_json.py
new file mode 100644
index 00000000..4fdc2cab
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json_parse_json.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_json_parse_json_params import FlowActionJsonParseJsonParams
+
+
+class FlowActionJsonParseJson(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["JSON"] = "JSON"
+ action: typing.Literal["PARSE_JSON"] = "PARSE_JSON"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionJsonParseJsonParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_json_parse_json_params.py b/src/auth0/management/types/flow_action_json_parse_json_params.py
new file mode 100644
index 00000000..fe8ff957
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json_parse_json_params.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class FlowActionJsonParseJsonParams(UniversalBaseModel):
+ json_: typing_extensions.Annotated[str, FieldMetadata(alias="json")]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_json_serialize_json.py b/src/auth0/management/types/flow_action_json_serialize_json.py
new file mode 100644
index 00000000..7cb86035
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json_serialize_json.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_json_serialize_json_params import FlowActionJsonSerializeJsonParams
+
+
+class FlowActionJsonSerializeJson(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["JSON"] = "JSON"
+ action: typing.Literal["SERIALIZE_JSON"] = "SERIALIZE_JSON"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionJsonSerializeJsonParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_json_serialize_json_params.py b/src/auth0/management/types/flow_action_json_serialize_json_params.py
new file mode 100644
index 00000000..65ca83b8
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json_serialize_json_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_json_serialize_json_params_object import FlowActionJsonSerializeJsonParamsObject
+
+
+class FlowActionJsonSerializeJsonParams(UniversalBaseModel):
+ object: FlowActionJsonSerializeJsonParamsObject
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_json_serialize_json_params_object.py b/src/auth0/management/types/flow_action_json_serialize_json_params_object.py
new file mode 100644
index 00000000..473ca198
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json_serialize_json_params_object.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_json_serialize_json_params_object_object import FlowActionJsonSerializeJsonParamsObjectObject
+
+FlowActionJsonSerializeJsonParamsObject = typing.Union[str, FlowActionJsonSerializeJsonParamsObjectObject]
diff --git a/src/auth0/management/types/flow_action_json_serialize_json_params_object_object.py b/src/auth0/management/types/flow_action_json_serialize_json_params_object_object.py
new file mode 100644
index 00000000..a73cbb6a
--- /dev/null
+++ b/src/auth0/management/types/flow_action_json_serialize_json_params_object_object.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionJsonSerializeJsonParamsObjectObject = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_jwt.py b/src/auth0/management/types/flow_action_jwt.py
new file mode 100644
index 00000000..818710c2
--- /dev/null
+++ b/src/auth0/management/types/flow_action_jwt.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_jwt_decode_jwt import FlowActionJwtDecodeJwt
+from .flow_action_jwt_sign_jwt import FlowActionJwtSignJwt
+from .flow_action_jwt_verify_jwt import FlowActionJwtVerifyJwt
+
+FlowActionJwt = typing.Union[FlowActionJwtDecodeJwt, FlowActionJwtSignJwt, FlowActionJwtVerifyJwt]
diff --git a/src/auth0/management/types/flow_action_jwt_decode_jwt.py b/src/auth0/management/types/flow_action_jwt_decode_jwt.py
new file mode 100644
index 00000000..09e14325
--- /dev/null
+++ b/src/auth0/management/types/flow_action_jwt_decode_jwt.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_jwt_decode_jwt_params import FlowActionJwtDecodeJwtParams
+
+
+class FlowActionJwtDecodeJwt(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["JWT"] = "JWT"
+ action: typing.Literal["DECODE_JWT"] = "DECODE_JWT"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionJwtDecodeJwtParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_jwt_decode_jwt_params.py b/src/auth0/management/types/flow_action_jwt_decode_jwt_params.py
new file mode 100644
index 00000000..0dc9381c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_jwt_decode_jwt_params.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionJwtDecodeJwtParams(UniversalBaseModel):
+ token: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_jwt_sign_jwt.py b/src/auth0/management/types/flow_action_jwt_sign_jwt.py
new file mode 100644
index 00000000..afcad722
--- /dev/null
+++ b/src/auth0/management/types/flow_action_jwt_sign_jwt.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_jwt_sign_jwt_params import FlowActionJwtSignJwtParams
+
+
+class FlowActionJwtSignJwt(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["JWT"] = "JWT"
+ action: typing.Literal["SIGN_JWT"] = "SIGN_JWT"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionJwtSignJwtParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_jwt_sign_jwt_params.py b/src/auth0/management/types/flow_action_jwt_sign_jwt_params.py
new file mode 100644
index 00000000..97bcb067
--- /dev/null
+++ b/src/auth0/management/types/flow_action_jwt_sign_jwt_params.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_jwt_sign_jwt_params_payload import FlowActionJwtSignJwtParamsPayload
+
+
+class FlowActionJwtSignJwtParams(UniversalBaseModel):
+ connection_id: str
+ payload: typing.Optional[FlowActionJwtSignJwtParamsPayload] = None
+ subject: typing.Optional[str] = None
+ issuer: typing.Optional[str] = None
+ audience: typing.Optional[str] = None
+ expires_in: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_jwt_sign_jwt_params_payload.py b/src/auth0/management/types/flow_action_jwt_sign_jwt_params_payload.py
new file mode 100644
index 00000000..a05cafa9
--- /dev/null
+++ b/src/auth0/management/types/flow_action_jwt_sign_jwt_params_payload.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionJwtSignJwtParamsPayload = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_jwt_verify_jwt.py b/src/auth0/management/types/flow_action_jwt_verify_jwt.py
new file mode 100644
index 00000000..a7cd7e45
--- /dev/null
+++ b/src/auth0/management/types/flow_action_jwt_verify_jwt.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_jwt_verify_jwt_params import FlowActionJwtVerifyJwtParams
+
+
+class FlowActionJwtVerifyJwt(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["JWT"] = "JWT"
+ action: typing.Literal["VERIFY_JWT"] = "VERIFY_JWT"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionJwtVerifyJwtParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_jwt_verify_jwt_params.py b/src/auth0/management/types/flow_action_jwt_verify_jwt_params.py
new file mode 100644
index 00000000..65517f6d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_jwt_verify_jwt_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionJwtVerifyJwtParams(UniversalBaseModel):
+ connection_id: str
+ token: str
+ audience: typing.Optional[str] = None
+ issuer: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_mailchimp.py b/src/auth0/management/types/flow_action_mailchimp.py
new file mode 100644
index 00000000..15138995
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailchimp.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_mailchimp_upsert_member import FlowActionMailchimpUpsertMember
+
+FlowActionMailchimp = FlowActionMailchimpUpsertMember
diff --git a/src/auth0/management/types/flow_action_mailchimp_upsert_member.py b/src/auth0/management/types/flow_action_mailchimp_upsert_member.py
new file mode 100644
index 00000000..369e4e33
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailchimp_upsert_member.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_mailchimp_upsert_member_params import FlowActionMailchimpUpsertMemberParams
+
+
+class FlowActionMailchimpUpsertMember(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["MAILCHIMP"] = "MAILCHIMP"
+ action: typing.Literal["UPSERT_MEMBER"] = "UPSERT_MEMBER"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionMailchimpUpsertMemberParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_mailchimp_upsert_member_params.py b/src/auth0/management/types/flow_action_mailchimp_upsert_member_params.py
new file mode 100644
index 00000000..f1595295
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailchimp_upsert_member_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_mailchimp_upsert_member_params_member import FlowActionMailchimpUpsertMemberParamsMember
+
+
+class FlowActionMailchimpUpsertMemberParams(UniversalBaseModel):
+ connection_id: str
+ list_id: str
+ member: FlowActionMailchimpUpsertMemberParamsMember
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_mailchimp_upsert_member_params_member.py b/src/auth0/management/types/flow_action_mailchimp_upsert_member_params_member.py
new file mode 100644
index 00000000..ea0e8736
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailchimp_upsert_member_params_member.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_mailchimp_upsert_member_params_member_merge_fields import (
+ FlowActionMailchimpUpsertMemberParamsMemberMergeFields,
+)
+
+
+class FlowActionMailchimpUpsertMemberParamsMember(UniversalBaseModel):
+ email_address: str
+ status_if_new: str
+ merge_fields: typing.Optional[FlowActionMailchimpUpsertMemberParamsMemberMergeFields] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_mailchimp_upsert_member_params_member_merge_fields.py b/src/auth0/management/types/flow_action_mailchimp_upsert_member_params_member_merge_fields.py
new file mode 100644
index 00000000..4bbb1499
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailchimp_upsert_member_params_member_merge_fields.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionMailchimpUpsertMemberParamsMemberMergeFields = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_mailjet.py b/src/auth0/management/types/flow_action_mailjet.py
new file mode 100644
index 00000000..7edb9d7c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailjet.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_mailjet_send_email import FlowActionMailjetSendEmail
+
+FlowActionMailjet = FlowActionMailjetSendEmail
diff --git a/src/auth0/management/types/flow_action_mailjet_send_email.py b/src/auth0/management/types/flow_action_mailjet_send_email.py
new file mode 100644
index 00000000..4c1727e7
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailjet_send_email.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_mailjet_send_email_params import FlowActionMailjetSendEmailParams
+
+
+class FlowActionMailjetSendEmail(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["MAILJET"] = "MAILJET"
+ action: typing.Literal["SEND_EMAIL"] = "SEND_EMAIL"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionMailjetSendEmailParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_mailjet_send_email_params.py b/src/auth0/management/types/flow_action_mailjet_send_email_params.py
new file mode 100644
index 00000000..f28b6d02
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailjet_send_email_params.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_mailjet_send_email_params_content import FlowActionMailjetSendEmailParamsContent
+from .flow_action_mailjet_send_email_params_template_id import FlowActionMailjetSendEmailParamsTemplateId
+
+FlowActionMailjetSendEmailParams = typing.Union[
+ FlowActionMailjetSendEmailParamsContent, FlowActionMailjetSendEmailParamsTemplateId
+]
diff --git a/src/auth0/management/types/flow_action_mailjet_send_email_params_content.py b/src/auth0/management/types/flow_action_mailjet_send_email_params_content.py
new file mode 100644
index 00000000..a935e2ae
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailjet_send_email_params_content.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionMailjetSendEmailParamsContent(UniversalBaseModel):
+ content: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_mailjet_send_email_params_template_id.py b/src/auth0/management/types/flow_action_mailjet_send_email_params_template_id.py
new file mode 100644
index 00000000..43a4e1ae
--- /dev/null
+++ b/src/auth0/management/types/flow_action_mailjet_send_email_params_template_id.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionMailjetSendEmailParamsTemplateId(UniversalBaseModel):
+ template_id: int
+ variables: typing.Optional[typing.Dict[str, typing.Any]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_otp.py b/src/auth0/management/types/flow_action_otp.py
new file mode 100644
index 00000000..fe899eb9
--- /dev/null
+++ b/src/auth0/management/types/flow_action_otp.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_otp_generate_code import FlowActionOtpGenerateCode
+from .flow_action_otp_verify_code import FlowActionOtpVerifyCode
+
+FlowActionOtp = typing.Union[FlowActionOtpGenerateCode, FlowActionOtpVerifyCode]
diff --git a/src/auth0/management/types/flow_action_otp_generate_code.py b/src/auth0/management/types/flow_action_otp_generate_code.py
new file mode 100644
index 00000000..e85a3665
--- /dev/null
+++ b/src/auth0/management/types/flow_action_otp_generate_code.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_otp_generate_code_params import FlowActionOtpGenerateCodeParams
+
+
+class FlowActionOtpGenerateCode(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["OTP"] = "OTP"
+ action: typing.Literal["GENERATE_CODE"] = "GENERATE_CODE"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionOtpGenerateCodeParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_otp_generate_code_params.py b/src/auth0/management/types/flow_action_otp_generate_code_params.py
new file mode 100644
index 00000000..d91aef65
--- /dev/null
+++ b/src/auth0/management/types/flow_action_otp_generate_code_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionOtpGenerateCodeParams(UniversalBaseModel):
+ reference: str
+ length: int
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_otp_verify_code.py b/src/auth0/management/types/flow_action_otp_verify_code.py
new file mode 100644
index 00000000..c86479d9
--- /dev/null
+++ b/src/auth0/management/types/flow_action_otp_verify_code.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_otp_verify_code_params import FlowActionOtpVerifyCodeParams
+
+
+class FlowActionOtpVerifyCode(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["OTP"] = "OTP"
+ action: typing.Literal["VERIFY_CODE"] = "VERIFY_CODE"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionOtpVerifyCodeParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_otp_verify_code_params.py b/src/auth0/management/types/flow_action_otp_verify_code_params.py
new file mode 100644
index 00000000..8d516326
--- /dev/null
+++ b/src/auth0/management/types/flow_action_otp_verify_code_params.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_otp_verify_code_params_code import FlowActionOtpVerifyCodeParamsCode
+
+
+class FlowActionOtpVerifyCodeParams(UniversalBaseModel):
+ reference: str
+ code: FlowActionOtpVerifyCodeParamsCode
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_otp_verify_code_params_code.py b/src/auth0/management/types/flow_action_otp_verify_code_params_code.py
new file mode 100644
index 00000000..8b95299f
--- /dev/null
+++ b/src/auth0/management/types/flow_action_otp_verify_code_params_code.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionOtpVerifyCodeParamsCode = typing.Union[int, str]
diff --git a/src/auth0/management/types/flow_action_pipedrive.py b/src/auth0/management/types/flow_action_pipedrive.py
new file mode 100644
index 00000000..57a4fe41
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_pipedrive_add_deal import FlowActionPipedriveAddDeal
+from .flow_action_pipedrive_add_organization import FlowActionPipedriveAddOrganization
+from .flow_action_pipedrive_add_person import FlowActionPipedriveAddPerson
+
+FlowActionPipedrive = typing.Union[
+ FlowActionPipedriveAddDeal, FlowActionPipedriveAddOrganization, FlowActionPipedriveAddPerson
+]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_deal.py b/src/auth0/management/types/flow_action_pipedrive_add_deal.py
new file mode 100644
index 00000000..67efc24d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_deal.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_pipedrive_add_deal_params import FlowActionPipedriveAddDealParams
+
+
+class FlowActionPipedriveAddDeal(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["PIPEDRIVE"] = "PIPEDRIVE"
+ action: typing.Literal["ADD_DEAL"] = "ADD_DEAL"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionPipedriveAddDealParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_deal_params.py b/src/auth0/management/types/flow_action_pipedrive_add_deal_params.py
new file mode 100644
index 00000000..903c9267
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_deal_params.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_pipedrive_add_deal_params_fields import FlowActionPipedriveAddDealParamsFields
+from .flow_action_pipedrive_add_deal_params_organization_id import FlowActionPipedriveAddDealParamsOrganizationId
+from .flow_action_pipedrive_add_deal_params_person_id import FlowActionPipedriveAddDealParamsPersonId
+from .flow_action_pipedrive_add_deal_params_stage_id import FlowActionPipedriveAddDealParamsStageId
+from .flow_action_pipedrive_add_deal_params_user_id import FlowActionPipedriveAddDealParamsUserId
+
+
+class FlowActionPipedriveAddDealParams(UniversalBaseModel):
+ connection_id: str
+ title: str
+ value: typing.Optional[str] = None
+ user_id: typing.Optional[FlowActionPipedriveAddDealParamsUserId] = None
+ person_id: typing.Optional[FlowActionPipedriveAddDealParamsPersonId] = None
+ organization_id: typing.Optional[FlowActionPipedriveAddDealParamsOrganizationId] = None
+ stage_id: typing.Optional[FlowActionPipedriveAddDealParamsStageId] = None
+ fields: typing.Optional[FlowActionPipedriveAddDealParamsFields] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_deal_params_fields.py b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_fields.py
new file mode 100644
index 00000000..425381f0
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_fields.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddDealParamsFields = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_deal_params_organization_id.py b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_organization_id.py
new file mode 100644
index 00000000..0cab9354
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_organization_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddDealParamsOrganizationId = typing.Union[str, float]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_deal_params_person_id.py b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_person_id.py
new file mode 100644
index 00000000..3fb603dd
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_person_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddDealParamsPersonId = typing.Union[str, float]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_deal_params_stage_id.py b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_stage_id.py
new file mode 100644
index 00000000..3412010c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_stage_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddDealParamsStageId = typing.Union[str, float]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_deal_params_user_id.py b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_user_id.py
new file mode 100644
index 00000000..5f19888f
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_deal_params_user_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddDealParamsUserId = typing.Union[str, float]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_organization.py b/src/auth0/management/types/flow_action_pipedrive_add_organization.py
new file mode 100644
index 00000000..6720c936
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_organization.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_pipedrive_add_organization_params import FlowActionPipedriveAddOrganizationParams
+
+
+class FlowActionPipedriveAddOrganization(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["PIPEDRIVE"] = "PIPEDRIVE"
+ action: typing.Literal["ADD_ORGANIZATION"] = "ADD_ORGANIZATION"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionPipedriveAddOrganizationParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_organization_params.py b/src/auth0/management/types/flow_action_pipedrive_add_organization_params.py
new file mode 100644
index 00000000..ed0dfdb5
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_organization_params.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_pipedrive_add_organization_params_fields import FlowActionPipedriveAddOrganizationParamsFields
+from .flow_action_pipedrive_add_organization_params_owner_id import FlowActionPipedriveAddOrganizationParamsOwnerId
+
+
+class FlowActionPipedriveAddOrganizationParams(UniversalBaseModel):
+ connection_id: str
+ name: str
+ owner_id: typing.Optional[FlowActionPipedriveAddOrganizationParamsOwnerId] = None
+ fields: typing.Optional[FlowActionPipedriveAddOrganizationParamsFields] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_organization_params_fields.py b/src/auth0/management/types/flow_action_pipedrive_add_organization_params_fields.py
new file mode 100644
index 00000000..9ab8bc0b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_organization_params_fields.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddOrganizationParamsFields = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_organization_params_owner_id.py b/src/auth0/management/types/flow_action_pipedrive_add_organization_params_owner_id.py
new file mode 100644
index 00000000..698b4757
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_organization_params_owner_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddOrganizationParamsOwnerId = typing.Union[str, float]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_person.py b/src/auth0/management/types/flow_action_pipedrive_add_person.py
new file mode 100644
index 00000000..5dc11dd3
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_person.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_pipedrive_add_person_params import FlowActionPipedriveAddPersonParams
+
+
+class FlowActionPipedriveAddPerson(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["PIPEDRIVE"] = "PIPEDRIVE"
+ action: typing.Literal["ADD_PERSON"] = "ADD_PERSON"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionPipedriveAddPersonParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_person_params.py b/src/auth0/management/types/flow_action_pipedrive_add_person_params.py
new file mode 100644
index 00000000..23e761a7
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_person_params.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_pipedrive_add_person_params_fields import FlowActionPipedriveAddPersonParamsFields
+from .flow_action_pipedrive_add_person_params_organization_id import FlowActionPipedriveAddPersonParamsOrganizationId
+from .flow_action_pipedrive_add_person_params_owner_id import FlowActionPipedriveAddPersonParamsOwnerId
+
+
+class FlowActionPipedriveAddPersonParams(UniversalBaseModel):
+ connection_id: str
+ name: str
+ email: typing.Optional[str] = None
+ phone: typing.Optional[str] = None
+ owner_id: typing.Optional[FlowActionPipedriveAddPersonParamsOwnerId] = None
+ organization_id: typing.Optional[FlowActionPipedriveAddPersonParamsOrganizationId] = None
+ fields: typing.Optional[FlowActionPipedriveAddPersonParamsFields] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_person_params_fields.py b/src/auth0/management/types/flow_action_pipedrive_add_person_params_fields.py
new file mode 100644
index 00000000..6fed663d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_person_params_fields.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddPersonParamsFields = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_person_params_organization_id.py b/src/auth0/management/types/flow_action_pipedrive_add_person_params_organization_id.py
new file mode 100644
index 00000000..f07c2511
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_person_params_organization_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddPersonParamsOrganizationId = typing.Union[str, float]
diff --git a/src/auth0/management/types/flow_action_pipedrive_add_person_params_owner_id.py b/src/auth0/management/types/flow_action_pipedrive_add_person_params_owner_id.py
new file mode 100644
index 00000000..f001cb35
--- /dev/null
+++ b/src/auth0/management/types/flow_action_pipedrive_add_person_params_owner_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionPipedriveAddPersonParamsOwnerId = typing.Union[str, float]
diff --git a/src/auth0/management/types/flow_action_salesforce.py b/src/auth0/management/types/flow_action_salesforce.py
new file mode 100644
index 00000000..bc011e8b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce.py
@@ -0,0 +1,15 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_salesforce_create_lead import FlowActionSalesforceCreateLead
+from .flow_action_salesforce_get_lead import FlowActionSalesforceGetLead
+from .flow_action_salesforce_search_leads import FlowActionSalesforceSearchLeads
+from .flow_action_salesforce_update_lead import FlowActionSalesforceUpdateLead
+
+FlowActionSalesforce = typing.Union[
+ FlowActionSalesforceCreateLead,
+ FlowActionSalesforceGetLead,
+ FlowActionSalesforceSearchLeads,
+ FlowActionSalesforceUpdateLead,
+]
diff --git a/src/auth0/management/types/flow_action_salesforce_create_lead.py b/src/auth0/management/types/flow_action_salesforce_create_lead.py
new file mode 100644
index 00000000..a768d954
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_create_lead.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_salesforce_create_lead_params import FlowActionSalesforceCreateLeadParams
+
+
+class FlowActionSalesforceCreateLead(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["SALESFORCE"] = "SALESFORCE"
+ action: typing.Literal["CREATE_LEAD"] = "CREATE_LEAD"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionSalesforceCreateLeadParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_salesforce_create_lead_params.py b/src/auth0/management/types/flow_action_salesforce_create_lead_params.py
new file mode 100644
index 00000000..2af872d0
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_create_lead_params.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_salesforce_create_lead_params_payload import FlowActionSalesforceCreateLeadParamsPayload
+
+
+class FlowActionSalesforceCreateLeadParams(UniversalBaseModel):
+ connection_id: str
+ first_name: typing.Optional[str] = None
+ last_name: str
+ company: str
+ email: typing.Optional[str] = None
+ phone: typing.Optional[str] = None
+ payload: typing.Optional[FlowActionSalesforceCreateLeadParamsPayload] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_salesforce_create_lead_params_payload.py b/src/auth0/management/types/flow_action_salesforce_create_lead_params_payload.py
new file mode 100644
index 00000000..673673ac
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_create_lead_params_payload.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionSalesforceCreateLeadParamsPayload = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_salesforce_get_lead.py b/src/auth0/management/types/flow_action_salesforce_get_lead.py
new file mode 100644
index 00000000..058c12d4
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_get_lead.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_salesforce_get_lead_params import FlowActionSalesforceGetLeadParams
+
+
+class FlowActionSalesforceGetLead(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["SALESFORCE"] = "SALESFORCE"
+ action: typing.Literal["GET_LEAD"] = "GET_LEAD"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionSalesforceGetLeadParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_salesforce_get_lead_params.py b/src/auth0/management/types/flow_action_salesforce_get_lead_params.py
new file mode 100644
index 00000000..638e1f75
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_get_lead_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionSalesforceGetLeadParams(UniversalBaseModel):
+ connection_id: str
+ lead_id: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_salesforce_search_leads.py b/src/auth0/management/types/flow_action_salesforce_search_leads.py
new file mode 100644
index 00000000..f0a77682
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_search_leads.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_salesforce_search_leads_params import FlowActionSalesforceSearchLeadsParams
+
+
+class FlowActionSalesforceSearchLeads(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["SALESFORCE"] = "SALESFORCE"
+ action: typing.Literal["SEARCH_LEADS"] = "SEARCH_LEADS"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionSalesforceSearchLeadsParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_salesforce_search_leads_params.py b/src/auth0/management/types/flow_action_salesforce_search_leads_params.py
new file mode 100644
index 00000000..b73c5a92
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_search_leads_params.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_salesforce_search_leads_params_search_field import FlowActionSalesforceSearchLeadsParamsSearchField
+
+
+class FlowActionSalesforceSearchLeadsParams(UniversalBaseModel):
+ connection_id: str
+ search_field: FlowActionSalesforceSearchLeadsParamsSearchField
+ search_value: str
+ lead_fields: typing.List[str]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_salesforce_search_leads_params_search_field.py b/src/auth0/management/types/flow_action_salesforce_search_leads_params_search_field.py
new file mode 100644
index 00000000..872cb066
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_search_leads_params_search_field.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionSalesforceSearchLeadsParamsSearchField = typing.Union[
+ typing.Literal["email", "name", "phone", "all"], typing.Any
+]
diff --git a/src/auth0/management/types/flow_action_salesforce_update_lead.py b/src/auth0/management/types/flow_action_salesforce_update_lead.py
new file mode 100644
index 00000000..19500e2b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_update_lead.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_salesforce_update_lead_params import FlowActionSalesforceUpdateLeadParams
+
+
+class FlowActionSalesforceUpdateLead(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["SALESFORCE"] = "SALESFORCE"
+ action: typing.Literal["UPDATE_LEAD"] = "UPDATE_LEAD"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionSalesforceUpdateLeadParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_salesforce_update_lead_params.py b/src/auth0/management/types/flow_action_salesforce_update_lead_params.py
new file mode 100644
index 00000000..f1f4a967
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_update_lead_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_salesforce_update_lead_params_payload import FlowActionSalesforceUpdateLeadParamsPayload
+
+
+class FlowActionSalesforceUpdateLeadParams(UniversalBaseModel):
+ connection_id: str
+ lead_id: str
+ payload: typing.Optional[FlowActionSalesforceUpdateLeadParamsPayload] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_salesforce_update_lead_params_payload.py b/src/auth0/management/types/flow_action_salesforce_update_lead_params_payload.py
new file mode 100644
index 00000000..f86a244c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_salesforce_update_lead_params_payload.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionSalesforceUpdateLeadParamsPayload = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_sendgrid.py b/src/auth0/management/types/flow_action_sendgrid.py
new file mode 100644
index 00000000..62678770
--- /dev/null
+++ b/src/auth0/management/types/flow_action_sendgrid.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_sendgrid_send_email import FlowActionSendgridSendEmail
+
+FlowActionSendgrid = FlowActionSendgridSendEmail
diff --git a/src/auth0/management/types/flow_action_sendgrid_send_email.py b/src/auth0/management/types/flow_action_sendgrid_send_email.py
new file mode 100644
index 00000000..121cbaa8
--- /dev/null
+++ b/src/auth0/management/types/flow_action_sendgrid_send_email.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_sendgrid_send_email_params import FlowActionSendgridSendEmailParams
+
+
+class FlowActionSendgridSendEmail(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["SENDGRID"] = "SENDGRID"
+ action: typing.Literal["SEND_EMAIL"] = "SEND_EMAIL"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionSendgridSendEmailParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_sendgrid_send_email_params.py b/src/auth0/management/types/flow_action_sendgrid_send_email_params.py
new file mode 100644
index 00000000..63cb457e
--- /dev/null
+++ b/src/auth0/management/types/flow_action_sendgrid_send_email_params.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .flow_action_sendgrid_send_email_params_person import FlowActionSendgridSendEmailParamsPerson
+
+
+class FlowActionSendgridSendEmailParams(UniversalBaseModel):
+ connection_id: str
+ from_: typing_extensions.Annotated[FlowActionSendgridSendEmailParamsPerson, FieldMetadata(alias="from")]
+ personalizations: typing.List[typing.Any]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_sendgrid_send_email_params_person.py b/src/auth0/management/types/flow_action_sendgrid_send_email_params_person.py
new file mode 100644
index 00000000..bad5cb33
--- /dev/null
+++ b/src/auth0/management/types/flow_action_sendgrid_send_email_params_person.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionSendgridSendEmailParamsPerson(UniversalBaseModel):
+ name: typing.Optional[str] = None
+ email: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_slack.py b/src/auth0/management/types/flow_action_slack.py
new file mode 100644
index 00000000..7ac9bfb9
--- /dev/null
+++ b/src/auth0/management/types/flow_action_slack.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_slack_post_message import FlowActionSlackPostMessage
+
+FlowActionSlack = FlowActionSlackPostMessage
diff --git a/src/auth0/management/types/flow_action_slack_post_message.py b/src/auth0/management/types/flow_action_slack_post_message.py
new file mode 100644
index 00000000..1fe98285
--- /dev/null
+++ b/src/auth0/management/types/flow_action_slack_post_message.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_slack_post_message_params import FlowActionSlackPostMessageParams
+
+
+class FlowActionSlackPostMessage(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["SLACK"] = "SLACK"
+ action: typing.Literal["POST_MESSAGE"] = "POST_MESSAGE"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionSlackPostMessageParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_slack_post_message_params.py b/src/auth0/management/types/flow_action_slack_post_message_params.py
new file mode 100644
index 00000000..66a27e2a
--- /dev/null
+++ b/src/auth0/management/types/flow_action_slack_post_message_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_slack_post_message_params_attachment import FlowActionSlackPostMessageParamsAttachment
+
+
+class FlowActionSlackPostMessageParams(UniversalBaseModel):
+ connection_id: str
+ text: typing.Optional[str] = None
+ attachments: typing.Optional[typing.List[FlowActionSlackPostMessageParamsAttachment]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_slack_post_message_params_attachment.py b/src/auth0/management/types/flow_action_slack_post_message_params_attachment.py
new file mode 100644
index 00000000..0d8bd71a
--- /dev/null
+++ b/src/auth0/management/types/flow_action_slack_post_message_params_attachment.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_slack_post_message_params_attachment_color import FlowActionSlackPostMessageParamsAttachmentColor
+from .flow_action_slack_post_message_params_attachment_field import FlowActionSlackPostMessageParamsAttachmentField
+
+
+class FlowActionSlackPostMessageParamsAttachment(UniversalBaseModel):
+ color: typing.Optional[FlowActionSlackPostMessageParamsAttachmentColor] = None
+ pretext: typing.Optional[str] = None
+ text: typing.Optional[str] = None
+ fields: typing.Optional[typing.List[FlowActionSlackPostMessageParamsAttachmentField]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_slack_post_message_params_attachment_color.py b/src/auth0/management/types/flow_action_slack_post_message_params_attachment_color.py
new file mode 100644
index 00000000..6e9d43ff
--- /dev/null
+++ b/src/auth0/management/types/flow_action_slack_post_message_params_attachment_color.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionSlackPostMessageParamsAttachmentColor = typing.Union[typing.Literal["GOOD", "WARNING", "DANGER"], typing.Any]
diff --git a/src/auth0/management/types/flow_action_slack_post_message_params_attachment_field.py b/src/auth0/management/types/flow_action_slack_post_message_params_attachment_field.py
new file mode 100644
index 00000000..3cdf846f
--- /dev/null
+++ b/src/auth0/management/types/flow_action_slack_post_message_params_attachment_field.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionSlackPostMessageParamsAttachmentField(UniversalBaseModel):
+ title: str
+ value: typing.Optional[str] = None
+ short: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe.py b/src/auth0/management/types/flow_action_stripe.py
new file mode 100644
index 00000000..f5e81146
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_stripe_add_tax_id import FlowActionStripeAddTaxId
+from .flow_action_stripe_create_customer import FlowActionStripeCreateCustomer
+from .flow_action_stripe_create_portal_session import FlowActionStripeCreatePortalSession
+from .flow_action_stripe_delete_tax_id import FlowActionStripeDeleteTaxId
+from .flow_action_stripe_find_customers import FlowActionStripeFindCustomers
+from .flow_action_stripe_get_customer import FlowActionStripeGetCustomer
+from .flow_action_stripe_update_customer import FlowActionStripeUpdateCustomer
+
+FlowActionStripe = typing.Union[
+ FlowActionStripeAddTaxId,
+ FlowActionStripeCreateCustomer,
+ FlowActionStripeCreatePortalSession,
+ FlowActionStripeDeleteTaxId,
+ FlowActionStripeFindCustomers,
+ FlowActionStripeGetCustomer,
+ FlowActionStripeUpdateCustomer,
+]
diff --git a/src/auth0/management/types/flow_action_stripe_add_tax_id.py b/src/auth0/management/types/flow_action_stripe_add_tax_id.py
new file mode 100644
index 00000000..4147abee
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_add_tax_id.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_stripe_add_tax_id_params import FlowActionStripeAddTaxIdParams
+
+
+class FlowActionStripeAddTaxId(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["STRIPE"] = "STRIPE"
+ action: typing.Literal["ADD_TAX_ID"] = "ADD_TAX_ID"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionStripeAddTaxIdParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_add_tax_id_params.py b/src/auth0/management/types/flow_action_stripe_add_tax_id_params.py
new file mode 100644
index 00000000..4aaa2830
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_add_tax_id_params.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionStripeAddTaxIdParams(UniversalBaseModel):
+ connection_id: str
+ customer_id: str
+ type: str
+ value: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_address.py b/src/auth0/management/types/flow_action_stripe_address.py
new file mode 100644
index 00000000..63427835
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_address.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class FlowActionStripeAddress(UniversalBaseModel):
+ line_1: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="line1")] = None
+ line_2: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="line2")] = None
+ postal_code: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="postalCode")] = None
+ city: typing.Optional[str] = None
+ state: typing.Optional[str] = None
+ country: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_create_customer.py b/src/auth0/management/types/flow_action_stripe_create_customer.py
new file mode 100644
index 00000000..64f2e5bd
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_create_customer.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_stripe_create_customer_params import FlowActionStripeCreateCustomerParams
+
+
+class FlowActionStripeCreateCustomer(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["STRIPE"] = "STRIPE"
+ action: typing.Literal["CREATE_CUSTOMER"] = "CREATE_CUSTOMER"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionStripeCreateCustomerParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_create_customer_params.py b/src/auth0/management/types/flow_action_stripe_create_customer_params.py
new file mode 100644
index 00000000..5be88503
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_create_customer_params.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_stripe_address import FlowActionStripeAddress
+from .flow_action_stripe_metadata import FlowActionStripeMetadata
+from .flow_action_stripe_tax_id import FlowActionStripeTaxId
+
+
+class FlowActionStripeCreateCustomerParams(UniversalBaseModel):
+ connection_id: str
+ tax_id: typing.Optional[FlowActionStripeTaxId] = None
+ name: typing.Optional[str] = None
+ description: typing.Optional[str] = None
+ email: typing.Optional[str] = None
+ phone: typing.Optional[str] = None
+ tax_exempt: typing.Optional[str] = None
+ address: typing.Optional[FlowActionStripeAddress] = None
+ metadata: typing.Optional[FlowActionStripeMetadata] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_create_portal_session.py b/src/auth0/management/types/flow_action_stripe_create_portal_session.py
new file mode 100644
index 00000000..47df0acd
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_create_portal_session.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_stripe_create_portal_session_params import FlowActionStripeCreatePortalSessionParams
+
+
+class FlowActionStripeCreatePortalSession(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["STRIPE"] = "STRIPE"
+ action: typing.Literal["CREATE_PORTAL_SESSION"] = "CREATE_PORTAL_SESSION"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionStripeCreatePortalSessionParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_create_portal_session_params.py b/src/auth0/management/types/flow_action_stripe_create_portal_session_params.py
new file mode 100644
index 00000000..488ebdb3
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_create_portal_session_params.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionStripeCreatePortalSessionParams(UniversalBaseModel):
+ connection_id: str
+ customer_id: str
+ return_url: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_delete_tax_id.py b/src/auth0/management/types/flow_action_stripe_delete_tax_id.py
new file mode 100644
index 00000000..ac143f20
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_delete_tax_id.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_stripe_delete_tax_id_params import FlowActionStripeDeleteTaxIdParams
+
+
+class FlowActionStripeDeleteTaxId(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["STRIPE"] = "STRIPE"
+ action: typing.Literal["DELETE_TAX_ID"] = "DELETE_TAX_ID"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionStripeDeleteTaxIdParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_delete_tax_id_params.py b/src/auth0/management/types/flow_action_stripe_delete_tax_id_params.py
new file mode 100644
index 00000000..b40fb4cf
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_delete_tax_id_params.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionStripeDeleteTaxIdParams(UniversalBaseModel):
+ connection_id: str
+ customer_id: str
+ id: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_find_customers.py b/src/auth0/management/types/flow_action_stripe_find_customers.py
new file mode 100644
index 00000000..d576a224
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_find_customers.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_stripe_find_customers_params import FlowActionStripeFindCustomersParams
+
+
+class FlowActionStripeFindCustomers(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["STRIPE"] = "STRIPE"
+ action: typing.Literal["FIND_CUSTOMERS"] = "FIND_CUSTOMERS"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionStripeFindCustomersParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_find_customers_params.py b/src/auth0/management/types/flow_action_stripe_find_customers_params.py
new file mode 100644
index 00000000..16712015
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_find_customers_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionStripeFindCustomersParams(UniversalBaseModel):
+ connection_id: str
+ email: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_get_customer.py b/src/auth0/management/types/flow_action_stripe_get_customer.py
new file mode 100644
index 00000000..6ce61130
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_get_customer.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_stripe_get_customer_params import FlowActionStripeGetCustomerParams
+
+
+class FlowActionStripeGetCustomer(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["STRIPE"] = "STRIPE"
+ action: typing.Literal["GET_CUSTOMER"] = "GET_CUSTOMER"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionStripeGetCustomerParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_get_customer_params.py b/src/auth0/management/types/flow_action_stripe_get_customer_params.py
new file mode 100644
index 00000000..862696bd
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_get_customer_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionStripeGetCustomerParams(UniversalBaseModel):
+ connection_id: str
+ id: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_metadata.py b/src/auth0/management/types/flow_action_stripe_metadata.py
new file mode 100644
index 00000000..cfd3d6c6
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionStripeMetadata = typing.Dict[str, str]
diff --git a/src/auth0/management/types/flow_action_stripe_tax_id.py b/src/auth0/management/types/flow_action_stripe_tax_id.py
new file mode 100644
index 00000000..320ecf7a
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_tax_id.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionStripeTaxId(UniversalBaseModel):
+ type: str
+ value: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_update_customer.py b/src/auth0/management/types/flow_action_stripe_update_customer.py
new file mode 100644
index 00000000..9f2b256a
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_update_customer.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_stripe_update_customer_params import FlowActionStripeUpdateCustomerParams
+
+
+class FlowActionStripeUpdateCustomer(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["STRIPE"] = "STRIPE"
+ action: typing.Literal["UPDATE_CUSTOMER"] = "UPDATE_CUSTOMER"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionStripeUpdateCustomerParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_stripe_update_customer_params.py b/src/auth0/management/types/flow_action_stripe_update_customer_params.py
new file mode 100644
index 00000000..159ef3b7
--- /dev/null
+++ b/src/auth0/management/types/flow_action_stripe_update_customer_params.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_stripe_address import FlowActionStripeAddress
+from .flow_action_stripe_metadata import FlowActionStripeMetadata
+
+
+class FlowActionStripeUpdateCustomerParams(UniversalBaseModel):
+ connection_id: str
+ id: str
+ name: typing.Optional[str] = None
+ description: typing.Optional[str] = None
+ email: typing.Optional[str] = None
+ phone: typing.Optional[str] = None
+ tax_exempt: typing.Optional[str] = None
+ address: typing.Optional[FlowActionStripeAddress] = None
+ metadata: typing.Optional[FlowActionStripeMetadata] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_telegram.py b/src/auth0/management/types/flow_action_telegram.py
new file mode 100644
index 00000000..e83d459d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_telegram.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_telegram_send_message import FlowActionTelegramSendMessage
+
+FlowActionTelegram = FlowActionTelegramSendMessage
diff --git a/src/auth0/management/types/flow_action_telegram_send_message.py b/src/auth0/management/types/flow_action_telegram_send_message.py
new file mode 100644
index 00000000..cb1a3e0c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_telegram_send_message.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_telegram_send_message_params import FlowActionTelegramSendMessageParams
+
+
+class FlowActionTelegramSendMessage(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["TELEGRAM"] = "TELEGRAM"
+ action: typing.Literal["SEND_MESSAGE"] = "SEND_MESSAGE"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionTelegramSendMessageParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_telegram_send_message_params.py b/src/auth0/management/types/flow_action_telegram_send_message_params.py
new file mode 100644
index 00000000..5791d300
--- /dev/null
+++ b/src/auth0/management/types/flow_action_telegram_send_message_params.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionTelegramSendMessageParams(UniversalBaseModel):
+ connection_id: str
+ chat_id: str
+ text: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_twilio.py b/src/auth0/management/types/flow_action_twilio.py
new file mode 100644
index 00000000..bd60346e
--- /dev/null
+++ b/src/auth0/management/types/flow_action_twilio.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_twilio_make_call import FlowActionTwilioMakeCall
+from .flow_action_twilio_send_sms import FlowActionTwilioSendSms
+
+FlowActionTwilio = typing.Union[FlowActionTwilioMakeCall, FlowActionTwilioSendSms]
diff --git a/src/auth0/management/types/flow_action_twilio_make_call.py b/src/auth0/management/types/flow_action_twilio_make_call.py
new file mode 100644
index 00000000..72a7151f
--- /dev/null
+++ b/src/auth0/management/types/flow_action_twilio_make_call.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_twilio_make_call_params import FlowActionTwilioMakeCallParams
+
+
+class FlowActionTwilioMakeCall(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["TWILIO"] = "TWILIO"
+ action: typing.Literal["MAKE_CALL"] = "MAKE_CALL"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionTwilioMakeCallParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_twilio_make_call_params.py b/src/auth0/management/types/flow_action_twilio_make_call_params.py
new file mode 100644
index 00000000..dd23dfb7
--- /dev/null
+++ b/src/auth0/management/types/flow_action_twilio_make_call_params.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class FlowActionTwilioMakeCallParams(UniversalBaseModel):
+ connection_id: str
+ from_: typing_extensions.Annotated[str, FieldMetadata(alias="from")]
+ to: str
+ payload: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_twilio_send_sms.py b/src/auth0/management/types/flow_action_twilio_send_sms.py
new file mode 100644
index 00000000..d025d681
--- /dev/null
+++ b/src/auth0/management/types/flow_action_twilio_send_sms.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_twilio_send_sms_params import FlowActionTwilioSendSmsParams
+
+
+class FlowActionTwilioSendSms(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["TWILIO"] = "TWILIO"
+ action: typing.Literal["SEND_SMS"] = "SEND_SMS"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionTwilioSendSmsParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_twilio_send_sms_params.py b/src/auth0/management/types/flow_action_twilio_send_sms_params.py
new file mode 100644
index 00000000..1c9d778e
--- /dev/null
+++ b/src/auth0/management/types/flow_action_twilio_send_sms_params.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class FlowActionTwilioSendSmsParams(UniversalBaseModel):
+ connection_id: str
+ from_: typing_extensions.Annotated[str, FieldMetadata(alias="from")]
+ to: str
+ message: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_whatsapp.py b/src/auth0/management/types/flow_action_whatsapp.py
new file mode 100644
index 00000000..23cc8fce
--- /dev/null
+++ b/src/auth0/management/types/flow_action_whatsapp.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_whatsapp_send_message import FlowActionWhatsappSendMessage
+
+FlowActionWhatsapp = FlowActionWhatsappSendMessage
diff --git a/src/auth0/management/types/flow_action_whatsapp_send_message.py b/src/auth0/management/types/flow_action_whatsapp_send_message.py
new file mode 100644
index 00000000..e7100eee
--- /dev/null
+++ b/src/auth0/management/types/flow_action_whatsapp_send_message.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_whatsapp_send_message_params import FlowActionWhatsappSendMessageParams
+
+
+class FlowActionWhatsappSendMessage(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["WHATSAPP"] = "WHATSAPP"
+ action: typing.Literal["SEND_MESSAGE"] = "SEND_MESSAGE"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionWhatsappSendMessageParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_whatsapp_send_message_params.py b/src/auth0/management/types/flow_action_whatsapp_send_message_params.py
new file mode 100644
index 00000000..fd82753e
--- /dev/null
+++ b/src/auth0/management/types/flow_action_whatsapp_send_message_params.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_whatsapp_send_message_params_payload import FlowActionWhatsappSendMessageParamsPayload
+from .flow_action_whatsapp_send_message_params_type import FlowActionWhatsappSendMessageParamsType
+
+
+class FlowActionWhatsappSendMessageParams(UniversalBaseModel):
+ connection_id: str
+ sender_id: str
+ recipient_number: str
+ type: FlowActionWhatsappSendMessageParamsType
+ payload: FlowActionWhatsappSendMessageParamsPayload
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_whatsapp_send_message_params_payload.py b/src/auth0/management/types/flow_action_whatsapp_send_message_params_payload.py
new file mode 100644
index 00000000..2f9c669f
--- /dev/null
+++ b/src/auth0/management/types/flow_action_whatsapp_send_message_params_payload.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_whatsapp_send_message_params_payload_object import FlowActionWhatsappSendMessageParamsPayloadObject
+
+FlowActionWhatsappSendMessageParamsPayload = typing.Union[FlowActionWhatsappSendMessageParamsPayloadObject, str]
diff --git a/src/auth0/management/types/flow_action_whatsapp_send_message_params_payload_object.py b/src/auth0/management/types/flow_action_whatsapp_send_message_params_payload_object.py
new file mode 100644
index 00000000..ab677252
--- /dev/null
+++ b/src/auth0/management/types/flow_action_whatsapp_send_message_params_payload_object.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionWhatsappSendMessageParamsPayloadObject = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_whatsapp_send_message_params_type.py b/src/auth0/management/types/flow_action_whatsapp_send_message_params_type.py
new file mode 100644
index 00000000..14cea946
--- /dev/null
+++ b/src/auth0/management/types/flow_action_whatsapp_send_message_params_type.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionWhatsappSendMessageParamsType = typing.Union[
+ typing.Literal["AUDIO", "CONTACTS", "DOCUMENT", "IMAGE", "INTERACTIVE", "LOCATION", "STICKER", "TEMPLATE", "TEXT"],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/flow_action_xml.py b/src/auth0/management/types/flow_action_xml.py
new file mode 100644
index 00000000..b5d6890c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_xml.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_xml_parse_xml import FlowActionXmlParseXml
+from .flow_action_xml_serialize_xml import FlowActionXmlSerializeXml
+
+FlowActionXml = typing.Union[FlowActionXmlParseXml, FlowActionXmlSerializeXml]
diff --git a/src/auth0/management/types/flow_action_xml_parse_xml.py b/src/auth0/management/types/flow_action_xml_parse_xml.py
new file mode 100644
index 00000000..96e942c1
--- /dev/null
+++ b/src/auth0/management/types/flow_action_xml_parse_xml.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_xml_parse_xml_params import FlowActionXmlParseXmlParams
+
+
+class FlowActionXmlParseXml(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["XML"] = "XML"
+ action: typing.Literal["PARSE_XML"] = "PARSE_XML"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionXmlParseXmlParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_xml_parse_xml_params.py b/src/auth0/management/types/flow_action_xml_parse_xml_params.py
new file mode 100644
index 00000000..9521b743
--- /dev/null
+++ b/src/auth0/management/types/flow_action_xml_parse_xml_params.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowActionXmlParseXmlParams(UniversalBaseModel):
+ xml: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_xml_serialize_xml.py b/src/auth0/management/types/flow_action_xml_serialize_xml.py
new file mode 100644
index 00000000..db48bf3c
--- /dev/null
+++ b/src/auth0/management/types/flow_action_xml_serialize_xml.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_xml_serialize_xml_params import FlowActionXmlSerializeXmlParams
+
+
+class FlowActionXmlSerializeXml(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["XML"] = "XML"
+ action: typing.Literal["SERIALIZE_XML"] = "SERIALIZE_XML"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionXmlSerializeXmlParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_xml_serialize_xml_params.py b/src/auth0/management/types/flow_action_xml_serialize_xml_params.py
new file mode 100644
index 00000000..bfdbab5b
--- /dev/null
+++ b/src/auth0/management/types/flow_action_xml_serialize_xml_params.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_xml_serialize_xml_params_object import FlowActionXmlSerializeXmlParamsObject
+
+
+class FlowActionXmlSerializeXmlParams(UniversalBaseModel):
+ object: FlowActionXmlSerializeXmlParamsObject
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_xml_serialize_xml_params_object.py b/src/auth0/management/types/flow_action_xml_serialize_xml_params_object.py
new file mode 100644
index 00000000..9917ff5a
--- /dev/null
+++ b/src/auth0/management/types/flow_action_xml_serialize_xml_params_object.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flow_action_xml_serialize_xml_params_object_object import FlowActionXmlSerializeXmlParamsObjectObject
+
+FlowActionXmlSerializeXmlParamsObject = typing.Union[str, FlowActionXmlSerializeXmlParamsObjectObject]
diff --git a/src/auth0/management/types/flow_action_xml_serialize_xml_params_object_object.py b/src/auth0/management/types/flow_action_xml_serialize_xml_params_object_object.py
new file mode 100644
index 00000000..8bd9aa08
--- /dev/null
+++ b/src/auth0/management/types/flow_action_xml_serialize_xml_params_object_object.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionXmlSerializeXmlParamsObjectObject = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_action_zapier.py b/src/auth0/management/types/flow_action_zapier.py
new file mode 100644
index 00000000..9583f18d
--- /dev/null
+++ b/src/auth0/management/types/flow_action_zapier.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .flow_action_zapier_trigger_webhook import FlowActionZapierTriggerWebhook
+
+FlowActionZapier = FlowActionZapierTriggerWebhook
diff --git a/src/auth0/management/types/flow_action_zapier_trigger_webhook.py b/src/auth0/management/types/flow_action_zapier_trigger_webhook.py
new file mode 100644
index 00000000..94c84030
--- /dev/null
+++ b/src/auth0/management/types/flow_action_zapier_trigger_webhook.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_zapier_trigger_webhook_params import FlowActionZapierTriggerWebhookParams
+
+
+class FlowActionZapierTriggerWebhook(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ type: typing.Literal["ZAPIER"] = "ZAPIER"
+ action: typing.Literal["TRIGGER_WEBHOOK"] = "TRIGGER_WEBHOOK"
+ allow_failure: typing.Optional[bool] = None
+ mask_output: typing.Optional[bool] = None
+ params: FlowActionZapierTriggerWebhookParams
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_zapier_trigger_webhook_params.py b/src/auth0/management/types/flow_action_zapier_trigger_webhook_params.py
new file mode 100644
index 00000000..606657c3
--- /dev/null
+++ b/src/auth0/management/types/flow_action_zapier_trigger_webhook_params.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_action_zapier_trigger_webhook_params_method import FlowActionZapierTriggerWebhookParamsMethod
+
+
+class FlowActionZapierTriggerWebhookParams(UniversalBaseModel):
+ connection_id: str
+ method: typing.Optional[FlowActionZapierTriggerWebhookParamsMethod] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_action_zapier_trigger_webhook_params_method.py b/src/auth0/management/types/flow_action_zapier_trigger_webhook_params_method.py
new file mode 100644
index 00000000..459ab0f8
--- /dev/null
+++ b/src/auth0/management/types/flow_action_zapier_trigger_webhook_params_method.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowActionZapierTriggerWebhookParamsMethod = typing.Union[typing.Literal["GET", "POST", "PUT"], typing.Any]
diff --git a/src/auth0/management/types/flow_execution_debug.py b/src/auth0/management/types/flow_execution_debug.py
new file mode 100644
index 00000000..4699a62d
--- /dev/null
+++ b/src/auth0/management/types/flow_execution_debug.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowExecutionDebug = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/flow_execution_summary.py b/src/auth0/management/types/flow_execution_summary.py
new file mode 100644
index 00000000..2ffe522c
--- /dev/null
+++ b/src/auth0/management/types/flow_execution_summary.py
@@ -0,0 +1,58 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowExecutionSummary(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Flow execution identifier
+ """
+
+ trace_id: str = pydantic.Field()
+ """
+ Trace id
+ """
+
+ journey_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Journey id
+ """
+
+ status: str = pydantic.Field()
+ """
+ Execution status
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this flow execution was created.
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this flow execution was updated.
+ """
+
+ started_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date when this flow execution started.
+ """
+
+ ended_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date when this flow execution ended.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flow_summary.py b/src/auth0/management/types/flow_summary.py
new file mode 100644
index 00000000..b0f060ee
--- /dev/null
+++ b/src/auth0/management/types/flow_summary.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowSummary(UniversalBaseModel):
+ id: str
+ name: str
+ created_at: dt.datetime
+ updated_at: dt.datetime
+ executed_at: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_api_key.py b/src/auth0/management/types/flows_vault_connectio_setup_api_key.py
new file mode 100644
index 00000000..c679df94
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_api_key.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_api_key_enum import FlowsVaultConnectioSetupTypeApiKeyEnum
+
+
+class FlowsVaultConnectioSetupApiKey(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeApiKeyEnum = "API_KEY"
+ api_key: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_api_key_with_base_url.py b/src/auth0/management/types/flows_vault_connectio_setup_api_key_with_base_url.py
new file mode 100644
index 00000000..e70c6d9c
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_api_key_with_base_url.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_api_key_enum import FlowsVaultConnectioSetupTypeApiKeyEnum
+
+
+class FlowsVaultConnectioSetupApiKeyWithBaseUrl(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeApiKeyEnum = "API_KEY"
+ api_key: str
+ base_url: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_bigquery_oauth_jwt.py b/src/auth0/management/types/flows_vault_connectio_setup_bigquery_oauth_jwt.py
new file mode 100644
index 00000000..c0d4097a
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_bigquery_oauth_jwt.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_oauth_jwt_enum import FlowsVaultConnectioSetupTypeOauthJwtEnum
+
+
+class FlowsVaultConnectioSetupBigqueryOauthJwt(UniversalBaseModel):
+ type: typing.Optional[FlowsVaultConnectioSetupTypeOauthJwtEnum] = None
+ project_id: typing.Optional[str] = None
+ private_key: typing.Optional[str] = None
+ client_email: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_http_bearer.py b/src/auth0/management/types/flows_vault_connectio_setup_http_bearer.py
new file mode 100644
index 00000000..22c35639
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_http_bearer.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_bearer_enum import FlowsVaultConnectioSetupTypeBearerEnum
+
+
+class FlowsVaultConnectioSetupHttpBearer(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeBearerEnum = "BEARER"
+ token: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_jwt.py b/src/auth0/management/types/flows_vault_connectio_setup_jwt.py
new file mode 100644
index 00000000..e56254b4
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_jwt.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_jwt_algorithm_enum import FlowsVaultConnectioSetupJwtAlgorithmEnum
+from .flows_vault_connectio_setup_type_jwt_enum import FlowsVaultConnectioSetupTypeJwtEnum
+
+
+class FlowsVaultConnectioSetupJwt(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeJwtEnum = "JWT"
+ algorithm: FlowsVaultConnectioSetupJwtAlgorithmEnum
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_jwt_algorithm_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_jwt_algorithm_enum.py
new file mode 100644
index 00000000..a9e0590a
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_jwt_algorithm_enum.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupJwtAlgorithmEnum = typing.Union[
+ typing.Literal[
+ "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "ES256", "ES384", "ES512", "PS256", "PS384", "PS512"
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_mailjet_api_key.py b/src/auth0/management/types/flows_vault_connectio_setup_mailjet_api_key.py
new file mode 100644
index 00000000..94fe0001
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_mailjet_api_key.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_api_key_enum import FlowsVaultConnectioSetupTypeApiKeyEnum
+
+
+class FlowsVaultConnectioSetupMailjetApiKey(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeApiKeyEnum = "API_KEY"
+ api_key: str
+ secret_key: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_oauth_app.py b/src/auth0/management/types/flows_vault_connectio_setup_oauth_app.py
new file mode 100644
index 00000000..3fe0e117
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_oauth_app.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_oauth_app_enum import FlowsVaultConnectioSetupTypeOauthAppEnum
+
+
+class FlowsVaultConnectioSetupOauthApp(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeOauthAppEnum = "OAUTH_APP"
+ client_id: str
+ client_secret: str
+ domain: str
+ audience: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_oauth_code.py b/src/auth0/management/types/flows_vault_connectio_setup_oauth_code.py
new file mode 100644
index 00000000..628e403d
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_oauth_code.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_oauth_code_enum import FlowsVaultConnectioSetupTypeOauthCodeEnum
+
+
+class FlowsVaultConnectioSetupOauthCode(UniversalBaseModel):
+ type: typing.Optional[FlowsVaultConnectioSetupTypeOauthCodeEnum] = None
+ code: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_secret_api_key.py b/src/auth0/management/types/flows_vault_connectio_setup_secret_api_key.py
new file mode 100644
index 00000000..8e7347d1
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_secret_api_key.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_api_key_enum import FlowsVaultConnectioSetupTypeApiKeyEnum
+
+
+class FlowsVaultConnectioSetupSecretApiKey(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeApiKeyEnum = "API_KEY"
+ secret_key: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_stripe_key_pair.py b/src/auth0/management/types/flows_vault_connectio_setup_stripe_key_pair.py
new file mode 100644
index 00000000..7f4cf29f
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_stripe_key_pair.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_key_pair_enum import FlowsVaultConnectioSetupTypeKeyPairEnum
+
+
+class FlowsVaultConnectioSetupStripeKeyPair(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeKeyPairEnum = "KEY_PAIR"
+ private_key: str
+ public_key: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_token.py b/src/auth0/management/types/flows_vault_connectio_setup_token.py
new file mode 100644
index 00000000..4744960a
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_token.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_token_enum import FlowsVaultConnectioSetupTypeTokenEnum
+
+
+class FlowsVaultConnectioSetupToken(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeTokenEnum = "TOKEN"
+ token: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_twilio_api_key.py b/src/auth0/management/types/flows_vault_connectio_setup_twilio_api_key.py
new file mode 100644
index 00000000..9dee40e6
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_twilio_api_key.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_api_key_enum import FlowsVaultConnectioSetupTypeApiKeyEnum
+
+
+class FlowsVaultConnectioSetupTwilioApiKey(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeApiKeyEnum = "API_KEY"
+ account_id: str
+ api_key: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_type_api_key_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_type_api_key_enum.py
new file mode 100644
index 00000000..3c3362a4
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_type_api_key_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupTypeApiKeyEnum = typing.Literal["API_KEY"]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_type_bearer_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_type_bearer_enum.py
new file mode 100644
index 00000000..467a1e3b
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_type_bearer_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupTypeBearerEnum = typing.Literal["BEARER"]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_type_jwt_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_type_jwt_enum.py
new file mode 100644
index 00000000..9aa6bf2b
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_type_jwt_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupTypeJwtEnum = typing.Literal["JWT"]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_type_key_pair_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_type_key_pair_enum.py
new file mode 100644
index 00000000..614187b5
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_type_key_pair_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupTypeKeyPairEnum = typing.Literal["KEY_PAIR"]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_type_oauth_app_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_type_oauth_app_enum.py
new file mode 100644
index 00000000..d41ef949
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_type_oauth_app_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupTypeOauthAppEnum = typing.Literal["OAUTH_APP"]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_type_oauth_code_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_type_oauth_code_enum.py
new file mode 100644
index 00000000..7c82a7f5
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_type_oauth_code_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupTypeOauthCodeEnum = typing.Literal["OAUTH_CODE"]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_type_oauth_jwt_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_type_oauth_jwt_enum.py
new file mode 100644
index 00000000..70283758
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_type_oauth_jwt_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupTypeOauthJwtEnum = typing.Literal["OAUTH_JWT"]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_type_token_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_type_token_enum.py
new file mode 100644
index 00000000..2b928c5c
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_type_token_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupTypeTokenEnum = typing.Literal["TOKEN"]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_type_webhook_enum.py b/src/auth0/management/types/flows_vault_connectio_setup_type_webhook_enum.py
new file mode 100644
index 00000000..1d358071
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_type_webhook_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectioSetupTypeWebhookEnum = typing.Literal["WEBHOOK"]
diff --git a/src/auth0/management/types/flows_vault_connectio_setup_webhook.py b/src/auth0/management/types/flows_vault_connectio_setup_webhook.py
new file mode 100644
index 00000000..ac5a33f7
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connectio_setup_webhook.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flows_vault_connectio_setup_type_webhook_enum import FlowsVaultConnectioSetupTypeWebhookEnum
+
+
+class FlowsVaultConnectioSetupWebhook(UniversalBaseModel):
+ type: FlowsVaultConnectioSetupTypeWebhookEnum = "WEBHOOK"
+ url: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_activecampaign_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_activecampaign_enum.py
new file mode 100644
index 00000000..448e1671
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_activecampaign_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdActivecampaignEnum = typing.Literal["ACTIVECAMPAIGN"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_airtable_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_airtable_enum.py
new file mode 100644
index 00000000..b9b6f5da
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_airtable_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdAirtableEnum = typing.Literal["AIRTABLE"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_auth_0_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_auth_0_enum.py
new file mode 100644
index 00000000..a0971717
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_auth_0_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdAuth0Enum = typing.Literal["AUTH0"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_bigquery_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_bigquery_enum.py
new file mode 100644
index 00000000..b6c20d72
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_bigquery_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdBigqueryEnum = typing.Literal["BIGQUERY"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_clearbit_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_clearbit_enum.py
new file mode 100644
index 00000000..3f66c710
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_clearbit_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdClearbitEnum = typing.Literal["CLEARBIT"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_docusign_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_docusign_enum.py
new file mode 100644
index 00000000..0ebf1593
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_docusign_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdDocusignEnum = typing.Literal["DOCUSIGN"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_google_sheets_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_google_sheets_enum.py
new file mode 100644
index 00000000..c6a612b2
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_google_sheets_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdGoogleSheetsEnum = typing.Literal["GOOGLE_SHEETS"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_http_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_http_enum.py
new file mode 100644
index 00000000..9b3cb028
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_http_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdHttpEnum = typing.Literal["HTTP"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_hubspot_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_hubspot_enum.py
new file mode 100644
index 00000000..ecb12d12
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_hubspot_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdHubspotEnum = typing.Literal["HUBSPOT"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_jwt_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_jwt_enum.py
new file mode 100644
index 00000000..6826a82c
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_jwt_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdJwtEnum = typing.Literal["JWT"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_mailchimp_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_mailchimp_enum.py
new file mode 100644
index 00000000..a5c04a7b
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_mailchimp_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdMailchimpEnum = typing.Literal["MAILCHIMP"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_mailjet_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_mailjet_enum.py
new file mode 100644
index 00000000..5718ef46
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_mailjet_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdMailjetEnum = typing.Literal["MAILJET"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_pipedrive_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_pipedrive_enum.py
new file mode 100644
index 00000000..20b0f35e
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_pipedrive_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdPipedriveEnum = typing.Literal["PIPEDRIVE"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_salesforce_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_salesforce_enum.py
new file mode 100644
index 00000000..1e32fd98
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_salesforce_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdSalesforceEnum = typing.Literal["SALESFORCE"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_sendgrid_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_sendgrid_enum.py
new file mode 100644
index 00000000..b21a3237
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_sendgrid_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdSendgridEnum = typing.Literal["SENDGRID"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_slack_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_slack_enum.py
new file mode 100644
index 00000000..150eb84e
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_slack_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdSlackEnum = typing.Literal["SLACK"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_stripe_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_stripe_enum.py
new file mode 100644
index 00000000..575ca3b8
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_stripe_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdStripeEnum = typing.Literal["STRIPE"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_telegram_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_telegram_enum.py
new file mode 100644
index 00000000..040c136f
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_telegram_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdTelegramEnum = typing.Literal["TELEGRAM"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_twilio_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_twilio_enum.py
new file mode 100644
index 00000000..0d4c296a
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_twilio_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdTwilioEnum = typing.Literal["TWILIO"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_whatsapp_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_whatsapp_enum.py
new file mode 100644
index 00000000..a62be16b
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_whatsapp_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdWhatsappEnum = typing.Literal["WHATSAPP"]
diff --git a/src/auth0/management/types/flows_vault_connection_app_id_zapier_enum.py b/src/auth0/management/types/flows_vault_connection_app_id_zapier_enum.py
new file mode 100644
index 00000000..4131ab99
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_app_id_zapier_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FlowsVaultConnectionAppIdZapierEnum = typing.Literal["ZAPIER"]
diff --git a/src/auth0/management/types/flows_vault_connection_summary.py b/src/auth0/management/types/flows_vault_connection_summary.py
new file mode 100644
index 00000000..6d18b13e
--- /dev/null
+++ b/src/auth0/management/types/flows_vault_connection_summary.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FlowsVaultConnectionSummary(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Flows Vault Connection identifier.
+ """
+
+ app_id: str = pydantic.Field()
+ """
+ Flows Vault Connection app identifier.
+ """
+
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ account_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Flows Vault Connection custom account name.
+ """
+
+ ready: bool = pydantic.Field()
+ """
+ Whether the Flows Vault Connection is configured.
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was created.
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was updated.
+ """
+
+ refreshed_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was refreshed.
+ """
+
+ fingerprint: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block.py b/src/auth0/management/types/form_block.py
new file mode 100644
index 00000000..b939871e
--- /dev/null
+++ b/src/auth0/management/types/form_block.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_block_divider import FormBlockDivider
+from .form_block_html import FormBlockHtml
+from .form_block_image import FormBlockImage
+from .form_block_jump_button import FormBlockJumpButton
+from .form_block_next_button import FormBlockNextButton
+from .form_block_previous_button import FormBlockPreviousButton
+from .form_block_resend_button import FormBlockResendButton
+from .form_block_rich_text import FormBlockRichText
+
+FormBlock = typing.Union[
+ FormBlockDivider,
+ FormBlockHtml,
+ FormBlockImage,
+ FormBlockJumpButton,
+ FormBlockResendButton,
+ FormBlockNextButton,
+ FormBlockPreviousButton,
+ FormBlockRichText,
+]
diff --git a/src/auth0/management/types/form_block_divider.py b/src/auth0/management/types/form_block_divider.py
new file mode 100644
index 00000000..88c528ba
--- /dev/null
+++ b/src/auth0/management/types/form_block_divider.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_divider_config import FormBlockDividerConfig
+from .form_block_type_divider_const import FormBlockTypeDividerConst
+from .form_component_category_block_const import FormComponentCategoryBlockConst
+
+
+class FormBlockDivider(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryBlockConst = "BLOCK"
+ type: FormBlockTypeDividerConst = "DIVIDER"
+ config: typing.Optional[FormBlockDividerConfig] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_divider_config.py b/src/auth0/management/types/form_block_divider_config.py
new file mode 100644
index 00000000..97f02c53
--- /dev/null
+++ b/src/auth0/management/types/form_block_divider_config.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormBlockDividerConfig(UniversalBaseModel):
+ text: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_html.py b/src/auth0/management/types/form_block_html.py
new file mode 100644
index 00000000..d47cd5f6
--- /dev/null
+++ b/src/auth0/management/types/form_block_html.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_html_config import FormBlockHtmlConfig
+from .form_block_type_html_const import FormBlockTypeHtmlConst
+from .form_component_category_block_const import FormComponentCategoryBlockConst
+
+
+class FormBlockHtml(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryBlockConst = "BLOCK"
+ type: FormBlockTypeHtmlConst = "HTML"
+ config: typing.Optional[FormBlockHtmlConfig] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_html_config.py b/src/auth0/management/types/form_block_html_config.py
new file mode 100644
index 00000000..49aa5f7b
--- /dev/null
+++ b/src/auth0/management/types/form_block_html_config.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormBlockHtmlConfig(UniversalBaseModel):
+ content: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_image.py b/src/auth0/management/types/form_block_image.py
new file mode 100644
index 00000000..9e9fefcc
--- /dev/null
+++ b/src/auth0/management/types/form_block_image.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_image_config import FormBlockImageConfig
+from .form_block_type_image_const import FormBlockTypeImageConst
+from .form_component_category_block_const import FormComponentCategoryBlockConst
+
+
+class FormBlockImage(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryBlockConst = "BLOCK"
+ type: FormBlockTypeImageConst = "IMAGE"
+ config: typing.Optional[FormBlockImageConfig] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_image_config.py b/src/auth0/management/types/form_block_image_config.py
new file mode 100644
index 00000000..0b685788
--- /dev/null
+++ b/src/auth0/management/types/form_block_image_config.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_image_config_position_enum import FormBlockImageConfigPositionEnum
+
+
+class FormBlockImageConfig(UniversalBaseModel):
+ src: str
+ position: typing.Optional[FormBlockImageConfigPositionEnum] = None
+ height: typing.Optional[float] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_image_config_position_enum.py b/src/auth0/management/types/form_block_image_config_position_enum.py
new file mode 100644
index 00000000..f96b4178
--- /dev/null
+++ b/src/auth0/management/types/form_block_image_config_position_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockImageConfigPositionEnum = typing.Union[typing.Literal["LEFT", "CENTER", "RIGHT"], typing.Any]
diff --git a/src/auth0/management/types/form_block_jump_button.py b/src/auth0/management/types/form_block_jump_button.py
new file mode 100644
index 00000000..dc3432fd
--- /dev/null
+++ b/src/auth0/management/types/form_block_jump_button.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_jump_button_config import FormBlockJumpButtonConfig
+from .form_block_type_jump_button_const import FormBlockTypeJumpButtonConst
+from .form_component_category_block_const import FormComponentCategoryBlockConst
+
+
+class FormBlockJumpButton(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryBlockConst = "BLOCK"
+ type: FormBlockTypeJumpButtonConst = "JUMP_BUTTON"
+ config: FormBlockJumpButtonConfig
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_jump_button_config.py b/src/auth0/management/types/form_block_jump_button_config.py
new file mode 100644
index 00000000..77329d02
--- /dev/null
+++ b/src/auth0/management/types/form_block_jump_button_config.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_jump_button_config_style import FormBlockJumpButtonConfigStyle
+from .form_node_pointer import FormNodePointer
+
+
+class FormBlockJumpButtonConfig(UniversalBaseModel):
+ text: str
+ next_node: FormNodePointer
+ style: typing.Optional[FormBlockJumpButtonConfigStyle] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_jump_button_config_style.py b/src/auth0/management/types/form_block_jump_button_config_style.py
new file mode 100644
index 00000000..f77985d1
--- /dev/null
+++ b/src/auth0/management/types/form_block_jump_button_config_style.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormBlockJumpButtonConfigStyle(UniversalBaseModel):
+ background_color: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_next_button.py b/src/auth0/management/types/form_block_next_button.py
new file mode 100644
index 00000000..f3b0a278
--- /dev/null
+++ b/src/auth0/management/types/form_block_next_button.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_next_button_config import FormBlockNextButtonConfig
+from .form_block_type_next_button_const import FormBlockTypeNextButtonConst
+from .form_component_category_block_const import FormComponentCategoryBlockConst
+
+
+class FormBlockNextButton(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryBlockConst = "BLOCK"
+ type: FormBlockTypeNextButtonConst = "NEXT_BUTTON"
+ config: FormBlockNextButtonConfig
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_next_button_config.py b/src/auth0/management/types/form_block_next_button_config.py
new file mode 100644
index 00000000..39af66a4
--- /dev/null
+++ b/src/auth0/management/types/form_block_next_button_config.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormBlockNextButtonConfig(UniversalBaseModel):
+ text: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_previous_button.py b/src/auth0/management/types/form_block_previous_button.py
new file mode 100644
index 00000000..f2c5b9d8
--- /dev/null
+++ b/src/auth0/management/types/form_block_previous_button.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_previous_button_config import FormBlockPreviousButtonConfig
+from .form_block_type_previous_button_const import FormBlockTypePreviousButtonConst
+from .form_component_category_block_const import FormComponentCategoryBlockConst
+
+
+class FormBlockPreviousButton(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryBlockConst = "BLOCK"
+ type: FormBlockTypePreviousButtonConst = "PREVIOUS_BUTTON"
+ config: FormBlockPreviousButtonConfig
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_previous_button_config.py b/src/auth0/management/types/form_block_previous_button_config.py
new file mode 100644
index 00000000..4af7476b
--- /dev/null
+++ b/src/auth0/management/types/form_block_previous_button_config.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormBlockPreviousButtonConfig(UniversalBaseModel):
+ text: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_resend_button.py b/src/auth0/management/types/form_block_resend_button.py
new file mode 100644
index 00000000..7eed493b
--- /dev/null
+++ b/src/auth0/management/types/form_block_resend_button.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_resend_button_config import FormBlockResendButtonConfig
+from .form_block_type_resend_button_const import FormBlockTypeResendButtonConst
+from .form_component_category_block_const import FormComponentCategoryBlockConst
+
+
+class FormBlockResendButton(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryBlockConst = "BLOCK"
+ type: FormBlockTypeResendButtonConst = "RESEND_BUTTON"
+ config: FormBlockResendButtonConfig
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_resend_button_config.py b/src/auth0/management/types/form_block_resend_button_config.py
new file mode 100644
index 00000000..b9ab650f
--- /dev/null
+++ b/src/auth0/management/types/form_block_resend_button_config.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_resend_button_config_text_alignment_enum import FormBlockResendButtonConfigTextAlignmentEnum
+
+
+class FormBlockResendButtonConfig(UniversalBaseModel):
+ active_text: str
+ button_text: str
+ waiting_text: str
+ text_alignment: typing.Optional[FormBlockResendButtonConfigTextAlignmentEnum] = None
+ flow_id: str
+ max_attempts: typing.Optional[float] = None
+ waiting_time: typing.Optional[float] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_resend_button_config_text_alignment_enum.py b/src/auth0/management/types/form_block_resend_button_config_text_alignment_enum.py
new file mode 100644
index 00000000..0d1e8c68
--- /dev/null
+++ b/src/auth0/management/types/form_block_resend_button_config_text_alignment_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockResendButtonConfigTextAlignmentEnum = typing.Union[typing.Literal["LEFT", "CENTER", "RIGHT"], typing.Any]
diff --git a/src/auth0/management/types/form_block_rich_text.py b/src/auth0/management/types/form_block_rich_text.py
new file mode 100644
index 00000000..0e1c31d4
--- /dev/null
+++ b/src/auth0/management/types/form_block_rich_text.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_block_rich_text_config import FormBlockRichTextConfig
+from .form_block_type_rich_text_const import FormBlockTypeRichTextConst
+from .form_component_category_block_const import FormComponentCategoryBlockConst
+
+
+class FormBlockRichText(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryBlockConst = "BLOCK"
+ type: FormBlockTypeRichTextConst = "RICH_TEXT"
+ config: typing.Optional[FormBlockRichTextConfig] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_rich_text_config.py b/src/auth0/management/types/form_block_rich_text_config.py
new file mode 100644
index 00000000..42c304a7
--- /dev/null
+++ b/src/auth0/management/types/form_block_rich_text_config.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormBlockRichTextConfig(UniversalBaseModel):
+ content: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_block_type_divider_const.py b/src/auth0/management/types/form_block_type_divider_const.py
new file mode 100644
index 00000000..f715af34
--- /dev/null
+++ b/src/auth0/management/types/form_block_type_divider_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockTypeDividerConst = typing.Literal["DIVIDER"]
diff --git a/src/auth0/management/types/form_block_type_html_const.py b/src/auth0/management/types/form_block_type_html_const.py
new file mode 100644
index 00000000..44c8e2fe
--- /dev/null
+++ b/src/auth0/management/types/form_block_type_html_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockTypeHtmlConst = typing.Literal["HTML"]
diff --git a/src/auth0/management/types/form_block_type_image_const.py b/src/auth0/management/types/form_block_type_image_const.py
new file mode 100644
index 00000000..edb6d0b6
--- /dev/null
+++ b/src/auth0/management/types/form_block_type_image_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockTypeImageConst = typing.Literal["IMAGE"]
diff --git a/src/auth0/management/types/form_block_type_jump_button_const.py b/src/auth0/management/types/form_block_type_jump_button_const.py
new file mode 100644
index 00000000..4fe1671a
--- /dev/null
+++ b/src/auth0/management/types/form_block_type_jump_button_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockTypeJumpButtonConst = typing.Literal["JUMP_BUTTON"]
diff --git a/src/auth0/management/types/form_block_type_next_button_const.py b/src/auth0/management/types/form_block_type_next_button_const.py
new file mode 100644
index 00000000..409a564f
--- /dev/null
+++ b/src/auth0/management/types/form_block_type_next_button_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockTypeNextButtonConst = typing.Literal["NEXT_BUTTON"]
diff --git a/src/auth0/management/types/form_block_type_previous_button_const.py b/src/auth0/management/types/form_block_type_previous_button_const.py
new file mode 100644
index 00000000..b30ec75e
--- /dev/null
+++ b/src/auth0/management/types/form_block_type_previous_button_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockTypePreviousButtonConst = typing.Literal["PREVIOUS_BUTTON"]
diff --git a/src/auth0/management/types/form_block_type_resend_button_const.py b/src/auth0/management/types/form_block_type_resend_button_const.py
new file mode 100644
index 00000000..58034067
--- /dev/null
+++ b/src/auth0/management/types/form_block_type_resend_button_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockTypeResendButtonConst = typing.Literal["RESEND_BUTTON"]
diff --git a/src/auth0/management/types/form_block_type_rich_text_const.py b/src/auth0/management/types/form_block_type_rich_text_const.py
new file mode 100644
index 00000000..24ade6d3
--- /dev/null
+++ b/src/auth0/management/types/form_block_type_rich_text_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormBlockTypeRichTextConst = typing.Literal["RICH_TEXT"]
diff --git a/src/auth0/management/types/form_component.py b/src/auth0/management/types/form_component.py
new file mode 100644
index 00000000..ddc1b124
--- /dev/null
+++ b/src/auth0/management/types/form_component.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_block import FormBlock
+from .form_field import FormField
+from .form_widget import FormWidget
+
+FormComponent = typing.Union[FormBlock, FormWidget, FormField]
diff --git a/src/auth0/management/types/form_component_category_block_const.py b/src/auth0/management/types/form_component_category_block_const.py
new file mode 100644
index 00000000..555b7034
--- /dev/null
+++ b/src/auth0/management/types/form_component_category_block_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormComponentCategoryBlockConst = typing.Literal["BLOCK"]
diff --git a/src/auth0/management/types/form_component_category_field_const.py b/src/auth0/management/types/form_component_category_field_const.py
new file mode 100644
index 00000000..7cd2c2a2
--- /dev/null
+++ b/src/auth0/management/types/form_component_category_field_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormComponentCategoryFieldConst = typing.Literal["FIELD"]
diff --git a/src/auth0/management/types/form_component_category_widget_const.py b/src/auth0/management/types/form_component_category_widget_const.py
new file mode 100644
index 00000000..82e49508
--- /dev/null
+++ b/src/auth0/management/types/form_component_category_widget_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormComponentCategoryWidgetConst = typing.Literal["WIDGET"]
diff --git a/src/auth0/management/types/form_ending_node.py b/src/auth0/management/types/form_ending_node.py
new file mode 100644
index 00000000..757425a8
--- /dev/null
+++ b/src/auth0/management/types/form_ending_node.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_ending_node_after_submit import FormEndingNodeAfterSubmit
+from .form_ending_node_redirection import FormEndingNodeRedirection
+from .form_ending_node_resume_flow_true_const import FormEndingNodeResumeFlowTrueConst
+from .form_node_coordinates import FormNodeCoordinates
+
+
+class FormEndingNode(UniversalBaseModel):
+ redirection: typing.Optional[FormEndingNodeRedirection] = None
+ after_submit: typing.Optional[FormEndingNodeAfterSubmit] = None
+ coordinates: typing.Optional[FormNodeCoordinates] = None
+ resume_flow: typing.Optional[FormEndingNodeResumeFlowTrueConst] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_ending_node_after_submit.py b/src/auth0/management/types/form_ending_node_after_submit.py
new file mode 100644
index 00000000..e3394c30
--- /dev/null
+++ b/src/auth0/management/types/form_ending_node_after_submit.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormEndingNodeAfterSubmit(UniversalBaseModel):
+ flow_id: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_ending_node_id.py b/src/auth0/management/types/form_ending_node_id.py
new file mode 100644
index 00000000..f748bf19
--- /dev/null
+++ b/src/auth0/management/types/form_ending_node_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormEndingNodeId = typing.Literal["$ending"]
diff --git a/src/auth0/management/types/form_ending_node_nullable.py b/src/auth0/management/types/form_ending_node_nullable.py
new file mode 100644
index 00000000..7851e07d
--- /dev/null
+++ b/src/auth0/management/types/form_ending_node_nullable.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_ending_node import FormEndingNode
+
+FormEndingNodeNullable = typing.Optional[FormEndingNode]
diff --git a/src/auth0/management/types/form_ending_node_redirection.py b/src/auth0/management/types/form_ending_node_redirection.py
new file mode 100644
index 00000000..ef5c3f09
--- /dev/null
+++ b/src/auth0/management/types/form_ending_node_redirection.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormEndingNodeRedirection(UniversalBaseModel):
+ delay: typing.Optional[int] = None
+ target: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_ending_node_resume_flow_true_const.py b/src/auth0/management/types/form_ending_node_resume_flow_true_const.py
new file mode 100644
index 00000000..0d1f60e2
--- /dev/null
+++ b/src/auth0/management/types/form_ending_node_resume_flow_true_const.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+FormEndingNodeResumeFlowTrueConst = bool
diff --git a/src/auth0/management/types/form_field.py b/src/auth0/management/types/form_field.py
new file mode 100644
index 00000000..d61af7ed
--- /dev/null
+++ b/src/auth0/management/types/form_field.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_field_boolean import FormFieldBoolean
+from .form_field_cards import FormFieldCards
+from .form_field_choice import FormFieldChoice
+from .form_field_custom import FormFieldCustom
+from .form_field_date import FormFieldDate
+from .form_field_dropdown import FormFieldDropdown
+from .form_field_email import FormFieldEmail
+from .form_field_file import FormFieldFile
+from .form_field_legal import FormFieldLegal
+from .form_field_number import FormFieldNumber
+from .form_field_password import FormFieldPassword
+from .form_field_payment import FormFieldPayment
+from .form_field_social import FormFieldSocial
+from .form_field_tel import FormFieldTel
+from .form_field_text import FormFieldText
+from .form_field_url import FormFieldUrl
+
+FormField = typing.Union[
+ FormFieldBoolean,
+ FormFieldCards,
+ FormFieldChoice,
+ FormFieldCustom,
+ FormFieldDate,
+ FormFieldDropdown,
+ FormFieldEmail,
+ FormFieldFile,
+ FormFieldLegal,
+ FormFieldNumber,
+ FormFieldPassword,
+ FormFieldPayment,
+ FormFieldSocial,
+ FormFieldTel,
+ FormFieldText,
+ FormFieldUrl,
+]
diff --git a/src/auth0/management/types/form_field_boolean.py b/src/auth0/management/types/form_field_boolean.py
new file mode 100644
index 00000000..1e8a4f09
--- /dev/null
+++ b/src/auth0/management/types/form_field_boolean.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_boolean_config import FormFieldBooleanConfig
+from .form_field_type_boolean_const import FormFieldTypeBooleanConst
+
+
+class FormFieldBoolean(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeBooleanConst = "BOOLEAN"
+ config: FormFieldBooleanConfig
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_boolean_config.py b/src/auth0/management/types/form_field_boolean_config.py
new file mode 100644
index 00000000..59403d4e
--- /dev/null
+++ b/src/auth0/management/types/form_field_boolean_config.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_boolean_config_options import FormFieldBooleanConfigOptions
+
+
+class FormFieldBooleanConfig(UniversalBaseModel):
+ default_value: typing.Optional[bool] = None
+ options: typing.Optional[FormFieldBooleanConfigOptions] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_boolean_config_options.py b/src/auth0/management/types/form_field_boolean_config_options.py
new file mode 100644
index 00000000..d26a5226
--- /dev/null
+++ b/src/auth0/management/types/form_field_boolean_config_options.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldBooleanConfigOptions(UniversalBaseModel):
+ true: typing.Optional[str] = None
+ false: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_cards.py b/src/auth0/management/types/form_field_cards.py
new file mode 100644
index 00000000..adc98a3c
--- /dev/null
+++ b/src/auth0/management/types/form_field_cards.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_cards_config import FormFieldCardsConfig
+from .form_field_type_cards_const import FormFieldTypeCardsConst
+
+
+class FormFieldCards(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeCardsConst = "CARDS"
+ config: typing.Optional[FormFieldCardsConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_cards_config.py b/src/auth0/management/types/form_field_cards_config.py
new file mode 100644
index 00000000..4090959f
--- /dev/null
+++ b/src/auth0/management/types/form_field_cards_config.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_cards_config_option import FormFieldCardsConfigOption
+
+
+class FormFieldCardsConfig(UniversalBaseModel):
+ hide_labels: typing.Optional[bool] = None
+ multiple: typing.Optional[bool] = None
+ options: typing.Optional[typing.List[FormFieldCardsConfigOption]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_cards_config_option.py b/src/auth0/management/types/form_field_cards_config_option.py
new file mode 100644
index 00000000..1d82a941
--- /dev/null
+++ b/src/auth0/management/types/form_field_cards_config_option.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldCardsConfigOption(UniversalBaseModel):
+ value: str
+ label: str
+ image_url: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_choice.py b/src/auth0/management/types/form_field_choice.py
new file mode 100644
index 00000000..e2e399e2
--- /dev/null
+++ b/src/auth0/management/types/form_field_choice.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_choice_config import FormFieldChoiceConfig
+from .form_field_type_choice_const import FormFieldTypeChoiceConst
+
+
+class FormFieldChoice(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeChoiceConst = "CHOICE"
+ config: typing.Optional[FormFieldChoiceConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_choice_config.py b/src/auth0/management/types/form_field_choice_config.py
new file mode 100644
index 00000000..733c4f0d
--- /dev/null
+++ b/src/auth0/management/types/form_field_choice_config.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_choice_config_allow_other import FormFieldChoiceConfigAllowOther
+from .form_field_choice_config_option import FormFieldChoiceConfigOption
+
+
+class FormFieldChoiceConfig(UniversalBaseModel):
+ multiple: typing.Optional[bool] = None
+ options: typing.Optional[typing.List[FormFieldChoiceConfigOption]] = None
+ allow_other: typing.Optional[FormFieldChoiceConfigAllowOther] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_choice_config_allow_other.py b/src/auth0/management/types/form_field_choice_config_allow_other.py
new file mode 100644
index 00000000..6b0e9186
--- /dev/null
+++ b/src/auth0/management/types/form_field_choice_config_allow_other.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_choice_config_allow_other_enabled_true_enum import FormFieldChoiceConfigAllowOtherEnabledTrueEnum
+
+
+class FormFieldChoiceConfigAllowOther(UniversalBaseModel):
+ enabled: typing.Optional[FormFieldChoiceConfigAllowOtherEnabledTrueEnum] = None
+ label: typing.Optional[str] = None
+ placeholder: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_choice_config_allow_other_enabled_true_enum.py b/src/auth0/management/types/form_field_choice_config_allow_other_enabled_true_enum.py
new file mode 100644
index 00000000..c2f58a9c
--- /dev/null
+++ b/src/auth0/management/types/form_field_choice_config_allow_other_enabled_true_enum.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+FormFieldChoiceConfigAllowOtherEnabledTrueEnum = bool
diff --git a/src/auth0/management/types/form_field_choice_config_option.py b/src/auth0/management/types/form_field_choice_config_option.py
new file mode 100644
index 00000000..3218a657
--- /dev/null
+++ b/src/auth0/management/types/form_field_choice_config_option.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldChoiceConfigOption(UniversalBaseModel):
+ value: str
+ label: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_custom.py b/src/auth0/management/types/form_field_custom.py
new file mode 100644
index 00000000..d1310d33
--- /dev/null
+++ b/src/auth0/management/types/form_field_custom.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_custom_config import FormFieldCustomConfig
+from .form_field_type_custom_const import FormFieldTypeCustomConst
+
+
+class FormFieldCustom(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeCustomConst = "CUSTOM"
+ config: FormFieldCustomConfig
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_custom_config.py b/src/auth0/management/types/form_field_custom_config.py
new file mode 100644
index 00000000..7b973f2c
--- /dev/null
+++ b/src/auth0/management/types/form_field_custom_config.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .form_field_custom_config_params import FormFieldCustomConfigParams
+from .form_field_custom_config_schema import FormFieldCustomConfigSchema
+
+
+class FormFieldCustomConfig(UniversalBaseModel):
+ schema_: typing_extensions.Annotated[FormFieldCustomConfigSchema, FieldMetadata(alias="schema")]
+ code: str
+ css: typing.Optional[str] = None
+ params: typing.Optional[FormFieldCustomConfigParams] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_custom_config_params.py b/src/auth0/management/types/form_field_custom_config_params.py
new file mode 100644
index 00000000..51290396
--- /dev/null
+++ b/src/auth0/management/types/form_field_custom_config_params.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldCustomConfigParams = typing.Dict[str, str]
diff --git a/src/auth0/management/types/form_field_custom_config_schema.py b/src/auth0/management/types/form_field_custom_config_schema.py
new file mode 100644
index 00000000..c2947a40
--- /dev/null
+++ b/src/auth0/management/types/form_field_custom_config_schema.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldCustomConfigSchema = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/form_field_date.py b/src/auth0/management/types/form_field_date.py
new file mode 100644
index 00000000..18d548c5
--- /dev/null
+++ b/src/auth0/management/types/form_field_date.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_date_config import FormFieldDateConfig
+from .form_field_type_date_const import FormFieldTypeDateConst
+
+
+class FormFieldDate(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeDateConst = "DATE"
+ config: FormFieldDateConfig
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_date_config.py b/src/auth0/management/types/form_field_date_config.py
new file mode 100644
index 00000000..bfb80cf6
--- /dev/null
+++ b/src/auth0/management/types/form_field_date_config.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_date_config_format_enum import FormFieldDateConfigFormatEnum
+
+
+class FormFieldDateConfig(UniversalBaseModel):
+ format: typing.Optional[FormFieldDateConfigFormatEnum] = None
+ default_value: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_date_config_format_enum.py b/src/auth0/management/types/form_field_date_config_format_enum.py
new file mode 100644
index 00000000..e353b174
--- /dev/null
+++ b/src/auth0/management/types/form_field_date_config_format_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldDateConfigFormatEnum = typing.Union[typing.Literal["DATE", "TIME"], typing.Any]
diff --git a/src/auth0/management/types/form_field_dropdown.py b/src/auth0/management/types/form_field_dropdown.py
new file mode 100644
index 00000000..e2cfa5fb
--- /dev/null
+++ b/src/auth0/management/types/form_field_dropdown.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_dropdown_config import FormFieldDropdownConfig
+from .form_field_type_dropdown_const import FormFieldTypeDropdownConst
+
+
+class FormFieldDropdown(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeDropdownConst = "DROPDOWN"
+ config: typing.Optional[FormFieldDropdownConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_dropdown_config.py b/src/auth0/management/types/form_field_dropdown_config.py
new file mode 100644
index 00000000..9783fc1c
--- /dev/null
+++ b/src/auth0/management/types/form_field_dropdown_config.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_dropdown_config_option import FormFieldDropdownConfigOption
+
+
+class FormFieldDropdownConfig(UniversalBaseModel):
+ multiple: typing.Optional[bool] = None
+ options: typing.Optional[typing.List[FormFieldDropdownConfigOption]] = None
+ placeholder: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_dropdown_config_option.py b/src/auth0/management/types/form_field_dropdown_config_option.py
new file mode 100644
index 00000000..e3594d48
--- /dev/null
+++ b/src/auth0/management/types/form_field_dropdown_config_option.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldDropdownConfigOption(UniversalBaseModel):
+ value: str
+ label: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_email.py b/src/auth0/management/types/form_field_email.py
new file mode 100644
index 00000000..89506465
--- /dev/null
+++ b/src/auth0/management/types/form_field_email.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_email_config import FormFieldEmailConfig
+from .form_field_type_email_const import FormFieldTypeEmailConst
+
+
+class FormFieldEmail(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeEmailConst = "EMAIL"
+ config: typing.Optional[FormFieldEmailConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_email_config.py b/src/auth0/management/types/form_field_email_config.py
new file mode 100644
index 00000000..e9a4be97
--- /dev/null
+++ b/src/auth0/management/types/form_field_email_config.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldEmailConfig(UniversalBaseModel):
+ default_value: typing.Optional[str] = None
+ placeholder: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_file.py b/src/auth0/management/types/form_field_file.py
new file mode 100644
index 00000000..c77c88b2
--- /dev/null
+++ b/src/auth0/management/types/form_field_file.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_file_config import FormFieldFileConfig
+from .form_field_type_file_const import FormFieldTypeFileConst
+
+
+class FormFieldFile(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeFileConst = "FILE"
+ config: typing.Optional[FormFieldFileConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_file_config.py b/src/auth0/management/types/form_field_file_config.py
new file mode 100644
index 00000000..72255b02
--- /dev/null
+++ b/src/auth0/management/types/form_field_file_config.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .form_field_file_config_category_enum import FormFieldFileConfigCategoryEnum
+from .form_field_file_config_storage import FormFieldFileConfigStorage
+
+
+class FormFieldFileConfig(UniversalBaseModel):
+ multiple: typing.Optional[bool] = None
+ storage: typing.Optional[FormFieldFileConfigStorage] = None
+ categories: typing.Optional[typing.List[FormFieldFileConfigCategoryEnum]] = None
+ extensions: typing.Optional[typing.List[str]] = None
+ max_size: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="maxSize")] = None
+ max_files: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="maxFiles")] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_file_config_category_enum.py b/src/auth0/management/types/form_field_file_config_category_enum.py
new file mode 100644
index 00000000..5baf9fee
--- /dev/null
+++ b/src/auth0/management/types/form_field_file_config_category_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldFileConfigCategoryEnum = typing.Union[
+ typing.Literal["AUDIO", "VIDEO", "IMAGE", "DOCUMENT", "ARCHIVE"], typing.Any
+]
diff --git a/src/auth0/management/types/form_field_file_config_storage.py b/src/auth0/management/types/form_field_file_config_storage.py
new file mode 100644
index 00000000..845884f1
--- /dev/null
+++ b/src/auth0/management/types/form_field_file_config_storage.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_file_config_storage_type_enum import FormFieldFileConfigStorageTypeEnum
+
+
+class FormFieldFileConfigStorage(UniversalBaseModel):
+ type: FormFieldFileConfigStorageTypeEnum
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_file_config_storage_type_enum.py b/src/auth0/management/types/form_field_file_config_storage_type_enum.py
new file mode 100644
index 00000000..4e7d9b94
--- /dev/null
+++ b/src/auth0/management/types/form_field_file_config_storage_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldFileConfigStorageTypeEnum = typing.Union[typing.Literal["MANAGED", "CUSTOM"], typing.Any]
diff --git a/src/auth0/management/types/form_field_legal.py b/src/auth0/management/types/form_field_legal.py
new file mode 100644
index 00000000..d5f19329
--- /dev/null
+++ b/src/auth0/management/types/form_field_legal.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_legal_config import FormFieldLegalConfig
+from .form_field_type_legal_const import FormFieldTypeLegalConst
+
+
+class FormFieldLegal(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeLegalConst = "LEGAL"
+ config: typing.Optional[FormFieldLegalConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_legal_config.py b/src/auth0/management/types/form_field_legal_config.py
new file mode 100644
index 00000000..d65b21ac
--- /dev/null
+++ b/src/auth0/management/types/form_field_legal_config.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldLegalConfig(UniversalBaseModel):
+ text: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_number.py b/src/auth0/management/types/form_field_number.py
new file mode 100644
index 00000000..3f97238b
--- /dev/null
+++ b/src/auth0/management/types/form_field_number.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_number_config import FormFieldNumberConfig
+from .form_field_type_number_const import FormFieldTypeNumberConst
+
+
+class FormFieldNumber(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeNumberConst = "NUMBER"
+ config: typing.Optional[FormFieldNumberConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_number_config.py b/src/auth0/management/types/form_field_number_config.py
new file mode 100644
index 00000000..22451cb9
--- /dev/null
+++ b/src/auth0/management/types/form_field_number_config.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldNumberConfig(UniversalBaseModel):
+ default_value: typing.Optional[float] = None
+ placeholder: typing.Optional[str] = None
+ min_value: typing.Optional[float] = None
+ max_value: typing.Optional[float] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_password.py b/src/auth0/management/types/form_field_password.py
new file mode 100644
index 00000000..c0646a0f
--- /dev/null
+++ b/src/auth0/management/types/form_field_password.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_password_config import FormFieldPasswordConfig
+from .form_field_type_password_const import FormFieldTypePasswordConst
+
+
+class FormFieldPassword(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypePasswordConst = "PASSWORD"
+ config: FormFieldPasswordConfig
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_password_config.py b/src/auth0/management/types/form_field_password_config.py
new file mode 100644
index 00000000..fc0ec977
--- /dev/null
+++ b/src/auth0/management/types/form_field_password_config.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_password_config_hash_enum import FormFieldPasswordConfigHashEnum
+
+
+class FormFieldPasswordConfig(UniversalBaseModel):
+ hash: typing.Optional[FormFieldPasswordConfigHashEnum] = None
+ placeholder: typing.Optional[str] = None
+ min_length: typing.Optional[int] = None
+ max_length: typing.Optional[int] = None
+ complexity: typing.Optional[bool] = None
+ nist: typing.Optional[bool] = None
+ strength_meter: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_password_config_hash_enum.py b/src/auth0/management/types/form_field_password_config_hash_enum.py
new file mode 100644
index 00000000..9f6c956c
--- /dev/null
+++ b/src/auth0/management/types/form_field_password_config_hash_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldPasswordConfigHashEnum = typing.Union[typing.Literal["NONE", "MD5", "SHA1", "SHA256", "SHA512"], typing.Any]
diff --git a/src/auth0/management/types/form_field_payment.py b/src/auth0/management/types/form_field_payment.py
new file mode 100644
index 00000000..a5ad6dfd
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_payment_config import FormFieldPaymentConfig
+from .form_field_type_payment_const import FormFieldTypePaymentConst
+
+
+class FormFieldPayment(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypePaymentConst = "PAYMENT"
+ config: FormFieldPaymentConfig
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_payment_config.py b/src/auth0/management/types/form_field_payment_config.py
new file mode 100644
index 00000000..6540c157
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_payment_config_charge import FormFieldPaymentConfigCharge
+from .form_field_payment_config_credentials import FormFieldPaymentConfigCredentials
+from .form_field_payment_config_customer import FormFieldPaymentConfigCustomer
+from .form_field_payment_config_fields import FormFieldPaymentConfigFields
+from .form_field_payment_config_provider_enum import FormFieldPaymentConfigProviderEnum
+
+
+class FormFieldPaymentConfig(UniversalBaseModel):
+ provider: typing.Optional[FormFieldPaymentConfigProviderEnum] = None
+ charge: FormFieldPaymentConfigCharge
+ credentials: FormFieldPaymentConfigCredentials
+ customer: typing.Optional[FormFieldPaymentConfigCustomer] = None
+ fields: typing.Optional[FormFieldPaymentConfigFields] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_payment_config_charge.py b/src/auth0/management/types/form_field_payment_config_charge.py
new file mode 100644
index 00000000..51ebb0e2
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_charge.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_field_payment_config_charge_one_off import FormFieldPaymentConfigChargeOneOff
+from .form_field_payment_config_charge_subscription import FormFieldPaymentConfigChargeSubscription
+
+FormFieldPaymentConfigCharge = typing.Union[
+ FormFieldPaymentConfigChargeOneOff, FormFieldPaymentConfigChargeSubscription
+]
diff --git a/src/auth0/management/types/form_field_payment_config_charge_one_off.py b/src/auth0/management/types/form_field_payment_config_charge_one_off.py
new file mode 100644
index 00000000..2bfedd35
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_charge_one_off.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_payment_config_charge_one_off_one_off import FormFieldPaymentConfigChargeOneOffOneOff
+from .form_field_payment_config_charge_type_one_off_const import FormFieldPaymentConfigChargeTypeOneOffConst
+
+
+class FormFieldPaymentConfigChargeOneOff(UniversalBaseModel):
+ type: FormFieldPaymentConfigChargeTypeOneOffConst = "ONE_OFF"
+ one_off: FormFieldPaymentConfigChargeOneOffOneOff
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_payment_config_charge_one_off_currency_enum.py b/src/auth0/management/types/form_field_payment_config_charge_one_off_currency_enum.py
new file mode 100644
index 00000000..15d21e48
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_charge_one_off_currency_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldPaymentConfigChargeOneOffCurrencyEnum = typing.Union[
+ typing.Literal["AUD", "CAD", "CHF", "EUR", "GBP", "INR", "MXN", "SEK", "USD"], typing.Any
+]
diff --git a/src/auth0/management/types/form_field_payment_config_charge_one_off_one_off.py b/src/auth0/management/types/form_field_payment_config_charge_one_off_one_off.py
new file mode 100644
index 00000000..19c86dfe
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_charge_one_off_one_off.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_payment_config_charge_one_off_currency_enum import FormFieldPaymentConfigChargeOneOffCurrencyEnum
+from .form_field_payment_config_charge_one_off_one_off_amount import FormFieldPaymentConfigChargeOneOffOneOffAmount
+
+
+class FormFieldPaymentConfigChargeOneOffOneOff(UniversalBaseModel):
+ amount: FormFieldPaymentConfigChargeOneOffOneOffAmount
+ currency: FormFieldPaymentConfigChargeOneOffCurrencyEnum
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_payment_config_charge_one_off_one_off_amount.py b/src/auth0/management/types/form_field_payment_config_charge_one_off_one_off_amount.py
new file mode 100644
index 00000000..ae19fc11
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_charge_one_off_one_off_amount.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldPaymentConfigChargeOneOffOneOffAmount = typing.Union[str, float]
diff --git a/src/auth0/management/types/form_field_payment_config_charge_subscription.py b/src/auth0/management/types/form_field_payment_config_charge_subscription.py
new file mode 100644
index 00000000..a1b61fc1
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_charge_subscription.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_payment_config_charge_type_subscription_const import FormFieldPaymentConfigChargeTypeSubscriptionConst
+from .form_field_payment_config_subscription import FormFieldPaymentConfigSubscription
+
+
+class FormFieldPaymentConfigChargeSubscription(UniversalBaseModel):
+ type: FormFieldPaymentConfigChargeTypeSubscriptionConst = "SUBSCRIPTION"
+ subscription: FormFieldPaymentConfigSubscription
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_payment_config_charge_type_one_off_const.py b/src/auth0/management/types/form_field_payment_config_charge_type_one_off_const.py
new file mode 100644
index 00000000..4241ba32
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_charge_type_one_off_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldPaymentConfigChargeTypeOneOffConst = typing.Literal["ONE_OFF"]
diff --git a/src/auth0/management/types/form_field_payment_config_charge_type_subscription_const.py b/src/auth0/management/types/form_field_payment_config_charge_type_subscription_const.py
new file mode 100644
index 00000000..d6e1dddb
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_charge_type_subscription_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldPaymentConfigChargeTypeSubscriptionConst = typing.Literal["SUBSCRIPTION"]
diff --git a/src/auth0/management/types/form_field_payment_config_credentials.py b/src/auth0/management/types/form_field_payment_config_credentials.py
new file mode 100644
index 00000000..066c5ff6
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_credentials.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldPaymentConfigCredentials(UniversalBaseModel):
+ public_key: str
+ private_key: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_payment_config_customer.py b/src/auth0/management/types/form_field_payment_config_customer.py
new file mode 100644
index 00000000..09ff92cf
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_customer.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldPaymentConfigCustomer = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/form_field_payment_config_field_properties.py b/src/auth0/management/types/form_field_payment_config_field_properties.py
new file mode 100644
index 00000000..823403de
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_field_properties.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldPaymentConfigFieldProperties(UniversalBaseModel):
+ label: typing.Optional[str] = None
+ placeholder: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_payment_config_fields.py b/src/auth0/management/types/form_field_payment_config_fields.py
new file mode 100644
index 00000000..9ef0712f
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_fields.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_payment_config_field_properties import FormFieldPaymentConfigFieldProperties
+
+
+class FormFieldPaymentConfigFields(UniversalBaseModel):
+ card_number: typing.Optional[FormFieldPaymentConfigFieldProperties] = None
+ expiration_date: typing.Optional[FormFieldPaymentConfigFieldProperties] = None
+ security_code: typing.Optional[FormFieldPaymentConfigFieldProperties] = None
+ trustmarks: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_payment_config_provider_enum.py b/src/auth0/management/types/form_field_payment_config_provider_enum.py
new file mode 100644
index 00000000..30005a4b
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_provider_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldPaymentConfigProviderEnum = typing.Literal["STRIPE"]
diff --git a/src/auth0/management/types/form_field_payment_config_subscription.py b/src/auth0/management/types/form_field_payment_config_subscription.py
new file mode 100644
index 00000000..eb8bde7e
--- /dev/null
+++ b/src/auth0/management/types/form_field_payment_config_subscription.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldPaymentConfigSubscription = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/form_field_social.py b/src/auth0/management/types/form_field_social.py
new file mode 100644
index 00000000..6d6b3d07
--- /dev/null
+++ b/src/auth0/management/types/form_field_social.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_social_config import FormFieldSocialConfig
+from .form_field_type_social_const import FormFieldTypeSocialConst
+
+
+class FormFieldSocial(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeSocialConst = "SOCIAL"
+ config: typing.Optional[FormFieldSocialConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_social_config.py b/src/auth0/management/types/form_field_social_config.py
new file mode 100644
index 00000000..2cbce7a1
--- /dev/null
+++ b/src/auth0/management/types/form_field_social_config.py
@@ -0,0 +1,17 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldSocialConfig(UniversalBaseModel):
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_tel.py b/src/auth0/management/types/form_field_tel.py
new file mode 100644
index 00000000..a2ff4360
--- /dev/null
+++ b/src/auth0/management/types/form_field_tel.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_tel_config import FormFieldTelConfig
+from .form_field_type_tel_const import FormFieldTypeTelConst
+
+
+class FormFieldTel(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeTelConst = "TEL"
+ config: typing.Optional[FormFieldTelConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_tel_config.py b/src/auth0/management/types/form_field_tel_config.py
new file mode 100644
index 00000000..f0a674e1
--- /dev/null
+++ b/src/auth0/management/types/form_field_tel_config.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_field_tel_config_strings import FormFieldTelConfigStrings
+
+
+class FormFieldTelConfig(UniversalBaseModel):
+ default_value: typing.Optional[str] = None
+ placeholder: typing.Optional[str] = None
+ min_length: typing.Optional[int] = None
+ max_length: typing.Optional[int] = None
+ country_picker: typing.Optional[bool] = None
+ strings: typing.Optional[FormFieldTelConfigStrings] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_tel_config_strings.py b/src/auth0/management/types/form_field_tel_config_strings.py
new file mode 100644
index 00000000..463f84e5
--- /dev/null
+++ b/src/auth0/management/types/form_field_tel_config_strings.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldTelConfigStrings(UniversalBaseModel):
+ filter_placeholder: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_text.py b/src/auth0/management/types/form_field_text.py
new file mode 100644
index 00000000..b1b76549
--- /dev/null
+++ b/src/auth0/management/types/form_field_text.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_text_config import FormFieldTextConfig
+from .form_field_type_text_const import FormFieldTypeTextConst
+
+
+class FormFieldText(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeTextConst = "TEXT"
+ config: typing.Optional[FormFieldTextConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_text_config.py b/src/auth0/management/types/form_field_text_config.py
new file mode 100644
index 00000000..73eabb40
--- /dev/null
+++ b/src/auth0/management/types/form_field_text_config.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldTextConfig(UniversalBaseModel):
+ multiline: typing.Optional[bool] = None
+ default_value: typing.Optional[str] = None
+ placeholder: typing.Optional[str] = None
+ min_length: typing.Optional[int] = None
+ max_length: typing.Optional[int] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_type_boolean_const.py b/src/auth0/management/types/form_field_type_boolean_const.py
new file mode 100644
index 00000000..daf28a43
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_boolean_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeBooleanConst = typing.Literal["BOOLEAN"]
diff --git a/src/auth0/management/types/form_field_type_cards_const.py b/src/auth0/management/types/form_field_type_cards_const.py
new file mode 100644
index 00000000..c96ca7ad
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_cards_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeCardsConst = typing.Literal["CARDS"]
diff --git a/src/auth0/management/types/form_field_type_choice_const.py b/src/auth0/management/types/form_field_type_choice_const.py
new file mode 100644
index 00000000..2d6d631c
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_choice_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeChoiceConst = typing.Literal["CHOICE"]
diff --git a/src/auth0/management/types/form_field_type_custom_const.py b/src/auth0/management/types/form_field_type_custom_const.py
new file mode 100644
index 00000000..41d8ce5e
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_custom_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeCustomConst = typing.Literal["CUSTOM"]
diff --git a/src/auth0/management/types/form_field_type_date_const.py b/src/auth0/management/types/form_field_type_date_const.py
new file mode 100644
index 00000000..1de45170
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_date_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeDateConst = typing.Literal["DATE"]
diff --git a/src/auth0/management/types/form_field_type_dropdown_const.py b/src/auth0/management/types/form_field_type_dropdown_const.py
new file mode 100644
index 00000000..3270ffcb
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_dropdown_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeDropdownConst = typing.Literal["DROPDOWN"]
diff --git a/src/auth0/management/types/form_field_type_email_const.py b/src/auth0/management/types/form_field_type_email_const.py
new file mode 100644
index 00000000..8d868354
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_email_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeEmailConst = typing.Literal["EMAIL"]
diff --git a/src/auth0/management/types/form_field_type_file_const.py b/src/auth0/management/types/form_field_type_file_const.py
new file mode 100644
index 00000000..2d044bfa
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_file_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeFileConst = typing.Literal["FILE"]
diff --git a/src/auth0/management/types/form_field_type_legal_const.py b/src/auth0/management/types/form_field_type_legal_const.py
new file mode 100644
index 00000000..d851f5be
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_legal_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeLegalConst = typing.Literal["LEGAL"]
diff --git a/src/auth0/management/types/form_field_type_number_const.py b/src/auth0/management/types/form_field_type_number_const.py
new file mode 100644
index 00000000..1ffa9ba3
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_number_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeNumberConst = typing.Literal["NUMBER"]
diff --git a/src/auth0/management/types/form_field_type_password_const.py b/src/auth0/management/types/form_field_type_password_const.py
new file mode 100644
index 00000000..06dabc08
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_password_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypePasswordConst = typing.Literal["PASSWORD"]
diff --git a/src/auth0/management/types/form_field_type_payment_const.py b/src/auth0/management/types/form_field_type_payment_const.py
new file mode 100644
index 00000000..4dcbc9da
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_payment_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypePaymentConst = typing.Literal["PAYMENT"]
diff --git a/src/auth0/management/types/form_field_type_social_const.py b/src/auth0/management/types/form_field_type_social_const.py
new file mode 100644
index 00000000..0ff239c9
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_social_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeSocialConst = typing.Literal["SOCIAL"]
diff --git a/src/auth0/management/types/form_field_type_tel_const.py b/src/auth0/management/types/form_field_type_tel_const.py
new file mode 100644
index 00000000..efc23ee8
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_tel_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeTelConst = typing.Literal["TEL"]
diff --git a/src/auth0/management/types/form_field_type_text_const.py b/src/auth0/management/types/form_field_type_text_const.py
new file mode 100644
index 00000000..41b4fd2d
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_text_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeTextConst = typing.Literal["TEXT"]
diff --git a/src/auth0/management/types/form_field_type_url_const.py b/src/auth0/management/types/form_field_type_url_const.py
new file mode 100644
index 00000000..5016d4c1
--- /dev/null
+++ b/src/auth0/management/types/form_field_type_url_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormFieldTypeUrlConst = typing.Literal["URL"]
diff --git a/src/auth0/management/types/form_field_url.py b/src/auth0/management/types/form_field_url.py
new file mode 100644
index 00000000..b7599729
--- /dev/null
+++ b/src/auth0/management/types/form_field_url.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_field_const import FormComponentCategoryFieldConst
+from .form_field_type_url_const import FormFieldTypeUrlConst
+from .form_field_url_config import FormFieldUrlConfig
+
+
+class FormFieldUrl(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryFieldConst = "FIELD"
+ type: FormFieldTypeUrlConst = "URL"
+ config: typing.Optional[FormFieldUrlConfig] = None
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_field_url_config.py b/src/auth0/management/types/form_field_url_config.py
new file mode 100644
index 00000000..e93a450d
--- /dev/null
+++ b/src/auth0/management/types/form_field_url_config.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormFieldUrlConfig(UniversalBaseModel):
+ default_value: typing.Optional[str] = None
+ placeholder: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_flow.py b/src/auth0/management/types/form_flow.py
new file mode 100644
index 00000000..6b9baa7b
--- /dev/null
+++ b/src/auth0/management/types/form_flow.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_flow_config import FormFlowConfig
+from .form_node_coordinates import FormNodeCoordinates
+from .form_node_type_flow_const import FormNodeTypeFlowConst
+
+
+class FormFlow(UniversalBaseModel):
+ id: str
+ type: FormNodeTypeFlowConst = "FLOW"
+ coordinates: typing.Optional[FormNodeCoordinates] = None
+ alias: typing.Optional[str] = None
+ config: FormFlowConfig
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_flow_config.py b/src/auth0/management/types/form_flow_config.py
new file mode 100644
index 00000000..5ad89719
--- /dev/null
+++ b/src/auth0/management/types/form_flow_config.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_node_pointer import FormNodePointer
+
+
+class FormFlowConfig(UniversalBaseModel):
+ flow_id: str
+ next_node: typing.Optional[FormNodePointer] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_hidden_field.py b/src/auth0/management/types/form_hidden_field.py
new file mode 100644
index 00000000..c3a57f7f
--- /dev/null
+++ b/src/auth0/management/types/form_hidden_field.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormHiddenField(UniversalBaseModel):
+ key: str
+ value: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_languages.py b/src/auth0/management/types/form_languages.py
new file mode 100644
index 00000000..43930c22
--- /dev/null
+++ b/src/auth0/management/types/form_languages.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormLanguages(UniversalBaseModel):
+ primary: typing.Optional[str] = None
+ default: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_languages_nullable.py b/src/auth0/management/types/form_languages_nullable.py
new file mode 100644
index 00000000..a0bc6c3b
--- /dev/null
+++ b/src/auth0/management/types/form_languages_nullable.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_languages import FormLanguages
+
+FormLanguagesNullable = typing.Optional[FormLanguages]
diff --git a/src/auth0/management/types/form_messages.py b/src/auth0/management/types/form_messages.py
new file mode 100644
index 00000000..85eba1fc
--- /dev/null
+++ b/src/auth0/management/types/form_messages.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_messages_custom import FormMessagesCustom
+from .form_messages_error import FormMessagesError
+
+
+class FormMessages(UniversalBaseModel):
+ errors: typing.Optional[FormMessagesError] = None
+ custom: typing.Optional[FormMessagesCustom] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_messages_custom.py b/src/auth0/management/types/form_messages_custom.py
new file mode 100644
index 00000000..a607984f
--- /dev/null
+++ b/src/auth0/management/types/form_messages_custom.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormMessagesCustom = typing.Dict[str, str]
diff --git a/src/auth0/management/types/form_messages_error.py b/src/auth0/management/types/form_messages_error.py
new file mode 100644
index 00000000..9c9705ac
--- /dev/null
+++ b/src/auth0/management/types/form_messages_error.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormMessagesError = typing.Dict[str, str]
diff --git a/src/auth0/management/types/form_messages_nullable.py b/src/auth0/management/types/form_messages_nullable.py
new file mode 100644
index 00000000..1ec691e1
--- /dev/null
+++ b/src/auth0/management/types/form_messages_nullable.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_messages import FormMessages
+
+FormMessagesNullable = typing.Optional[FormMessages]
diff --git a/src/auth0/management/types/form_node.py b/src/auth0/management/types/form_node.py
new file mode 100644
index 00000000..fad6e9e6
--- /dev/null
+++ b/src/auth0/management/types/form_node.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_flow import FormFlow
+from .form_router import FormRouter
+from .form_step import FormStep
+
+FormNode = typing.Union[FormFlow, FormRouter, FormStep]
diff --git a/src/auth0/management/types/form_node_coordinates.py b/src/auth0/management/types/form_node_coordinates.py
new file mode 100644
index 00000000..dc009c3e
--- /dev/null
+++ b/src/auth0/management/types/form_node_coordinates.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormNodeCoordinates(UniversalBaseModel):
+ x: int
+ y: int
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_node_list.py b/src/auth0/management/types/form_node_list.py
new file mode 100644
index 00000000..33c79790
--- /dev/null
+++ b/src/auth0/management/types/form_node_list.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_node import FormNode
+
+FormNodeList = typing.List[FormNode]
diff --git a/src/auth0/management/types/form_node_list_nullable.py b/src/auth0/management/types/form_node_list_nullable.py
new file mode 100644
index 00000000..e3c4cb61
--- /dev/null
+++ b/src/auth0/management/types/form_node_list_nullable.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_node_list import FormNodeList
+
+FormNodeListNullable = typing.Optional[FormNodeList]
diff --git a/src/auth0/management/types/form_node_pointer.py b/src/auth0/management/types/form_node_pointer.py
new file mode 100644
index 00000000..b8b09210
--- /dev/null
+++ b/src/auth0/management/types/form_node_pointer.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_ending_node_id import FormEndingNodeId
+
+FormNodePointer = typing.Union[str, FormEndingNodeId]
diff --git a/src/auth0/management/types/form_node_type_flow_const.py b/src/auth0/management/types/form_node_type_flow_const.py
new file mode 100644
index 00000000..8e3338a1
--- /dev/null
+++ b/src/auth0/management/types/form_node_type_flow_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormNodeTypeFlowConst = typing.Literal["FLOW"]
diff --git a/src/auth0/management/types/form_node_type_router_const.py b/src/auth0/management/types/form_node_type_router_const.py
new file mode 100644
index 00000000..35e7115e
--- /dev/null
+++ b/src/auth0/management/types/form_node_type_router_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormNodeTypeRouterConst = typing.Literal["ROUTER"]
diff --git a/src/auth0/management/types/form_node_type_step_const.py b/src/auth0/management/types/form_node_type_step_const.py
new file mode 100644
index 00000000..073e7686
--- /dev/null
+++ b/src/auth0/management/types/form_node_type_step_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormNodeTypeStepConst = typing.Literal["STEP"]
diff --git a/src/auth0/management/types/form_router.py b/src/auth0/management/types/form_router.py
new file mode 100644
index 00000000..977b735e
--- /dev/null
+++ b/src/auth0/management/types/form_router.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_node_coordinates import FormNodeCoordinates
+from .form_node_type_router_const import FormNodeTypeRouterConst
+from .form_router_config import FormRouterConfig
+
+
+class FormRouter(UniversalBaseModel):
+ id: str
+ type: FormNodeTypeRouterConst = "ROUTER"
+ coordinates: typing.Optional[FormNodeCoordinates] = None
+ alias: typing.Optional[str] = None
+ config: typing.Optional[FormRouterConfig] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_router_config.py b/src/auth0/management/types/form_router_config.py
new file mode 100644
index 00000000..ac4011a4
--- /dev/null
+++ b/src/auth0/management/types/form_router_config.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_node_pointer import FormNodePointer
+from .form_router_rule import FormRouterRule
+
+
+class FormRouterConfig(UniversalBaseModel):
+ rules: typing.Optional[typing.List[FormRouterRule]] = None
+ fallback: typing.Optional[FormNodePointer] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_router_rule.py b/src/auth0/management/types/form_router_rule.py
new file mode 100644
index 00000000..8c6cf7a5
--- /dev/null
+++ b/src/auth0/management/types/form_router_rule.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_node_pointer import FormNodePointer
+
+
+class FormRouterRule(UniversalBaseModel):
+ id: str
+ alias: typing.Optional[str] = None
+ next_node: typing.Optional[FormNodePointer] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_start_node.py b/src/auth0/management/types/form_start_node.py
new file mode 100644
index 00000000..43b6bebc
--- /dev/null
+++ b/src/auth0/management/types/form_start_node.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_hidden_field import FormHiddenField
+from .form_node_coordinates import FormNodeCoordinates
+from .form_node_pointer import FormNodePointer
+
+
+class FormStartNode(UniversalBaseModel):
+ hidden_fields: typing.Optional[typing.List[FormHiddenField]] = None
+ next_node: typing.Optional[FormNodePointer] = None
+ coordinates: typing.Optional[FormNodeCoordinates] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_start_node_nullable.py b/src/auth0/management/types/form_start_node_nullable.py
new file mode 100644
index 00000000..43bae42e
--- /dev/null
+++ b/src/auth0/management/types/form_start_node_nullable.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_start_node import FormStartNode
+
+FormStartNodeNullable = typing.Optional[FormStartNode]
diff --git a/src/auth0/management/types/form_step.py b/src/auth0/management/types/form_step.py
new file mode 100644
index 00000000..0454d8b0
--- /dev/null
+++ b/src/auth0/management/types/form_step.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_node_coordinates import FormNodeCoordinates
+from .form_node_type_step_const import FormNodeTypeStepConst
+from .form_step_config import FormStepConfig
+
+
+class FormStep(UniversalBaseModel):
+ id: str
+ type: FormNodeTypeStepConst = "STEP"
+ coordinates: typing.Optional[FormNodeCoordinates] = None
+ alias: typing.Optional[str] = None
+ config: typing.Optional[FormStepConfig] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_step_component_list.py b/src/auth0/management/types/form_step_component_list.py
new file mode 100644
index 00000000..d9988e0a
--- /dev/null
+++ b/src/auth0/management/types/form_step_component_list.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_component import FormComponent
+
+FormStepComponentList = typing.List[FormComponent]
diff --git a/src/auth0/management/types/form_step_config.py b/src/auth0/management/types/form_step_config.py
new file mode 100644
index 00000000..7c25dbd6
--- /dev/null
+++ b/src/auth0/management/types/form_step_config.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_node_pointer import FormNodePointer
+from .form_step_component_list import FormStepComponentList
+
+
+class FormStepConfig(UniversalBaseModel):
+ components: typing.Optional[FormStepComponentList] = None
+ next_node: typing.Optional[FormNodePointer] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_style.py b/src/auth0/management/types/form_style.py
new file mode 100644
index 00000000..07348f75
--- /dev/null
+++ b/src/auth0/management/types/form_style.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormStyle(UniversalBaseModel):
+ css: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_style_nullable.py b/src/auth0/management/types/form_style_nullable.py
new file mode 100644
index 00000000..cc0d913e
--- /dev/null
+++ b/src/auth0/management/types/form_style_nullable.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_style import FormStyle
+
+FormStyleNullable = typing.Optional[FormStyle]
diff --git a/src/auth0/management/types/form_summary.py b/src/auth0/management/types/form_summary.py
new file mode 100644
index 00000000..482baa07
--- /dev/null
+++ b/src/auth0/management/types/form_summary.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormSummary(UniversalBaseModel):
+ id: str
+ name: str
+ created_at: dt.datetime
+ updated_at: dt.datetime
+ embedded_at: typing.Optional[str] = None
+ submitted_at: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_translations.py b/src/auth0/management/types/form_translations.py
new file mode 100644
index 00000000..e40c281a
--- /dev/null
+++ b/src/auth0/management/types/form_translations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormTranslations = typing.Dict[str, typing.Dict[str, typing.Any]]
diff --git a/src/auth0/management/types/form_translations_nullable.py b/src/auth0/management/types/form_translations_nullable.py
new file mode 100644
index 00000000..f11e7501
--- /dev/null
+++ b/src/auth0/management/types/form_translations_nullable.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_translations import FormTranslations
+
+FormTranslationsNullable = typing.Optional[FormTranslations]
diff --git a/src/auth0/management/types/form_widget.py b/src/auth0/management/types/form_widget.py
new file mode 100644
index 00000000..50b39eb1
--- /dev/null
+++ b/src/auth0/management/types/form_widget.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .form_widget_auth_0_verifiable_credentials import FormWidgetAuth0VerifiableCredentials
+from .form_widget_g_maps_address import FormWidgetGMapsAddress
+from .form_widget_recaptcha import FormWidgetRecaptcha
+
+FormWidget = typing.Union[FormWidgetAuth0VerifiableCredentials, FormWidgetGMapsAddress, FormWidgetRecaptcha]
diff --git a/src/auth0/management/types/form_widget_auth_0_verifiable_credentials.py b/src/auth0/management/types/form_widget_auth_0_verifiable_credentials.py
new file mode 100644
index 00000000..37fd6b14
--- /dev/null
+++ b/src/auth0/management/types/form_widget_auth_0_verifiable_credentials.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_widget_const import FormComponentCategoryWidgetConst
+from .form_widget_auth_0_verifiable_credentials_config import FormWidgetAuth0VerifiableCredentialsConfig
+from .form_widget_type_auth_0_verifiable_credentials_const import FormWidgetTypeAuth0VerifiableCredentialsConst
+
+
+class FormWidgetAuth0VerifiableCredentials(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryWidgetConst = "WIDGET"
+ type: FormWidgetTypeAuth0VerifiableCredentialsConst = "AUTH0_VERIFIABLE_CREDENTIALS"
+ config: FormWidgetAuth0VerifiableCredentialsConfig
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_widget_auth_0_verifiable_credentials_config.py b/src/auth0/management/types/form_widget_auth_0_verifiable_credentials_config.py
new file mode 100644
index 00000000..e4c1c088
--- /dev/null
+++ b/src/auth0/management/types/form_widget_auth_0_verifiable_credentials_config.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormWidgetAuth0VerifiableCredentialsConfig(UniversalBaseModel):
+ url: str
+ size: typing.Optional[float] = None
+ alternate_text: str
+ access_token: str
+ verification_id: str
+ max_wait: typing.Optional[float] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_widget_g_maps_address.py b/src/auth0/management/types/form_widget_g_maps_address.py
new file mode 100644
index 00000000..1de911e7
--- /dev/null
+++ b/src/auth0/management/types/form_widget_g_maps_address.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_widget_const import FormComponentCategoryWidgetConst
+from .form_widget_g_maps_address_config import FormWidgetGMapsAddressConfig
+from .form_widget_type_g_maps_address_const import FormWidgetTypeGMapsAddressConst
+
+
+class FormWidgetGMapsAddress(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryWidgetConst = "WIDGET"
+ type: FormWidgetTypeGMapsAddressConst = "GMAPS_ADDRESS"
+ config: FormWidgetGMapsAddressConfig
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_widget_g_maps_address_config.py b/src/auth0/management/types/form_widget_g_maps_address_config.py
new file mode 100644
index 00000000..77fe9c06
--- /dev/null
+++ b/src/auth0/management/types/form_widget_g_maps_address_config.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormWidgetGMapsAddressConfig(UniversalBaseModel):
+ api_key: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_widget_recaptcha.py b/src/auth0/management/types/form_widget_recaptcha.py
new file mode 100644
index 00000000..6d93ee81
--- /dev/null
+++ b/src/auth0/management/types/form_widget_recaptcha.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_component_category_widget_const import FormComponentCategoryWidgetConst
+from .form_widget_recaptcha_config import FormWidgetRecaptchaConfig
+from .form_widget_type_recaptcha_const import FormWidgetTypeRecaptchaConst
+
+
+class FormWidgetRecaptcha(UniversalBaseModel):
+ id: str
+ category: FormComponentCategoryWidgetConst = "WIDGET"
+ type: FormWidgetTypeRecaptchaConst = "RECAPTCHA"
+ config: FormWidgetRecaptchaConfig
+ label: typing.Optional[str] = None
+ hint: typing.Optional[str] = None
+ required: typing.Optional[bool] = None
+ sensitive: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_widget_recaptcha_config.py b/src/auth0/management/types/form_widget_recaptcha_config.py
new file mode 100644
index 00000000..86a22a27
--- /dev/null
+++ b/src/auth0/management/types/form_widget_recaptcha_config.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FormWidgetRecaptchaConfig(UniversalBaseModel):
+ site_key: str
+ secret_key: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/form_widget_type_auth_0_verifiable_credentials_const.py b/src/auth0/management/types/form_widget_type_auth_0_verifiable_credentials_const.py
new file mode 100644
index 00000000..3a6f7079
--- /dev/null
+++ b/src/auth0/management/types/form_widget_type_auth_0_verifiable_credentials_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormWidgetTypeAuth0VerifiableCredentialsConst = typing.Literal["AUTH0_VERIFIABLE_CREDENTIALS"]
diff --git a/src/auth0/management/types/form_widget_type_g_maps_address_const.py b/src/auth0/management/types/form_widget_type_g_maps_address_const.py
new file mode 100644
index 00000000..37edab91
--- /dev/null
+++ b/src/auth0/management/types/form_widget_type_g_maps_address_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormWidgetTypeGMapsAddressConst = typing.Literal["GMAPS_ADDRESS"]
diff --git a/src/auth0/management/types/form_widget_type_recaptcha_const.py b/src/auth0/management/types/form_widget_type_recaptcha_const.py
new file mode 100644
index 00000000..22191753
--- /dev/null
+++ b/src/auth0/management/types/form_widget_type_recaptcha_const.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormWidgetTypeRecaptchaConst = typing.Literal["RECAPTCHA"]
diff --git a/src/auth0/management/types/forms_request_parameters_hydrate_enum.py b/src/auth0/management/types/forms_request_parameters_hydrate_enum.py
new file mode 100644
index 00000000..d916ae1c
--- /dev/null
+++ b/src/auth0/management/types/forms_request_parameters_hydrate_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+FormsRequestParametersHydrateEnum = typing.Union[typing.Literal["flow_count", "links"], typing.Any]
diff --git a/src/auth0/management/types/get_action_execution_response_content.py b/src/auth0/management/types/get_action_execution_response_content.py
new file mode 100644
index 00000000..fa8712f4
--- /dev/null
+++ b/src/auth0/management/types/get_action_execution_response_content.py
@@ -0,0 +1,43 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_execution_result import ActionExecutionResult
+from .action_execution_status_enum import ActionExecutionStatusEnum
+from .action_trigger_type_enum import ActionTriggerTypeEnum
+
+
+class GetActionExecutionResponseContent(UniversalBaseModel):
+ """
+ The result of a specific execution of a trigger.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="c5b35bb1-c67d-40bb-9b0d-700b6fe33dd9")
+ """
+ ID identifies this specific execution simulation. These IDs would resemble real executions in production.
+ """
+
+ trigger_id: typing.Optional[ActionTriggerTypeEnum] = None
+ status: typing.Optional[ActionExecutionStatusEnum] = None
+ results: typing.Optional[typing.List[ActionExecutionResult]] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time that the execution was started.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time that the exeution finished executing.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_action_response_content.py b/src/auth0/management/types/get_action_response_content.py
new file mode 100644
index 00000000..aed2563d
--- /dev/null
+++ b/src/auth0/management/types/get_action_response_content.py
@@ -0,0 +1,92 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_build_status_enum import ActionBuildStatusEnum
+from .action_deployed_version import ActionDeployedVersion
+from .action_secret_response import ActionSecretResponse
+from .action_trigger import ActionTrigger
+from .action_version_dependency import ActionVersionDependency
+from .integration import Integration
+
+
+class GetActionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The unique ID of the action.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="my-action")
+ """
+ The name of an action.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this action supports. At this time, an action can only target a single trigger at a time.
+ """
+
+ all_changes_deployed: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if all of an Action's contents have been deployed.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was updated.
+ """
+
+ code: typing.Optional[str] = pydantic.Field(default="module.exports = () => {}")
+ """
+ The source code of the action.
+ """
+
+ dependencies: typing.Optional[typing.List[ActionVersionDependency]] = pydantic.Field(default=None)
+ """
+ The list of third party npm modules, and their versions, that this action depends on.
+ """
+
+ runtime: typing.Optional[str] = pydantic.Field(default="node22")
+ """
+ The Node runtime. For example: `node22`, defaults to `node22`
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretResponse]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ deployed_version: typing.Optional[ActionDeployedVersion] = None
+ installed_integration_id: typing.Optional[str] = pydantic.Field(default="7d2bc0c9-c0c2-433a-9f4e-86ef80270aad")
+ """
+ installed_integration_id is the fk reference to the InstalledIntegration entity.
+ """
+
+ integration: typing.Optional[Integration] = None
+ status: typing.Optional[ActionBuildStatusEnum] = None
+ built_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was built successfully.
+ """
+
+ deploy: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if the action should be deployed after creation.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_action_version_response_content.py b/src/auth0/management/types/get_action_version_response_content.py
new file mode 100644
index 00000000..455736db
--- /dev/null
+++ b/src/auth0/management/types/get_action_version_response_content.py
@@ -0,0 +1,91 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_base import ActionBase
+from .action_error import ActionError
+from .action_secret_response import ActionSecretResponse
+from .action_trigger import ActionTrigger
+from .action_version_build_status_enum import ActionVersionBuildStatusEnum
+from .action_version_dependency import ActionVersionDependency
+
+
+class GetActionVersionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="12a3b9e6-06e6-4a29-96bf-90c82fe79a0d")
+ """
+ The unique id of an action version.
+ """
+
+ action_id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The id of the action to which this version belongs.
+ """
+
+ code: typing.Optional[str] = pydantic.Field(default="module.exports = () => {}")
+ """
+ The source code of this specific version of the action.
+ """
+
+ dependencies: typing.Optional[typing.List[ActionVersionDependency]] = pydantic.Field(default=None)
+ """
+ The list of third party npm modules, and their versions, that this specific version depends on.
+ """
+
+ deployed: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Indicates if this specific version is the currently one deployed.
+ """
+
+ runtime: typing.Optional[str] = pydantic.Field(default="node22")
+ """
+ The Node runtime. For example: `node22`
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretResponse]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ status: typing.Optional[ActionVersionBuildStatusEnum] = None
+ number: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ The index of this version in list of versions for the action.
+ """
+
+ errors: typing.Optional[typing.List[ActionError]] = pydantic.Field(default=None)
+ """
+ Any errors that occurred while the version was being built.
+ """
+
+ action: typing.Optional[ActionBase] = None
+ built_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was built successfully.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this version was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when a version was updated. Versions are never updated externally. Only Auth0 will update an action version as it is being built.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this version supports. At this time, a version can only target a single trigger at a time.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_active_users_count_stats_response_content.py b/src/auth0/management/types/get_active_users_count_stats_response_content.py
new file mode 100644
index 00000000..1c26dfcd
--- /dev/null
+++ b/src/auth0/management/types/get_active_users_count_stats_response_content.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+GetActiveUsersCountStatsResponseContent = float
diff --git a/src/auth0/management/types/get_acul_response_content.py b/src/auth0/management/types/get_acul_response_content.py
new file mode 100644
index 00000000..907064ea
--- /dev/null
+++ b/src/auth0/management/types/get_acul_response_content.py
@@ -0,0 +1,58 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_filters import AculFilters
+from .acul_head_tag import AculHeadTag
+from .acul_rendering_mode_enum import AculRenderingModeEnum
+
+
+class GetAculResponseContent(UniversalBaseModel):
+ tenant: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Tenant ID
+ """
+
+ prompt: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the prompt
+ """
+
+ screen: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the screen
+ """
+
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = None
+ context_configuration: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Context values to make available
+ """
+
+ default_head_tags_disabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Override Universal Login default head tags
+ """
+
+ use_page_template: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Use page template with ACUL
+ """
+
+ head_tags: typing.Optional[typing.List[AculHeadTag]] = pydantic.Field(default=None)
+ """
+ An array of head tags
+ """
+
+ filters: typing.Optional[AculFilters] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_attack_protection_captcha_response_content.py b/src/auth0/management/types/get_attack_protection_captcha_response_content.py
new file mode 100644
index 00000000..cb353b15
--- /dev/null
+++ b/src/auth0/management/types/get_attack_protection_captcha_response_content.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .attack_protection_captcha_arkose_response_content import AttackProtectionCaptchaArkoseResponseContent
+from .attack_protection_captcha_auth_challenge_response_content import (
+ AttackProtectionCaptchaAuthChallengeResponseContent,
+)
+from .attack_protection_captcha_friendly_captcha_response_content import (
+ AttackProtectionCaptchaFriendlyCaptchaResponseContent,
+)
+from .attack_protection_captcha_hcaptcha_response_content import AttackProtectionCaptchaHcaptchaResponseContent
+from .attack_protection_captcha_recaptcha_enterprise_response_content import (
+ AttackProtectionCaptchaRecaptchaEnterpriseResponseContent,
+)
+from .attack_protection_captcha_recaptcha_v_2_response_content import AttackProtectionCaptchaRecaptchaV2ResponseContent
+from .attack_protection_captcha_simple_captcha_response_content import (
+ AttackProtectionCaptchaSimpleCaptchaResponseContent,
+)
+
+
+class GetAttackProtectionCaptchaResponseContent(UniversalBaseModel):
+ active_provider_id: typing.Optional[str] = None
+ arkose: typing.Optional[AttackProtectionCaptchaArkoseResponseContent] = None
+ auth_challenge: typing.Optional[AttackProtectionCaptchaAuthChallengeResponseContent] = None
+ hcaptcha: typing.Optional[AttackProtectionCaptchaHcaptchaResponseContent] = None
+ friendly_captcha: typing.Optional[AttackProtectionCaptchaFriendlyCaptchaResponseContent] = None
+ recaptcha_enterprise: typing.Optional[AttackProtectionCaptchaRecaptchaEnterpriseResponseContent] = None
+ recaptcha_v_2: typing_extensions.Annotated[
+ typing.Optional[AttackProtectionCaptchaRecaptchaV2ResponseContent], FieldMetadata(alias="recaptcha_v2")
+ ] = None
+ simple_captcha: typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_bot_detection_settings_response_content.py b/src/auth0/management/types/get_bot_detection_settings_response_content.py
new file mode 100644
index 00000000..7d3572e3
--- /dev/null
+++ b/src/auth0/management/types/get_bot_detection_settings_response_content.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .bot_detection_allowlist import BotDetectionAllowlist
+from .bot_detection_challenge_policy_password_flow_enum import BotDetectionChallengePolicyPasswordFlowEnum
+from .bot_detection_challenge_policy_password_reset_flow_enum import BotDetectionChallengePolicyPasswordResetFlowEnum
+from .bot_detection_challenge_policy_passwordless_flow_enum import BotDetectionChallengePolicyPasswordlessFlowEnum
+from .bot_detection_level_enum import BotDetectionLevelEnum
+from .bot_detection_monitoring_mode_enabled import BotDetectionMonitoringModeEnabled
+
+
+class GetBotDetectionSettingsResponseContent(UniversalBaseModel):
+ bot_detection_level: BotDetectionLevelEnum
+ challenge_password_policy: BotDetectionChallengePolicyPasswordFlowEnum
+ challenge_passwordless_policy: BotDetectionChallengePolicyPasswordlessFlowEnum
+ challenge_password_reset_policy: BotDetectionChallengePolicyPasswordResetFlowEnum
+ allowlist: BotDetectionAllowlist
+ monitoring_mode_enabled: BotDetectionMonitoringModeEnabled
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_branding_default_theme_response_content.py b/src/auth0/management/types/get_branding_default_theme_response_content.py
new file mode 100644
index 00000000..f39e71e6
--- /dev/null
+++ b/src/auth0/management/types/get_branding_default_theme_response_content.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .branding_theme_borders import BrandingThemeBorders
+from .branding_theme_colors import BrandingThemeColors
+from .branding_theme_fonts import BrandingThemeFonts
+from .branding_theme_page_background import BrandingThemePageBackground
+from .branding_theme_widget import BrandingThemeWidget
+
+
+class GetBrandingDefaultThemeResponseContent(UniversalBaseModel):
+ borders: BrandingThemeBorders
+ colors: BrandingThemeColors
+ display_name: typing_extensions.Annotated[str, FieldMetadata(alias="displayName")] = pydantic.Field()
+ """
+ Display Name
+ """
+
+ fonts: BrandingThemeFonts
+ page_background: BrandingThemePageBackground
+ theme_id: typing_extensions.Annotated[str, FieldMetadata(alias="themeId")] = pydantic.Field()
+ """
+ Theme Id
+ """
+
+ widget: BrandingThemeWidget
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_branding_phone_provider_response_content.py b/src/auth0/management/types/get_branding_phone_provider_response_content.py
new file mode 100644
index 00000000..8006fd2f
--- /dev/null
+++ b/src/auth0/management/types/get_branding_phone_provider_response_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .phone_provider_channel_enum import PhoneProviderChannelEnum
+from .phone_provider_configuration import PhoneProviderConfiguration
+from .phone_provider_name_enum import PhoneProviderNameEnum
+
+
+class GetBrandingPhoneProviderResponseContent(UniversalBaseModel):
+ """
+ Phone provider configuration schema
+ """
+
+ id: typing.Optional[str] = None
+ tenant: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the tenant
+ """
+
+ name: PhoneProviderNameEnum
+ channel: typing.Optional[PhoneProviderChannelEnum] = None
+ disabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the provider is enabled (false) or disabled (true).
+ """
+
+ configuration: typing.Optional[PhoneProviderConfiguration] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The provider's creation date and time in ISO 8601 format
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time of the last update to the provider in ISO 8601 format
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_branding_response_content.py b/src/auth0/management/types/get_branding_response_content.py
new file mode 100644
index 00000000..d510b59f
--- /dev/null
+++ b/src/auth0/management/types/get_branding_response_content.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .branding_colors import BrandingColors
+from .branding_font import BrandingFont
+
+
+class GetBrandingResponseContent(UniversalBaseModel):
+ colors: typing.Optional[BrandingColors] = None
+ favicon_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL for the favicon. Must use HTTPS.
+ """
+
+ logo_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL for the logo. Must use HTTPS.
+ """
+
+ font: typing.Optional[BrandingFont] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_branding_theme_response_content.py b/src/auth0/management/types/get_branding_theme_response_content.py
new file mode 100644
index 00000000..edc35468
--- /dev/null
+++ b/src/auth0/management/types/get_branding_theme_response_content.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .branding_theme_borders import BrandingThemeBorders
+from .branding_theme_colors import BrandingThemeColors
+from .branding_theme_fonts import BrandingThemeFonts
+from .branding_theme_page_background import BrandingThemePageBackground
+from .branding_theme_widget import BrandingThemeWidget
+
+
+class GetBrandingThemeResponseContent(UniversalBaseModel):
+ borders: BrandingThemeBorders
+ colors: BrandingThemeColors
+ display_name: typing_extensions.Annotated[str, FieldMetadata(alias="displayName")] = pydantic.Field()
+ """
+ Display Name
+ """
+
+ fonts: BrandingThemeFonts
+ page_background: BrandingThemePageBackground
+ theme_id: typing_extensions.Annotated[str, FieldMetadata(alias="themeId")] = pydantic.Field()
+ """
+ Theme Id
+ """
+
+ widget: BrandingThemeWidget
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_breached_password_detection_settings_response_content.py b/src/auth0/management/types/get_breached_password_detection_settings_response_content.py
new file mode 100644
index 00000000..77b6604b
--- /dev/null
+++ b/src/auth0/management/types/get_breached_password_detection_settings_response_content.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .breached_password_detection_admin_notification_frequency_enum import (
+ BreachedPasswordDetectionAdminNotificationFrequencyEnum,
+)
+from .breached_password_detection_method_enum import BreachedPasswordDetectionMethodEnum
+from .breached_password_detection_shields_enum import BreachedPasswordDetectionShieldsEnum
+from .breached_password_detection_stage import BreachedPasswordDetectionStage
+
+
+class GetBreachedPasswordDetectionSettingsResponseContent(UniversalBaseModel):
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether or not breached password detection is active.
+ """
+
+ shields: typing.Optional[typing.List[BreachedPasswordDetectionShieldsEnum]] = pydantic.Field(default=None)
+ """
+ Action to take when a breached password is detected during a login.
+ Possible values: block, user_notification, admin_notification.
+ """
+
+ admin_notification_frequency: typing.Optional[
+ typing.List[BreachedPasswordDetectionAdminNotificationFrequencyEnum]
+ ] = pydantic.Field(default=None)
+ """
+ When "admin_notification" is enabled, determines how often email notifications are sent.
+ Possible values: immediately, daily, weekly, monthly.
+ """
+
+ method: typing.Optional[BreachedPasswordDetectionMethodEnum] = None
+ stage: typing.Optional[BreachedPasswordDetectionStage] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_brute_force_settings_response_content.py b/src/auth0/management/types/get_brute_force_settings_response_content.py
new file mode 100644
index 00000000..190c9023
--- /dev/null
+++ b/src/auth0/management/types/get_brute_force_settings_response_content.py
@@ -0,0 +1,48 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .get_brute_force_settings_response_content_mode import GetBruteForceSettingsResponseContentMode
+from .get_brute_force_settings_response_content_shields_item import GetBruteForceSettingsResponseContentShieldsItem
+
+
+class GetBruteForceSettingsResponseContent(UniversalBaseModel):
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether or not brute force attack protections are active.
+ """
+
+ shields: typing.Optional[typing.List[GetBruteForceSettingsResponseContentShieldsItem]] = pydantic.Field(
+ default=None
+ )
+ """
+ Action to take when a brute force protection threshold is violated.
+ Possible values: block, user_notification.
+ """
+
+ allowlist: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of trusted IP addresses that will not have attack protection enforced against them.
+ """
+
+ mode: typing.Optional[GetBruteForceSettingsResponseContentMode] = pydantic.Field(default=None)
+ """
+ Account Lockout: Determines whether or not IP address is used when counting failed attempts.
+ Possible values: count_per_identifier_and_ip, count_per_identifier.
+ """
+
+ max_attempts: typing.Optional[int] = pydantic.Field(default=10)
+ """
+ Maximum number of unsuccessful attempts.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_brute_force_settings_response_content_mode.py b/src/auth0/management/types/get_brute_force_settings_response_content_mode.py
new file mode 100644
index 00000000..c308e0da
--- /dev/null
+++ b/src/auth0/management/types/get_brute_force_settings_response_content_mode.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GetBruteForceSettingsResponseContentMode = typing.Union[
+ typing.Literal["count_per_identifier_and_ip", "count_per_identifier"], typing.Any
+]
diff --git a/src/auth0/management/types/get_brute_force_settings_response_content_shields_item.py b/src/auth0/management/types/get_brute_force_settings_response_content_shields_item.py
new file mode 100644
index 00000000..f5744c62
--- /dev/null
+++ b/src/auth0/management/types/get_brute_force_settings_response_content_shields_item.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GetBruteForceSettingsResponseContentShieldsItem = typing.Union[typing.Literal["block", "user_notification"], typing.Any]
diff --git a/src/auth0/management/types/get_client_credential_response_content.py b/src/auth0/management/types/get_client_credential_response_content.py
new file mode 100644
index 00000000..69c657e4
--- /dev/null
+++ b/src/auth0/management/types/get_client_credential_response_content.py
@@ -0,0 +1,66 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .client_credential_algorithm_enum import ClientCredentialAlgorithmEnum
+from .client_credential_type_enum import ClientCredentialTypeEnum
+
+
+class GetClientCredentialResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="cred_1m7sfABoNTTKYwTQ8qt6tX")
+ """
+ ID of the credential. Generated on creation.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The name given to the credential by the user.
+ """
+
+ kid: typing.Optional[str] = pydantic.Field(default="IZSSTECp...")
+ """
+ The key identifier of the credential, generated on creation.
+ """
+
+ alg: typing.Optional[ClientCredentialAlgorithmEnum] = None
+ credential_type: typing.Optional[ClientCredentialTypeEnum] = None
+ subject_dn: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The X509 certificate's Subject Distinguished Name
+ """
+
+ thumbprint_sha_256: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="thumbprint_sha256")] = (
+ pydantic.Field(default=None)
+ )
+ """
+ The X509 certificate's SHA256 thumbprint
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date the credential was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date the credential was updated.
+ """
+
+ expires_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date representing the expiration of the credential.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_client_response_content.py b/src/auth0/management/types/get_client_response_content.py
new file mode 100644
index 00000000..d31901cb
--- /dev/null
+++ b/src/auth0/management/types/get_client_response_content.py
@@ -0,0 +1,235 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .client_addons import ClientAddons
+from .client_app_type_enum import ClientAppTypeEnum
+from .client_async_approval_notifications_channels_api_post_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration,
+)
+from .client_authentication_method import ClientAuthenticationMethod
+from .client_compliance_level_enum import ClientComplianceLevelEnum
+from .client_default_organization import ClientDefaultOrganization
+from .client_encryption_key import ClientEncryptionKey
+from .client_jwt_configuration import ClientJwtConfiguration
+from .client_metadata import ClientMetadata
+from .client_mobile import ClientMobile
+from .client_oidc_backchannel_logout_settings import ClientOidcBackchannelLogoutSettings
+from .client_organization_discovery_enum import ClientOrganizationDiscoveryEnum
+from .client_organization_require_behavior_enum import ClientOrganizationRequireBehaviorEnum
+from .client_organization_usage_enum import ClientOrganizationUsageEnum
+from .client_refresh_token_configuration import ClientRefreshTokenConfiguration
+from .client_session_transfer_configuration import ClientSessionTransferConfiguration
+from .client_signed_request_object_with_credential_id import ClientSignedRequestObjectWithCredentialId
+from .client_signing_keys import ClientSigningKeys
+from .client_token_endpoint_auth_method_enum import ClientTokenEndpointAuthMethodEnum
+from .client_token_exchange_configuration import ClientTokenExchangeConfiguration
+from .express_configuration import ExpressConfiguration
+from .token_quota import TokenQuota
+
+
+class GetClientResponseContent(UniversalBaseModel):
+ client_id: typing.Optional[str] = pydantic.Field(default="AaiyAPdpYdesoKnqjj8HJqRn4T5titww")
+ """
+ ID of this client.
+ """
+
+ tenant: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Name of the tenant this client belongs to.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="My application")
+ """
+ Name of this client (min length: 1 character, does not allow `<` or `>`).
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Free text description of this client (max length: 140 characters).
+ """
+
+ global_: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="global")] = pydantic.Field(
+ default=False
+ )
+ """
+ Whether this is your global 'All Applications' client representing legacy tenant settings (true) or a regular client (false).
+ """
+
+ client_secret: typing.Optional[str] = pydantic.Field(
+ default="MG_TNT2ver-SylNat-_VeMmd-4m0Waba0jr1troztBniSChEw0glxEmgEi2Kw40H"
+ )
+ """
+ Client secret (which you must not make public).
+ """
+
+ app_type: typing.Optional[ClientAppTypeEnum] = None
+ logo_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL of the logo to display for this client. Recommended size is 150x150 pixels.
+ """
+
+ is_first_party: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this client a first party client (true) or not (false).
+ """
+
+ oidc_conformant: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this client conforms to strict OIDC specifications (true) or uses legacy features (false).
+ """
+
+ callbacks: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs whitelisted for Auth0 to use as a callback to the client after authentication.
+ """
+
+ allowed_origins: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs allowed to make requests from JavaScript to Auth0 API (typically used with CORS). By default, all your callback URLs will be allowed. This field allows you to enter other origins if necessary. You can also use wildcards at the subdomain level (e.g., https://*.contoso.com). Query strings and hash information are not taken into account when validating these URLs.
+ """
+
+ web_origins: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of allowed origins for use with Cross-Origin Authentication, Device Flow, and web message response mode.
+ """
+
+ client_aliases: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of audiences/realms for SAML protocol. Used by the wsfed addon.
+ """
+
+ allowed_clients: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of allow clients and API ids that are allowed to make delegation requests. Empty means all all your clients are allowed.
+ """
+
+ allowed_logout_urls: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs that are valid to redirect to after logout from Auth0. Wildcards are allowed for subdomains.
+ """
+
+ session_transfer: typing.Optional[ClientSessionTransferConfiguration] = None
+ oidc_logout: typing.Optional[ClientOidcBackchannelLogoutSettings] = None
+ grant_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of grant types supported for this application. Can include `authorization_code`, `implicit`, `refresh_token`, `client_credentials`, `password`, `http://auth0.com/oauth/grant-type/password-realm`, `http://auth0.com/oauth/grant-type/mfa-oob`, `http://auth0.com/oauth/grant-type/mfa-otp`, `http://auth0.com/oauth/grant-type/mfa-recovery-code`, `urn:openid:params:grant-type:ciba`, `urn:ietf:params:oauth:grant-type:device_code`, and `urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token`.
+ """
+
+ jwt_configuration: typing.Optional[ClientJwtConfiguration] = None
+ signing_keys: typing.Optional[ClientSigningKeys] = None
+ encryption_key: typing.Optional[ClientEncryptionKey] = None
+ sso: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Applies only to SSO clients and determines whether Auth0 will handle Single Sign On (true) or whether the Identity Provider will (false).
+ """
+
+ sso_disabled: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether Single Sign On is disabled (true) or enabled (true). Defaults to true.
+ """
+
+ cross_origin_authentication: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this client can be used to make cross-origin authentication requests (true) or it is not allowed to make such requests (false).
+ """
+
+ cross_origin_loc: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL of the location in your site where the cross origin verification takes place for the cross-origin auth flow when performing Auth in your own domain instead of Auth0 hosted login page.
+ """
+
+ custom_login_page_on: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether a custom login page is to be used (true) or the default provided login page (false).
+ """
+
+ custom_login_page: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The content (HTML, CSS, JS) of the custom login page.
+ """
+
+ custom_login_page_preview: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The content (HTML, CSS, JS) of the custom login page. (Used on Previews)
+ """
+
+ form_template: typing.Optional[str] = pydantic.Field(default="")
+ """
+ HTML form template to be used for WS-Federation.
+ """
+
+ addons: typing.Optional[ClientAddons] = None
+ token_endpoint_auth_method: typing.Optional[ClientTokenEndpointAuthMethodEnum] = None
+ is_token_endpoint_ip_header_trusted: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ If true, trust that the IP specified in the `auth0-forwarded-for` header is the end-user's IP for brute-force-protection on token endpoint.
+ """
+
+ client_metadata: typing.Optional[ClientMetadata] = None
+ mobile: typing.Optional[ClientMobile] = None
+ initiate_login_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Initiate login uri, must be https
+ """
+
+ refresh_token: typing.Optional[ClientRefreshTokenConfiguration] = None
+ default_organization: typing.Optional[ClientDefaultOrganization] = None
+ organization_usage: typing.Optional[ClientOrganizationUsageEnum] = None
+ organization_require_behavior: typing.Optional[ClientOrganizationRequireBehaviorEnum] = None
+ organization_discovery_methods: typing.Optional[typing.List[ClientOrganizationDiscoveryEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+ """
+
+ client_authentication_methods: typing.Optional[ClientAuthenticationMethod] = None
+ require_pushed_authorization_requests: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Makes the use of Pushed Authorization Requests mandatory for this client
+ """
+
+ require_proof_of_possession: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Makes the use of Proof-of-Possession mandatory for this client
+ """
+
+ signed_request_object: typing.Optional[ClientSignedRequestObjectWithCredentialId] = None
+ compliance_level: typing.Optional[ClientComplianceLevelEnum] = None
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+ """
+
+ token_exchange: typing.Optional[ClientTokenExchangeConfiguration] = None
+ par_request_expiry: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+ """
+
+ token_quota: typing.Optional[TokenQuota] = None
+ express_configuration: typing.Optional[ExpressConfiguration] = None
+ resource_server_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The identifier of the resource server that this client is linked to.
+ """
+
+ async_approval_notification_channels: typing.Optional[
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration
+ ] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_connection_enabled_clients_response_content.py b/src/auth0/management/types/get_connection_enabled_clients_response_content.py
new file mode 100644
index 00000000..db18a2c6
--- /dev/null
+++ b/src/auth0/management/types/get_connection_enabled_clients_response_content.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_enabled_client import ConnectionEnabledClient
+
+
+class GetConnectionEnabledClientsResponseContent(UniversalBaseModel):
+ clients: typing.List[ConnectionEnabledClient] = pydantic.Field()
+ """
+ Clients for which the connection is enabled
+ """
+
+ next: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Encoded next token
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_connection_profile_response_content.py b/src/auth0/management/types/get_connection_profile_response_content.py
new file mode 100644
index 00000000..ac5daeca
--- /dev/null
+++ b/src/auth0/management/types/get_connection_profile_response_content.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_name_prefix_template import ConnectionNamePrefixTemplate
+from .connection_profile_config import ConnectionProfileConfig
+from .connection_profile_enabled_features import ConnectionProfileEnabledFeatures
+from .connection_profile_id import ConnectionProfileId
+from .connection_profile_name import ConnectionProfileName
+from .connection_profile_organization import ConnectionProfileOrganization
+from .connection_profile_strategy_overrides import ConnectionProfileStrategyOverrides
+
+
+class GetConnectionProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[ConnectionProfileId] = None
+ name: typing.Optional[ConnectionProfileName] = None
+ organization: typing.Optional[ConnectionProfileOrganization] = None
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = None
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = None
+ connection_config: typing.Optional[ConnectionProfileConfig] = None
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_connection_profile_template_response_content.py b/src/auth0/management/types/get_connection_profile_template_response_content.py
new file mode 100644
index 00000000..28d5571f
--- /dev/null
+++ b/src/auth0/management/types/get_connection_profile_template_response_content.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_profile_template import ConnectionProfileTemplate
+
+
+class GetConnectionProfileTemplateResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The id of the template.
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The user-friendly name of the template displayed in the UI.
+ """
+
+ template: typing.Optional[ConnectionProfileTemplate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_connection_response_content.py b/src/auth0/management/types/get_connection_response_content.py
new file mode 100644
index 00000000..1eab3bde
--- /dev/null
+++ b/src/auth0/management/types/get_connection_response_content.py
@@ -0,0 +1,66 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_authentication_purpose import ConnectionAuthenticationPurpose
+from .connection_connected_accounts_purpose import ConnectionConnectedAccountsPurpose
+from .connection_options import ConnectionOptions
+from .connections_metadata import ConnectionsMetadata
+
+
+class GetConnectionResponseContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="My connection")
+ """
+ The name of the connection
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Connection name used in login screen
+ """
+
+ options: typing.Optional[ConnectionOptions] = None
+ id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ The connection's identifier
+ """
+
+ strategy: typing.Optional[str] = pydantic.Field(default="auth0")
+ """
+ The type of the connection, related to the identity provider
+ """
+
+ realms: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+ """
+
+ enabled_clients: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ DEPRECATED property. Use the GET /connections/:id/clients endpoint to get the ids of the clients for which the connection is enabled
+ """
+
+ is_domain_connection: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the connection is domain level
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD.
+ """
+
+ metadata: typing.Optional[ConnectionsMetadata] = None
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = None
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_custom_domain_response_content.py b/src/auth0/management/types/get_custom_domain_response_content.py
new file mode 100644
index 00000000..0f9e0e94
--- /dev/null
+++ b/src/auth0/management/types/get_custom_domain_response_content.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_domain_status_filter_enum import CustomDomainStatusFilterEnum
+from .custom_domain_type_enum import CustomDomainTypeEnum
+from .domain_certificate import DomainCertificate
+from .domain_metadata import DomainMetadata
+from .domain_verification import DomainVerification
+
+
+class GetCustomDomainResponseContent(UniversalBaseModel):
+ custom_domain_id: str = pydantic.Field(default="cd_0000000000000001")
+ """
+ ID of the custom domain.
+ """
+
+ domain: str = pydantic.Field(default="login.mycompany.com")
+ """
+ Domain name.
+ """
+
+ primary: bool = pydantic.Field(default=False)
+ """
+ Whether this is a primary domain (true) or not (false).
+ """
+
+ status: CustomDomainStatusFilterEnum
+ type: CustomDomainTypeEnum
+ origin_domain_name: typing.Optional[str] = pydantic.Field(
+ default="mycompany_cd_0000000000000001.edge.tenants.auth0.com"
+ )
+ """
+ Intermediate address.
+ """
+
+ verification: typing.Optional[DomainVerification] = None
+ custom_client_ip_header: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The HTTP header to fetch the client's IP address
+ """
+
+ tls_policy: typing.Optional[str] = pydantic.Field(default="recommended")
+ """
+ The TLS version policy
+ """
+
+ domain_metadata: typing.Optional[DomainMetadata] = None
+ certificate: typing.Optional[DomainCertificate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_custom_signing_keys_response_content.py b/src/auth0/management/types/get_custom_signing_keys_response_content.py
new file mode 100644
index 00000000..67ca21fe
--- /dev/null
+++ b/src/auth0/management/types/get_custom_signing_keys_response_content.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_signing_key_jwk import CustomSigningKeyJwk
+
+
+class GetCustomSigningKeysResponseContent(UniversalBaseModel):
+ """
+ JWKS representing an array of custom public signing keys.
+ """
+
+ keys: typing.Optional[typing.List[CustomSigningKeyJwk]] = pydantic.Field(default=None)
+ """
+ An array of custom public signing keys.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_custom_texts_by_language_response_content.py b/src/auth0/management/types/get_custom_texts_by_language_response_content.py
new file mode 100644
index 00000000..d9fe0872
--- /dev/null
+++ b/src/auth0/management/types/get_custom_texts_by_language_response_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GetCustomTextsByLanguageResponseContent = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/get_directory_provisioning_default_mapping_response_content.py b/src/auth0/management/types/get_directory_provisioning_default_mapping_response_content.py
new file mode 100644
index 00000000..f743c4ec
--- /dev/null
+++ b/src/auth0/management/types/get_directory_provisioning_default_mapping_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .directory_provisioning_mapping_item import DirectoryProvisioningMappingItem
+
+
+class GetDirectoryProvisioningDefaultMappingResponseContent(UniversalBaseModel):
+ mapping: typing.Optional[typing.List[DirectoryProvisioningMappingItem]] = pydantic.Field(default=None)
+ """
+ The mapping between Auth0 and IDP user attributes
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_directory_provisioning_response_content.py b/src/auth0/management/types/get_directory_provisioning_response_content.py
new file mode 100644
index 00000000..a7c86f02
--- /dev/null
+++ b/src/auth0/management/types/get_directory_provisioning_response_content.py
@@ -0,0 +1,69 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .directory_provisioning_mapping_item import DirectoryProvisioningMappingItem
+
+
+class GetDirectoryProvisioningResponseContent(UniversalBaseModel):
+ connection_id: str = pydantic.Field()
+ """
+ The connection's identifier
+ """
+
+ connection_name: str = pydantic.Field()
+ """
+ The connection's name
+ """
+
+ strategy: str = pydantic.Field()
+ """
+ The connection's strategy
+ """
+
+ mapping: typing.List[DirectoryProvisioningMappingItem] = pydantic.Field()
+ """
+ The mapping between Auth0 and IDP user attributes
+ """
+
+ synchronize_automatically: bool = pydantic.Field()
+ """
+ Whether periodic automatic synchronization is enabled
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ The timestamp at which the directory provisioning configuration was created
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ The timestamp at which the directory provisioning configuration was last updated
+ """
+
+ last_synchronization_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The timestamp at which the connection was last synchronized
+ """
+
+ last_synchronization_status: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The status of the last synchronization
+ """
+
+ last_synchronization_error: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The error message of the last synchronization, if any
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_email_provider_response_content.py b/src/auth0/management/types/get_email_provider_response_content.py
new file mode 100644
index 00000000..6afdc985
--- /dev/null
+++ b/src/auth0/management/types/get_email_provider_response_content.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .email_provider_credentials import EmailProviderCredentials
+from .email_provider_settings import EmailProviderSettings
+
+
+class GetEmailProviderResponseContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="sendgrid")
+ """
+ Name of the email provider. Can be `mailgun`, `mandrill`, `sendgrid`, `ses`, `sparkpost`, `smtp`, `azure_cs`, `ms365`, or `custom`.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether the provider is enabled (true) or disabled (false).
+ """
+
+ default_from_address: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Email address to use as "from" when no other address specified.
+ """
+
+ credentials: typing.Optional[EmailProviderCredentials] = None
+ settings: typing.Optional[EmailProviderSettings] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_email_template_response_content.py b/src/auth0/management/types/get_email_template_response_content.py
new file mode 100644
index 00000000..1b33fb01
--- /dev/null
+++ b/src/auth0/management/types/get_email_template_response_content.py
@@ -0,0 +1,69 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .email_template_name_enum import EmailTemplateNameEnum
+
+
+class GetEmailTemplateResponseContent(UniversalBaseModel):
+ template: typing.Optional[EmailTemplateNameEnum] = None
+ body: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Body of the email template.
+ """
+
+ from_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="from")] = pydantic.Field(
+ default="sender@auth0.com"
+ )
+ """
+ Senders `from` email address.
+ """
+
+ result_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="resultUrl")] = pydantic.Field(
+ default=None
+ )
+ """
+ URL to redirect the user to after a successful action.
+ """
+
+ subject: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Subject line of the email.
+ """
+
+ syntax: typing.Optional[str] = pydantic.Field(default="liquid")
+ """
+ Syntax of the template body.
+ """
+
+ url_lifetime_in_seconds: typing_extensions.Annotated[
+ typing.Optional[float], FieldMetadata(alias="urlLifetimeInSeconds")
+ ] = pydantic.Field(default=None)
+ """
+ Lifetime in seconds that the link within the email will be valid for.
+ """
+
+ include_email_in_redirect: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="includeEmailInRedirect")
+ ] = pydantic.Field(default=None)
+ """
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the template is enabled (true) or disabled (false).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_encryption_key_response_content.py b/src/auth0/management/types/get_encryption_key_response_content.py
new file mode 100644
index 00000000..5ae3b5ff
--- /dev/null
+++ b/src/auth0/management/types/get_encryption_key_response_content.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .encryption_key_state import EncryptionKeyState
+from .encryption_key_type import EncryptionKeyType
+
+
+class GetEncryptionKeyResponseContent(UniversalBaseModel):
+ """
+ Encryption key
+ """
+
+ kid: str = pydantic.Field()
+ """
+ Key ID
+ """
+
+ type: EncryptionKeyType
+ state: EncryptionKeyState
+ created_at: dt.datetime = pydantic.Field()
+ """
+ Key creation timestamp
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ Key update timestamp
+ """
+
+ parent_kid: str = pydantic.Field()
+ """
+ ID of parent wrapping key
+ """
+
+ public_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Public key in PEM format
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_event_stream_delivery_history_response_content.py b/src/auth0/management/types/get_event_stream_delivery_history_response_content.py
new file mode 100644
index 00000000..8822bba2
--- /dev/null
+++ b/src/auth0/management/types/get_event_stream_delivery_history_response_content.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .event_stream_cloud_event import EventStreamCloudEvent
+from .event_stream_delivery_attempt import EventStreamDeliveryAttempt
+from .event_stream_delivery_event_type_enum import EventStreamDeliveryEventTypeEnum
+from .event_stream_delivery_status_enum import EventStreamDeliveryStatusEnum
+
+
+class GetEventStreamDeliveryHistoryResponseContent(UniversalBaseModel):
+ """
+ Metadata about a specific attempt to deliver an event
+ """
+
+ id: str = pydantic.Field()
+ """
+ Unique identifier for the delivery
+ """
+
+ event_stream_id: str = pydantic.Field()
+ """
+ Unique identifier for the event stream.
+ """
+
+ status: EventStreamDeliveryStatusEnum = "failed"
+ event_type: EventStreamDeliveryEventTypeEnum
+ attempts: typing.List[EventStreamDeliveryAttempt] = pydantic.Field()
+ """
+ Results of delivery attempts
+ """
+
+ event: typing.Optional[EventStreamCloudEvent] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_event_stream_response_content.py b/src/auth0/management/types/get_event_stream_response_content.py
new file mode 100644
index 00000000..44a1d3b7
--- /dev/null
+++ b/src/auth0/management/types/get_event_stream_response_content.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .event_stream_action_response_content import EventStreamActionResponseContent
+from .event_stream_event_bridge_response_content import EventStreamEventBridgeResponseContent
+from .event_stream_webhook_response_content import EventStreamWebhookResponseContent
+
+GetEventStreamResponseContent = typing.Union[
+ EventStreamWebhookResponseContent, EventStreamEventBridgeResponseContent, EventStreamActionResponseContent
+]
diff --git a/src/auth0/management/types/get_flow_execution_response_content.py b/src/auth0/management/types/get_flow_execution_response_content.py
new file mode 100644
index 00000000..5ae33cc9
--- /dev/null
+++ b/src/auth0/management/types/get_flow_execution_response_content.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .flow_execution_debug import FlowExecutionDebug
+
+
+class GetFlowExecutionResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Flow execution identifier
+ """
+
+ trace_id: str = pydantic.Field()
+ """
+ Trace id
+ """
+
+ journey_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Journey id
+ """
+
+ status: str = pydantic.Field()
+ """
+ Execution status
+ """
+
+ debug: typing.Optional[FlowExecutionDebug] = None
+ created_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this flow execution was created.
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this flow execution was updated.
+ """
+
+ started_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date when this flow execution started.
+ """
+
+ ended_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date when this flow execution ended.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_flow_request_parameters_hydrate_enum.py b/src/auth0/management/types/get_flow_request_parameters_hydrate_enum.py
new file mode 100644
index 00000000..724065ca
--- /dev/null
+++ b/src/auth0/management/types/get_flow_request_parameters_hydrate_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GetFlowRequestParametersHydrateEnum = typing.Union[typing.Literal["form_count", "forms"], typing.Any]
diff --git a/src/auth0/management/types/get_flow_response_content.py b/src/auth0/management/types/get_flow_response_content.py
new file mode 100644
index 00000000..ba4e56b4
--- /dev/null
+++ b/src/auth0/management/types/get_flow_response_content.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
+
+
+class GetFlowResponseContent(UniversalBaseModel):
+ id: str
+ name: str
+ actions: typing.Optional[typing.List["FlowAction"]] = None
+ created_at: dt.datetime
+ updated_at: dt.datetime
+ executed_at: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
+
+
+from .flow_action import FlowAction # noqa: E402, I001
+from .flow_action_flow import FlowActionFlow # noqa: E402, I001
+from .flow_action_flow_boolean_condition import FlowActionFlowBooleanCondition # noqa: E402, I001
+from .flow_action_flow_boolean_condition_params import FlowActionFlowBooleanConditionParams # noqa: E402, I001
+
+update_forward_refs(
+ GetFlowResponseContent,
+ FlowAction=FlowAction,
+ FlowActionFlow=FlowActionFlow,
+ FlowActionFlowBooleanCondition=FlowActionFlowBooleanCondition,
+ FlowActionFlowBooleanConditionParams=FlowActionFlowBooleanConditionParams,
+)
diff --git a/src/auth0/management/types/get_flows_vault_connection_response_content.py b/src/auth0/management/types/get_flows_vault_connection_response_content.py
new file mode 100644
index 00000000..07580154
--- /dev/null
+++ b/src/auth0/management/types/get_flows_vault_connection_response_content.py
@@ -0,0 +1,65 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetFlowsVaultConnectionResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Flows Vault Connection identifier.
+ """
+
+ app_id: str = pydantic.Field()
+ """
+ Flows Vault Connection app identifier.
+ """
+
+ environment: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Flows Vault Connection environment.
+ """
+
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ account_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Flows Vault Connection custom account name.
+ """
+
+ ready: bool = pydantic.Field()
+ """
+ Whether the Flows Vault Connection is configured.
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was created.
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was updated.
+ """
+
+ refreshed_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was refreshed.
+ """
+
+ fingerprint: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_form_response_content.py b/src/auth0/management/types/get_form_response_content.py
new file mode 100644
index 00000000..d2989080
--- /dev/null
+++ b/src/auth0/management/types/get_form_response_content.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_ending_node import FormEndingNode
+from .form_languages import FormLanguages
+from .form_messages import FormMessages
+from .form_node_list import FormNodeList
+from .form_start_node import FormStartNode
+from .form_style import FormStyle
+from .form_translations import FormTranslations
+
+
+class GetFormResponseContent(UniversalBaseModel):
+ id: str
+ name: str
+ messages: typing.Optional[FormMessages] = None
+ languages: typing.Optional[FormLanguages] = None
+ translations: typing.Optional[FormTranslations] = None
+ nodes: typing.Optional[FormNodeList] = None
+ start: typing.Optional[FormStartNode] = None
+ ending: typing.Optional[FormEndingNode] = None
+ style: typing.Optional[FormStyle] = None
+ created_at: dt.datetime
+ updated_at: dt.datetime
+ embedded_at: typing.Optional[str] = None
+ submitted_at: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_enrollment_response_content.py b/src/auth0/management/types/get_guardian_enrollment_response_content.py
new file mode 100644
index 00000000..4b183e38
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_enrollment_response_content.py
@@ -0,0 +1,43 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_enrollment_date import GuardianEnrollmentDate
+from .guardian_enrollment_status import GuardianEnrollmentStatus
+
+
+class GetGuardianEnrollmentResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field(default="dev_0000000000000001")
+ """
+ ID for this enrollment.
+ """
+
+ status: typing.Optional[GuardianEnrollmentStatus] = None
+ name: typing.Optional[str] = pydantic.Field(default="iPhone 7")
+ """
+ Device name (only for push notification).
+ """
+
+ identifier: typing.Optional[str] = pydantic.Field(default="76dc-a90c-a88c-a90c-a88c-a88c-a90c")
+ """
+ Device identifier. This is usually the phone identifier.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default="+1 999999999999")
+ """
+ Phone number.
+ """
+
+ enrolled_at: typing.Optional[GuardianEnrollmentDate] = None
+ last_auth: typing.Optional[GuardianEnrollmentDate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factor_duo_settings_response_content.py b/src/auth0/management/types/get_guardian_factor_duo_settings_response_content.py
new file mode 100644
index 00000000..fab5fd55
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factor_duo_settings_response_content.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetGuardianFactorDuoSettingsResponseContent(UniversalBaseModel):
+ ikey: typing.Optional[str] = None
+ skey: typing.Optional[str] = None
+ host: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factor_phone_message_types_response_content.py b/src/auth0/management/types/get_guardian_factor_phone_message_types_response_content.py
new file mode 100644
index 00000000..a42ffb11
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factor_phone_message_types_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_factor_phone_factor_message_type_enum import GuardianFactorPhoneFactorMessageTypeEnum
+
+
+class GetGuardianFactorPhoneMessageTypesResponseContent(UniversalBaseModel):
+ message_types: typing.Optional[typing.List[GuardianFactorPhoneFactorMessageTypeEnum]] = pydantic.Field(default=None)
+ """
+ The list of phone factors to enable on the tenant. Can include `sms` and `voice`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factor_phone_templates_response_content.py b/src/auth0/management/types/get_guardian_factor_phone_templates_response_content.py
new file mode 100644
index 00000000..a5d1e346
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factor_phone_templates_response_content.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetGuardianFactorPhoneTemplatesResponseContent(UniversalBaseModel):
+ enrollment_message: str = pydantic.Field(
+ default="{{code}} is your verification code for {{tenant.friendly_name}}. Please enter this code to verify your enrollment."
+ )
+ """
+ Message sent to the user when they are invited to enroll with a phone number.
+ """
+
+ verification_message: str = pydantic.Field(
+ default="{{code}} is your verification code for {{tenant.friendly_name}}"
+ )
+ """
+ Message sent to the user when they are prompted to verify their account.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factor_sms_templates_response_content.py b/src/auth0/management/types/get_guardian_factor_sms_templates_response_content.py
new file mode 100644
index 00000000..cfb101cd
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factor_sms_templates_response_content.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetGuardianFactorSmsTemplatesResponseContent(UniversalBaseModel):
+ enrollment_message: str = pydantic.Field(
+ default="{{code}} is your verification code for {{tenant.friendly_name}}. Please enter this code to verify your enrollment."
+ )
+ """
+ Message sent to the user when they are invited to enroll with a phone number.
+ """
+
+ verification_message: str = pydantic.Field(
+ default="{{code}} is your verification code for {{tenant.friendly_name}}"
+ )
+ """
+ Message sent to the user when they are prompted to verify their account.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factors_provider_apns_response_content.py b/src/auth0/management/types/get_guardian_factors_provider_apns_response_content.py
new file mode 100644
index 00000000..d8493787
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factors_provider_apns_response_content.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetGuardianFactorsProviderApnsResponseContent(UniversalBaseModel):
+ bundle_id: typing.Optional[str] = None
+ sandbox: typing.Optional[bool] = None
+ enabled: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factors_provider_phone_response_content.py b/src/auth0/management/types/get_guardian_factors_provider_phone_response_content.py
new file mode 100644
index 00000000..05cd4856
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factors_provider_phone_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_factors_provider_sms_provider_enum import GuardianFactorsProviderSmsProviderEnum
+
+
+class GetGuardianFactorsProviderPhoneResponseContent(UniversalBaseModel):
+ provider: typing.Optional[GuardianFactorsProviderSmsProviderEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factors_provider_phone_twilio_response_content.py b/src/auth0/management/types/get_guardian_factors_provider_phone_twilio_response_content.py
new file mode 100644
index 00000000..bc8fa831
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factors_provider_phone_twilio_response_content.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class GetGuardianFactorsProviderPhoneTwilioResponseContent(UniversalBaseModel):
+ from_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="from")] = pydantic.Field(
+ default="+1223323"
+ )
+ """
+ From number
+ """
+
+ messaging_service_sid: typing.Optional[str] = pydantic.Field(default="5dEkAiHLPCuQ1uJj4qNXcAnERFAL6cpq")
+ """
+ Copilot SID
+ """
+
+ auth_token: typing.Optional[str] = pydantic.Field(default="zw5Ku6z2sxhd0ZVXto5SDHX6KPDByJPU")
+ """
+ Twilio Authentication token
+ """
+
+ sid: typing.Optional[str] = pydantic.Field(default="wywA2BH4VqTpfywiDuyDAYZL3xQjoO40")
+ """
+ Twilio SID
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factors_provider_push_notification_response_content.py b/src/auth0/management/types/get_guardian_factors_provider_push_notification_response_content.py
new file mode 100644
index 00000000..cd4a9c8e
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factors_provider_push_notification_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_factors_provider_push_notification_provider_data_enum import (
+ GuardianFactorsProviderPushNotificationProviderDataEnum,
+)
+
+
+class GetGuardianFactorsProviderPushNotificationResponseContent(UniversalBaseModel):
+ provider: typing.Optional[GuardianFactorsProviderPushNotificationProviderDataEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factors_provider_sms_response_content.py b/src/auth0/management/types/get_guardian_factors_provider_sms_response_content.py
new file mode 100644
index 00000000..df91d100
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factors_provider_sms_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_factors_provider_sms_provider_enum import GuardianFactorsProviderSmsProviderEnum
+
+
+class GetGuardianFactorsProviderSmsResponseContent(UniversalBaseModel):
+ provider: typing.Optional[GuardianFactorsProviderSmsProviderEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factors_provider_sms_twilio_response_content.py b/src/auth0/management/types/get_guardian_factors_provider_sms_twilio_response_content.py
new file mode 100644
index 00000000..ae673585
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factors_provider_sms_twilio_response_content.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class GetGuardianFactorsProviderSmsTwilioResponseContent(UniversalBaseModel):
+ from_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="from")] = pydantic.Field(
+ default="+1223323"
+ )
+ """
+ From number
+ """
+
+ messaging_service_sid: typing.Optional[str] = pydantic.Field(default="5dEkAiHLPCuQ1uJj4qNXcAnERFAL6cpq")
+ """
+ Copilot SID
+ """
+
+ auth_token: typing.Optional[str] = pydantic.Field(default="zw5Ku6z2sxhd0ZVXto5SDHX6KPDByJPU")
+ """
+ Twilio Authentication token
+ """
+
+ sid: typing.Optional[str] = pydantic.Field(default="wywA2BH4VqTpfywiDuyDAYZL3xQjoO40")
+ """
+ Twilio SID
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_guardian_factors_provider_sns_response_content.py b/src/auth0/management/types/get_guardian_factors_provider_sns_response_content.py
new file mode 100644
index 00000000..3d32f79f
--- /dev/null
+++ b/src/auth0/management/types/get_guardian_factors_provider_sns_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetGuardianFactorsProviderSnsResponseContent(UniversalBaseModel):
+ aws_access_key_id: typing.Optional[str] = "wywA2BH4VqTpfywiDuyDAYZL3xQjoO40"
+ aws_secret_access_key: typing.Optional[str] = "B1ER5JHDGJL3C4sVAKK7SBsq806R3IpL"
+ aws_region: typing.Optional[str] = "us-west-1"
+ sns_apns_platform_application_arn: typing.Optional[str] = None
+ sns_gcm_platform_application_arn: typing.Optional[str] = "urn://yRMeBxgcCXh8MeTXPBAxhQnm6gP6f5nP"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_hook_response_content.py b/src/auth0/management/types/get_hook_response_content.py
new file mode 100644
index 00000000..619b489f
--- /dev/null
+++ b/src/auth0/management/types/get_hook_response_content.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .hook_dependencies import HookDependencies
+
+
+class GetHookResponseContent(UniversalBaseModel):
+ trigger_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="triggerId")] = pydantic.Field(
+ default=None
+ )
+ """
+ Trigger ID
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="00001")
+ """
+ ID of this hook.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="hook")
+ """
+ Name of this hook.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether this hook will be executed (true) or ignored (false).
+ """
+
+ script: typing.Optional[str] = pydantic.Field(
+ default="module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };"
+ )
+ """
+ Code to be executed when this hook runs.
+ """
+
+ dependencies: typing.Optional[HookDependencies] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_hook_secret_response_content.py b/src/auth0/management/types/get_hook_secret_response_content.py
new file mode 100644
index 00000000..73d455f7
--- /dev/null
+++ b/src/auth0/management/types/get_hook_secret_response_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GetHookSecretResponseContent = typing.Dict[str, str]
diff --git a/src/auth0/management/types/get_job_error_response_content.py b/src/auth0/management/types/get_job_error_response_content.py
new file mode 100644
index 00000000..4e4bc004
--- /dev/null
+++ b/src/auth0/management/types/get_job_error_response_content.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .get_job_import_user_error import GetJobImportUserError
+from .get_job_user_error import GetJobUserError
+
+
+class GetJobErrorResponseContent(UniversalBaseModel):
+ user: typing.Optional[GetJobUserError] = None
+ errors: typing.Optional[typing.List[GetJobImportUserError]] = pydantic.Field(default=None)
+ """
+ Errors importing the user.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_job_generic_error_response_content.py b/src/auth0/management/types/get_job_generic_error_response_content.py
new file mode 100644
index 00000000..89219e12
--- /dev/null
+++ b/src/auth0/management/types/get_job_generic_error_response_content.py
@@ -0,0 +1,47 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetJobGenericErrorResponseContent(UniversalBaseModel):
+ status: str = pydantic.Field(default="pending")
+ """
+ Status of this job.
+ """
+
+ type: str = pydantic.Field(default="users_import")
+ """
+ Type of job this is.
+ """
+
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ When this job was created.
+ """
+
+ id: str = pydantic.Field(default="job_0000000000000001")
+ """
+ ID of this job.
+ """
+
+ connection_id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ connection_id of the connection this job uses.
+ """
+
+ status_details: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Status details.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_job_import_user_error.py b/src/auth0/management/types/get_job_import_user_error.py
new file mode 100644
index 00000000..4c489908
--- /dev/null
+++ b/src/auth0/management/types/get_job_import_user_error.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetJobImportUserError(UniversalBaseModel):
+ code: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Error code.
+ """
+
+ message: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Error message.
+ """
+
+ path: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Error field.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_job_response_content.py b/src/auth0/management/types/get_job_response_content.py
new file mode 100644
index 00000000..82d67e97
--- /dev/null
+++ b/src/auth0/management/types/get_job_response_content.py
@@ -0,0 +1,64 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .job_file_format_enum import JobFileFormatEnum
+
+
+class GetJobResponseContent(UniversalBaseModel):
+ status: str = pydantic.Field(default="pending")
+ """
+ Status of this job.
+ """
+
+ type: str = pydantic.Field(default="users_import")
+ """
+ Type of job this is.
+ """
+
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ When this job was created.
+ """
+
+ id: str = pydantic.Field(default="job_0000000000000001")
+ """
+ ID of this job.
+ """
+
+ connection_id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ connection_id of the connection this job uses.
+ """
+
+ location: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL to download the result of this job.
+ """
+
+ percentage_done: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Completion percentage of this job.
+ """
+
+ time_left_seconds: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Estimated time remaining before job completes.
+ """
+
+ format: typing.Optional[JobFileFormatEnum] = None
+ status_details: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Status details.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_job_user_error.py b/src/auth0/management/types/get_job_user_error.py
new file mode 100644
index 00000000..d165a6d3
--- /dev/null
+++ b/src/auth0/management/types/get_job_user_error.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GetJobUserError = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/get_log_response_content.py b/src/auth0/management/types/get_log_response_content.py
new file mode 100644
index 00000000..fb513a1b
--- /dev/null
+++ b/src/auth0/management/types/get_log_response_content.py
@@ -0,0 +1,115 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .log_date import LogDate
+from .log_details import LogDetails
+from .log_location_info import LogLocationInfo
+from .log_security_context import LogSecurityContext
+
+
+class GetLogResponseContent(UniversalBaseModel):
+ date: typing.Optional[LogDate] = None
+ type: typing.Optional[str] = pydantic.Field(default="sapi")
+ """
+ Type of event.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Description of this event.
+ """
+
+ connection: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the connection the event relates to.
+ """
+
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the connection the event relates to.
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default="AaiyAPdpYdesoKnqjj8HJqRn4T5titww")
+ """
+ ID of the client (application).
+ """
+
+ client_name: typing.Optional[str] = pydantic.Field(default="My application Name")
+ """
+ Name of the client (application).
+ """
+
+ ip: typing.Optional[str] = pydantic.Field(default="190.257.209.19")
+ """
+ IP address of the log event source.
+ """
+
+ hostname: typing.Optional[str] = pydantic.Field(default="190.257.209.19")
+ """
+ Hostname the event applies to.
+ """
+
+ user_id: typing.Optional[str] = pydantic.Field(default="auth0|56c75c4e42b6359e98374bc2")
+ """
+ ID of the user involved in the event.
+ """
+
+ user_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the user involved in the event.
+ """
+
+ audience: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ API audience the event applies to.
+ """
+
+ scope: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Scope permissions applied to the event.
+ """
+
+ strategy: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the strategy involved in the event.
+ """
+
+ strategy_type: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Type of strategy involved in the event.
+ """
+
+ log_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique ID of the event.
+ """
+
+ is_mobile: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isMobile")] = pydantic.Field(
+ default=None
+ )
+ """
+ Whether the client was a mobile device (true) or desktop/laptop/server (false).
+ """
+
+ details: typing.Optional[LogDetails] = None
+ user_agent: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ User agent string from the client device that caused the event.
+ """
+
+ security_context: typing.Optional[LogSecurityContext] = None
+ location_info: typing.Optional[LogLocationInfo] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_log_stream_response_content.py b/src/auth0/management/types/get_log_stream_response_content.py
new file mode 100644
index 00000000..a5ea6c8e
--- /dev/null
+++ b/src/auth0/management/types/get_log_stream_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .log_stream_datadog_response_schema import LogStreamDatadogResponseSchema
+from .log_stream_event_bridge_response_schema import LogStreamEventBridgeResponseSchema
+from .log_stream_event_grid_response_schema import LogStreamEventGridResponseSchema
+from .log_stream_http_response_schema import LogStreamHttpResponseSchema
+from .log_stream_mixpanel_response_schema import LogStreamMixpanelResponseSchema
+from .log_stream_segment_response_schema import LogStreamSegmentResponseSchema
+from .log_stream_splunk_response_schema import LogStreamSplunkResponseSchema
+from .log_stream_sumo_response_schema import LogStreamSumoResponseSchema
+
+GetLogStreamResponseContent = typing.Union[
+ LogStreamHttpResponseSchema,
+ LogStreamEventBridgeResponseSchema,
+ LogStreamEventGridResponseSchema,
+ LogStreamDatadogResponseSchema,
+ LogStreamSplunkResponseSchema,
+ LogStreamSumoResponseSchema,
+ LogStreamSegmentResponseSchema,
+ LogStreamMixpanelResponseSchema,
+]
diff --git a/src/auth0/management/types/get_network_acls_response_content.py b/src/auth0/management/types/get_network_acls_response_content.py
new file mode 100644
index 00000000..451faf0c
--- /dev/null
+++ b/src/auth0/management/types/get_network_acls_response_content.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .network_acl_rule import NetworkAclRule
+
+
+class GetNetworkAclsResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = None
+ description: typing.Optional[str] = None
+ active: typing.Optional[bool] = None
+ priority: typing.Optional[float] = None
+ rule: typing.Optional[NetworkAclRule] = None
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The timestamp when the Network ACL Configuration was created
+ """
+
+ updated_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The timestamp when the Network ACL Configuration was last updated
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_organization_by_name_response_content.py b/src/auth0/management/types/get_organization_by_name_response_content.py
new file mode 100644
index 00000000..9d55f2ed
--- /dev/null
+++ b/src/auth0/management/types/get_organization_by_name_response_content.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_branding import OrganizationBranding
+from .organization_metadata import OrganizationMetadata
+from .token_quota import TokenQuota
+
+
+class GetOrganizationByNameResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Organization identifier.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="organization-1")
+ """
+ The name of this organization.
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default="Acme Users")
+ """
+ Friendly name of this organization.
+ """
+
+ branding: typing.Optional[OrganizationBranding] = None
+ metadata: typing.Optional[OrganizationMetadata] = None
+ token_quota: typing.Optional[TokenQuota] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_organization_connection_response_content.py b/src/auth0/management/types/get_organization_connection_response_content.py
new file mode 100644
index 00000000..3c26e260
--- /dev/null
+++ b/src/auth0/management/types/get_organization_connection_response_content.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_connection_information import OrganizationConnectionInformation
+
+
+class GetOrganizationConnectionResponseContent(UniversalBaseModel):
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the connection.
+ """
+
+ assign_membership_on_login: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+ """
+
+ is_signup_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+ """
+
+ connection: typing.Optional[OrganizationConnectionInformation] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_organization_discovery_domain_response_content.py b/src/auth0/management/types/get_organization_discovery_domain_response_content.py
new file mode 100644
index 00000000..ef112a0a
--- /dev/null
+++ b/src/auth0/management/types/get_organization_discovery_domain_response_content.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_discovery_domain_status import OrganizationDiscoveryDomainStatus
+
+
+class GetOrganizationDiscoveryDomainResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Organization discovery domain identifier.
+ """
+
+ domain: str = pydantic.Field()
+ """
+ The domain name to associate with the organization e.g. acme.com.
+ """
+
+ status: OrganizationDiscoveryDomainStatus
+ verification_txt: str = pydantic.Field()
+ """
+ A unique token generated for the discovery domain. This must be placed in a DNS TXT record at the location specified by the verification_host field to prove domain ownership.
+ """
+
+ verification_host: str = pydantic.Field()
+ """
+ The full domain where the TXT record should be added.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_organization_invitation_response_content.py b/src/auth0/management/types/get_organization_invitation_response_content.py
new file mode 100644
index 00000000..220e0877
--- /dev/null
+++ b/src/auth0/management/types/get_organization_invitation_response_content.py
@@ -0,0 +1,73 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .app_metadata import AppMetadata
+from .organization_invitation_invitee import OrganizationInvitationInvitee
+from .organization_invitation_inviter import OrganizationInvitationInviter
+from .user_metadata import UserMetadata
+
+
+class GetOrganizationInvitationResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="uinv_0000000000000001")
+ """
+ The id of the user invitation.
+ """
+
+ organization_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Organization identifier.
+ """
+
+ inviter: typing.Optional[OrganizationInvitationInviter] = None
+ invitee: typing.Optional[OrganizationInvitationInvitee] = None
+ invitation_url: typing.Optional[str] = pydantic.Field(
+ default="https://mycompany.org/login?invitation=f81dWWYW6gzGGicxT8Ha0txBkGNcAcYr&organization=org_0000000000000001&organization_name=acme"
+ )
+ """
+ The invitation url to be send to the invitee.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted timestamp representing the creation time of the invitation.
+ """
+
+ expires_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted timestamp representing the expiration time of the invitation.
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default="AaiyAPdpYdesoKnqjj8HJqRn4T5titww")
+ """
+ Auth0 client ID. Used to resolve the application's login initiation endpoint.
+ """
+
+ connection_id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ The id of the connection to force invitee to authenticate with.
+ """
+
+ app_metadata: typing.Optional[AppMetadata] = None
+ user_metadata: typing.Optional[UserMetadata] = None
+ roles: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of roles IDs to associated with the user.
+ """
+
+ ticket_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The id of the invitation ticket
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_organization_response_content.py b/src/auth0/management/types/get_organization_response_content.py
new file mode 100644
index 00000000..9c0dfc8b
--- /dev/null
+++ b/src/auth0/management/types/get_organization_response_content.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_branding import OrganizationBranding
+from .organization_metadata import OrganizationMetadata
+from .token_quota import TokenQuota
+
+
+class GetOrganizationResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Organization identifier.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="organization-1")
+ """
+ The name of this organization.
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default="Acme Users")
+ """
+ Friendly name of this organization.
+ """
+
+ branding: typing.Optional[OrganizationBranding] = None
+ metadata: typing.Optional[OrganizationMetadata] = None
+ token_quota: typing.Optional[TokenQuota] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_partials_response_content.py b/src/auth0/management/types/get_partials_response_content.py
new file mode 100644
index 00000000..b78f0808
--- /dev/null
+++ b/src/auth0/management/types/get_partials_response_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GetPartialsResponseContent = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/get_phone_template_response_content.py b/src/auth0/management/types/get_phone_template_response_content.py
new file mode 100644
index 00000000..daccab89
--- /dev/null
+++ b/src/auth0/management/types/get_phone_template_response_content.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .phone_template_content import PhoneTemplateContent
+from .phone_template_notification_type_enum import PhoneTemplateNotificationTypeEnum
+
+
+class GetPhoneTemplateResponseContent(UniversalBaseModel):
+ id: str
+ channel: typing.Optional[str] = None
+ customizable: typing.Optional[bool] = None
+ tenant: typing.Optional[str] = None
+ content: PhoneTemplateContent
+ type: PhoneTemplateNotificationTypeEnum
+ disabled: bool = pydantic.Field(default=False)
+ """
+ Whether the template is enabled (false) or disabled (true).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_refresh_token_response_content.py b/src/auth0/management/types/get_refresh_token_response_content.py
new file mode 100644
index 00000000..2931ba93
--- /dev/null
+++ b/src/auth0/management/types/get_refresh_token_response_content.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .refresh_token_date import RefreshTokenDate
+from .refresh_token_device import RefreshTokenDevice
+from .refresh_token_resource_server import RefreshTokenResourceServer
+from .refresh_token_session_id import RefreshTokenSessionId
+
+
+class GetRefreshTokenResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the refresh token
+ """
+
+ user_id: typing.Optional[str] = pydantic.Field(default="auth0|507f1f77bcf86cd799439020")
+ """
+ ID of the user which can be used when interacting with other APIs.
+ """
+
+ created_at: typing.Optional[RefreshTokenDate] = None
+ idle_expires_at: typing.Optional[RefreshTokenDate] = None
+ expires_at: typing.Optional[RefreshTokenDate] = None
+ device: typing.Optional[RefreshTokenDevice] = None
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the client application granted with this refresh token
+ """
+
+ session_id: typing.Optional[RefreshTokenSessionId] = None
+ rotating: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the token is a rotating refresh token
+ """
+
+ resource_servers: typing.Optional[typing.List[RefreshTokenResourceServer]] = pydantic.Field(default=None)
+ """
+ A list of the resource server IDs associated to this refresh-token and their granted scopes
+ """
+
+ last_exchanged_at: typing.Optional[RefreshTokenDate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_resource_server_response_content.py b/src/auth0/management/types/get_resource_server_response_content.py
new file mode 100644
index 00000000..d645315c
--- /dev/null
+++ b/src/auth0/management/types/get_resource_server_response_content.py
@@ -0,0 +1,91 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .resource_server_consent_policy_enum import ResourceServerConsentPolicyEnum
+from .resource_server_proof_of_possession import ResourceServerProofOfPossession
+from .resource_server_scope import ResourceServerScope
+from .resource_server_subject_type_authorization import ResourceServerSubjectTypeAuthorization
+from .resource_server_token_dialect_response_enum import ResourceServerTokenDialectResponseEnum
+from .resource_server_token_encryption import ResourceServerTokenEncryption
+from .signing_algorithm_enum import SigningAlgorithmEnum
+
+
+class GetResourceServerResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the API (resource server).
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Friendly name for this resource server. Can not contain `<` or `>` characters.
+ """
+
+ is_system: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this is an Auth0 system API (true) or a custom API (false).
+ """
+
+ identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique identifier for the API used as the audience parameter on authorization calls. Can not be changed once set.
+ """
+
+ scopes: typing.Optional[typing.List[ResourceServerScope]] = pydantic.Field(default=None)
+ """
+ List of permissions (scopes) that this API uses.
+ """
+
+ signing_alg: typing.Optional[SigningAlgorithmEnum] = None
+ signing_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Secret used to sign tokens when using symmetric algorithms (HS256).
+ """
+
+ allow_offline_access: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether refresh tokens can be issued for this API (true) or not (false).
+ """
+
+ skip_consent_for_verifiable_first_party_clients: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether to skip user consent for applications flagged as first party (true) or not (false).
+ """
+
+ token_lifetime: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Expiration value (in seconds) for access tokens issued for this API from the token endpoint.
+ """
+
+ token_lifetime_for_web: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Expiration value (in seconds) for access tokens issued for this API via Implicit or Hybrid Flows. Cannot be greater than the `token_lifetime` value.
+ """
+
+ enforce_policies: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether authorization polices are enforced (true) or unenforced (false).
+ """
+
+ token_dialect: typing.Optional[ResourceServerTokenDialectResponseEnum] = None
+ token_encryption: typing.Optional[ResourceServerTokenEncryption] = None
+ consent_policy: typing.Optional[ResourceServerConsentPolicyEnum] = None
+ authorization_details: typing.Optional[typing.List[typing.Any]] = None
+ proof_of_possession: typing.Optional[ResourceServerProofOfPossession] = None
+ subject_type_authorization: typing.Optional[ResourceServerSubjectTypeAuthorization] = None
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The client ID of the client that this resource server is linked to
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_risk_assessments_settings_new_device_response_content.py b/src/auth0/management/types/get_risk_assessments_settings_new_device_response_content.py
new file mode 100644
index 00000000..51f59f55
--- /dev/null
+++ b/src/auth0/management/types/get_risk_assessments_settings_new_device_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetRiskAssessmentsSettingsNewDeviceResponseContent(UniversalBaseModel):
+ remember_for: int = pydantic.Field()
+ """
+ Length of time to remember devices for, in days.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_risk_assessments_settings_response_content.py b/src/auth0/management/types/get_risk_assessments_settings_response_content.py
new file mode 100644
index 00000000..8d4e57a6
--- /dev/null
+++ b/src/auth0/management/types/get_risk_assessments_settings_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetRiskAssessmentsSettingsResponseContent(UniversalBaseModel):
+ enabled: bool = pydantic.Field()
+ """
+ Whether or not risk assessment is enabled.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_role_response_content.py b/src/auth0/management/types/get_role_response_content.py
new file mode 100644
index 00000000..c4b392a0
--- /dev/null
+++ b/src/auth0/management/types/get_role_response_content.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetRoleResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID for this role.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of this role.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Description of this role.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_rule_response_content.py b/src/auth0/management/types/get_rule_response_content.py
new file mode 100644
index 00000000..a39a4dc3
--- /dev/null
+++ b/src/auth0/management/types/get_rule_response_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetRuleResponseContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="rule_1")
+ """
+ Name of this rule.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ ID of this rule.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether the rule is enabled (true), or disabled (false).
+ """
+
+ script: typing.Optional[str] = pydantic.Field(
+ default="function (user, context, callback) {\n callback(null, user, context);\n}"
+ )
+ """
+ Code to be executed when this rule runs.
+ """
+
+ order: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+ """
+
+ stage: typing.Optional[str] = pydantic.Field(default="login_success")
+ """
+ Execution stage of this rule. Can be `login_success`, `login_failure`, or `pre_authorize`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_scim_configuration_default_mapping_response_content.py b/src/auth0/management/types/get_scim_configuration_default_mapping_response_content.py
new file mode 100644
index 00000000..b11f5295
--- /dev/null
+++ b/src/auth0/management/types/get_scim_configuration_default_mapping_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .scim_mapping_item import ScimMappingItem
+
+
+class GetScimConfigurationDefaultMappingResponseContent(UniversalBaseModel):
+ mapping: typing.Optional[typing.List[ScimMappingItem]] = pydantic.Field(default=None)
+ """
+ The mapping between auth0 and SCIM
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_scim_configuration_response_content.py b/src/auth0/management/types/get_scim_configuration_response_content.py
new file mode 100644
index 00000000..c430f781
--- /dev/null
+++ b/src/auth0/management/types/get_scim_configuration_response_content.py
@@ -0,0 +1,58 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .scim_mapping_item import ScimMappingItem
+
+
+class GetScimConfigurationResponseContent(UniversalBaseModel):
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The connection's identifier
+ """
+
+ connection_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The connection's identifier
+ """
+
+ strategy: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The connection's strategy
+ """
+
+ tenant_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The tenant's name
+ """
+
+ user_id_attribute: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ User ID attribute for generating unique user ids
+ """
+
+ mapping: typing.Optional[typing.List[ScimMappingItem]] = pydantic.Field(default=None)
+ """
+ The mapping between auth0 and SCIM
+ """
+
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The Date Time Scim Configuration was created
+ """
+
+ updated_on: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The Date Time Scim Configuration was last updated
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_scim_tokens_response_content.py b/src/auth0/management/types/get_scim_tokens_response_content.py
new file mode 100644
index 00000000..16ad2524
--- /dev/null
+++ b/src/auth0/management/types/get_scim_tokens_response_content.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .scim_token_item import ScimTokenItem
+
+GetScimTokensResponseContent = typing.List[ScimTokenItem]
diff --git a/src/auth0/management/types/get_self_service_profile_response_content.py b/src/auth0/management/types/get_self_service_profile_response_content.py
new file mode 100644
index 00000000..945bcb11
--- /dev/null
+++ b/src/auth0/management/types/get_self_service_profile_response_content.py
@@ -0,0 +1,64 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .self_service_profile_allowed_strategy_enum import SelfServiceProfileAllowedStrategyEnum
+from .self_service_profile_branding_properties import SelfServiceProfileBrandingProperties
+from .self_service_profile_user_attribute import SelfServiceProfileUserAttribute
+
+
+class GetSelfServiceProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="ssp_n7SNCL8seoyV1TuSTCnAeo")
+ """
+ The unique ID of the self-service Profile.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the self-service Profile.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The description of the self-service Profile.
+ """
+
+ user_attributes: typing.Optional[typing.List[SelfServiceProfileUserAttribute]] = pydantic.Field(default=None)
+ """
+ List of attributes to be mapped that will be shown to the user during the SS-SSO flow.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this self-service Profile was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this self-service Profile was updated.
+ """
+
+ branding: typing.Optional[SelfServiceProfileBrandingProperties] = None
+ allowed_strategies: typing.Optional[typing.List[SelfServiceProfileAllowedStrategyEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+ """
+
+ user_attribute_profile_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the user-attribute-profile to associate with this self-service profile.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_session_response_content.py b/src/auth0/management/types/get_session_response_content.py
new file mode 100644
index 00000000..b1457826
--- /dev/null
+++ b/src/auth0/management/types/get_session_response_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .session_authentication_signals import SessionAuthenticationSignals
+from .session_client_metadata import SessionClientMetadata
+from .session_cookie_metadata import SessionCookieMetadata
+from .session_date import SessionDate
+from .session_device_metadata import SessionDeviceMetadata
+from .session_metadata import SessionMetadata
+
+
+class GetSessionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the session
+ """
+
+ user_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the user which can be used when interacting with other APIs.
+ """
+
+ created_at: typing.Optional[SessionDate] = None
+ updated_at: typing.Optional[SessionDate] = None
+ authenticated_at: typing.Optional[SessionDate] = None
+ idle_expires_at: typing.Optional[SessionDate] = None
+ expires_at: typing.Optional[SessionDate] = None
+ last_interacted_at: typing.Optional[SessionDate] = None
+ device: typing.Optional[SessionDeviceMetadata] = None
+ clients: typing.Optional[typing.List[SessionClientMetadata]] = pydantic.Field(default=None)
+ """
+ List of client details for the session
+ """
+
+ authentication: typing.Optional[SessionAuthenticationSignals] = None
+ cookie: typing.Optional[SessionCookieMetadata] = None
+ session_metadata: typing.Optional[SessionMetadata] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_settings_response_content.py b/src/auth0/management/types/get_settings_response_content.py
new file mode 100644
index 00000000..0a11cfa4
--- /dev/null
+++ b/src/auth0/management/types/get_settings_response_content.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .universal_login_experience_enum import UniversalLoginExperienceEnum
+
+
+class GetSettingsResponseContent(UniversalBaseModel):
+ universal_login_experience: typing.Optional[UniversalLoginExperienceEnum] = None
+ identifier_first: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether identifier first is enabled or not
+ """
+
+ webauthn_platform_first_factor: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Use WebAuthn with Device Biometrics as the first authentication factor
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_signing_keys_response_content.py b/src/auth0/management/types/get_signing_keys_response_content.py
new file mode 100644
index 00000000..99e0ab55
--- /dev/null
+++ b/src/auth0/management/types/get_signing_keys_response_content.py
@@ -0,0 +1,73 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .signing_keys_date import SigningKeysDate
+
+
+class GetSigningKeysResponseContent(UniversalBaseModel):
+ kid: str = pydantic.Field(default="21hi274Rp02112mgkUGma")
+ """
+ The key id of the signing key
+ """
+
+ cert: str = pydantic.Field(
+ default="-----BEGIN CERTIFICATE-----\r\nMIIDDTCCA...YiA0TQhAt8=\r\n-----END CERTIFICATE-----"
+ )
+ """
+ The public certificate of the signing key
+ """
+
+ pkcs_7: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="pkcs7")] = pydantic.Field(
+ default="-----BEGIN PKCS7-----\r\nMIIDPA....t8xAA==\r\n-----END PKCS7-----"
+ )
+ """
+ The public certificate of the signing key in pkcs7 format
+ """
+
+ current: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ True if the key is the the current key
+ """
+
+ next: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the key is the the next key
+ """
+
+ previous: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the key is the the previous key
+ """
+
+ current_since: typing.Optional[SigningKeysDate] = None
+ current_until: typing.Optional[SigningKeysDate] = None
+ fingerprint: str = pydantic.Field(default="CC:FB:DD:D8:9A:B5:DE:1B:F0:CC:36:D2:99:59:21:12:03:DD:A8:25")
+ """
+ The cert fingerprint
+ """
+
+ thumbprint: str = pydantic.Field(default="CCFBDDD89AB5DE1BF0CC36D29959211203DDA825")
+ """
+ The cert thumbprint
+ """
+
+ revoked: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the key is revoked
+ """
+
+ revoked_at: typing.Optional[SigningKeysDate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_supplemental_signals_response_content.py b/src/auth0/management/types/get_supplemental_signals_response_content.py
new file mode 100644
index 00000000..c50ea93b
--- /dev/null
+++ b/src/auth0/management/types/get_supplemental_signals_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetSupplementalSignalsResponseContent(UniversalBaseModel):
+ akamai_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates if incoming Akamai Headers should be processed
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_suspicious_ip_throttling_settings_response_content.py b/src/auth0/management/types/get_suspicious_ip_throttling_settings_response_content.py
new file mode 100644
index 00000000..840d0674
--- /dev/null
+++ b/src/auth0/management/types/get_suspicious_ip_throttling_settings_response_content.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .suspicious_ip_throttling_allowlist import SuspiciousIpThrottlingAllowlist
+from .suspicious_ip_throttling_shields_enum import SuspiciousIpThrottlingShieldsEnum
+from .suspicious_ip_throttling_stage import SuspiciousIpThrottlingStage
+
+
+class GetSuspiciousIpThrottlingSettingsResponseContent(UniversalBaseModel):
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether or not suspicious IP throttling attack protections are active.
+ """
+
+ shields: typing.Optional[typing.List[SuspiciousIpThrottlingShieldsEnum]] = pydantic.Field(default=None)
+ """
+ Action to take when a suspicious IP throttling threshold is violated.
+ Possible values: block, admin_notification.
+ """
+
+ allowlist: typing.Optional[SuspiciousIpThrottlingAllowlist] = None
+ stage: typing.Optional[SuspiciousIpThrottlingStage] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_tenant_settings_response_content.py b/src/auth0/management/types/get_tenant_settings_response_content.py
new file mode 100644
index 00000000..28608446
--- /dev/null
+++ b/src/auth0/management/types/get_tenant_settings_response_content.py
@@ -0,0 +1,153 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .default_token_quota import DefaultTokenQuota
+from .session_cookie_schema import SessionCookieSchema
+from .supported_locales import SupportedLocales
+from .tenant_oidc_logout_settings import TenantOidcLogoutSettings
+from .tenant_settings_device_flow import TenantSettingsDeviceFlow
+from .tenant_settings_error_page import TenantSettingsErrorPage
+from .tenant_settings_flags import TenantSettingsFlags
+from .tenant_settings_guardian_page import TenantSettingsGuardianPage
+from .tenant_settings_mtls import TenantSettingsMtls
+from .tenant_settings_password_page import TenantSettingsPasswordPage
+from .tenant_settings_resource_parameter_profile import TenantSettingsResourceParameterProfile
+from .tenant_settings_sessions import TenantSettingsSessions
+
+
+class GetTenantSettingsResponseContent(UniversalBaseModel):
+ change_password: typing.Optional[TenantSettingsPasswordPage] = None
+ guardian_mfa_page: typing.Optional[TenantSettingsGuardianPage] = None
+ default_audience: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Default audience for API authorization.
+ """
+
+ default_directory: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Name of connection used for password grants at the `/token`endpoint. The following connection types are supported: LDAP, AD, Database Connections, Passwordless, Windows Azure Active Directory, ADFS.
+ """
+
+ error_page: typing.Optional[TenantSettingsErrorPage] = None
+ device_flow: typing.Optional[TenantSettingsDeviceFlow] = None
+ default_token_quota: typing.Optional[DefaultTokenQuota] = None
+ flags: typing.Optional[TenantSettingsFlags] = None
+ friendly_name: typing.Optional[str] = pydantic.Field(default="My Company")
+ """
+ Friendly name for this tenant.
+ """
+
+ picture_url: typing.Optional[str] = pydantic.Field(default="https://mycompany.org/logo.png")
+ """
+ URL of logo to be shown for this tenant (recommended size: 150x150)
+ """
+
+ support_email: typing.Optional[str] = pydantic.Field(default="support@mycompany.org")
+ """
+ End-user support email address.
+ """
+
+ support_url: typing.Optional[str] = pydantic.Field(default="https://mycompany.org/support")
+ """
+ End-user support URL.
+ """
+
+ allowed_logout_urls: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ URLs that are valid to redirect to after logout from Auth0.
+ """
+
+ session_lifetime: typing.Optional[float] = pydantic.Field(default=168.0)
+ """
+ Number of hours a session will stay valid.
+ """
+
+ idle_session_lifetime: typing.Optional[float] = pydantic.Field(default=72.0)
+ """
+ Number of hours for which a session can be inactive before the user must log in again.
+ """
+
+ ephemeral_session_lifetime: typing.Optional[float] = pydantic.Field(default=72.0)
+ """
+ Number of hours an ephemeral (non-persistent) session will stay valid.
+ """
+
+ idle_ephemeral_session_lifetime: typing.Optional[float] = pydantic.Field(default=24.0)
+ """
+ Number of hours for which an ephemeral (non-persistent) session can be inactive before the user must log in again.
+ """
+
+ sandbox_version: typing.Optional[str] = pydantic.Field(default="22")
+ """
+ Selected sandbox version for the extensibility environment.
+ """
+
+ legacy_sandbox_version: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Selected sandbox version for rules and hooks extensibility.
+ """
+
+ sandbox_versions_available: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Available sandbox versions for the extensibility environment.
+ """
+
+ default_redirection_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The default absolute redirection uri, must be https
+ """
+
+ enabled_locales: typing.Optional[typing.List[SupportedLocales]] = pydantic.Field(default=None)
+ """
+ Supported locales for the user interface.
+ """
+
+ session_cookie: typing.Optional[SessionCookieSchema] = None
+ sessions: typing.Optional[TenantSettingsSessions] = None
+ oidc_logout: typing.Optional[TenantOidcLogoutSettings] = None
+ allow_organization_name_in_authentication_api: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether to accept an organization name instead of an ID on auth endpoints
+ """
+
+ customize_mfa_in_postlogin_action: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether to enable flexible factors for MFA in the PostLogin action
+ """
+
+ acr_values_supported: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Supported ACR values
+ """
+
+ mtls: typing.Optional[TenantSettingsMtls] = None
+ pushed_authorization_requests_supported: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Enables the use of Pushed Authorization Requests
+ """
+
+ authorization_response_iss_parameter_supported: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Supports iss parameter in authorization responses
+ """
+
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+ """
+
+ resource_parameter_profile: typing.Optional[TenantSettingsResourceParameterProfile] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_token_exchange_profile_response_content.py b/src/auth0/management/types/get_token_exchange_profile_response_content.py
new file mode 100644
index 00000000..ce9efd36
--- /dev/null
+++ b/src/auth0/management/types/get_token_exchange_profile_response_content.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .token_exchange_profile_type_enum import TokenExchangeProfileTypeEnum
+
+
+class GetTokenExchangeProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The unique ID of the token exchange profile.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="Token Exchange Profile 1")
+ """
+ Friendly name of this profile.
+ """
+
+ subject_token_type: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+ """
+
+ action_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the Custom Token Exchange action to execute for this profile, in order to validate the subject_token. The action must use the custom-token-exchange trigger.
+ """
+
+ type: typing.Optional[TokenExchangeProfileTypeEnum] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this profile was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this profile was updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_universal_login_template.py b/src/auth0/management/types/get_universal_login_template.py
new file mode 100644
index 00000000..59b48b10
--- /dev/null
+++ b/src/auth0/management/types/get_universal_login_template.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GetUniversalLoginTemplate(UniversalBaseModel):
+ body: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The custom page template for the New Universal Login Experience
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_universal_login_template_response_content.py b/src/auth0/management/types/get_universal_login_template_response_content.py
new file mode 100644
index 00000000..220097aa
--- /dev/null
+++ b/src/auth0/management/types/get_universal_login_template_response_content.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .get_universal_login_template import GetUniversalLoginTemplate
+
+GetUniversalLoginTemplateResponseContent = typing.Union[GetUniversalLoginTemplate, str]
diff --git a/src/auth0/management/types/get_user_attribute_profile_response_content.py b/src/auth0/management/types/get_user_attribute_profile_response_content.py
new file mode 100644
index 00000000..c4ba0f4b
--- /dev/null
+++ b/src/auth0/management/types/get_user_attribute_profile_response_content.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_id import UserAttributeProfileId
+from .user_attribute_profile_name import UserAttributeProfileName
+from .user_attribute_profile_user_attributes import UserAttributeProfileUserAttributes
+from .user_attribute_profile_user_id import UserAttributeProfileUserId
+
+
+class GetUserAttributeProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[UserAttributeProfileId] = None
+ name: typing.Optional[UserAttributeProfileName] = None
+ user_id: typing.Optional[UserAttributeProfileUserId] = None
+ user_attributes: typing.Optional[UserAttributeProfileUserAttributes] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_user_attribute_profile_template_response_content.py b/src/auth0/management/types/get_user_attribute_profile_template_response_content.py
new file mode 100644
index 00000000..9acbcedf
--- /dev/null
+++ b/src/auth0/management/types/get_user_attribute_profile_template_response_content.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_template import UserAttributeProfileTemplate
+
+
+class GetUserAttributeProfileTemplateResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The id of the template.
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The user-friendly name of the template displayed in the UI.
+ """
+
+ template: typing.Optional[UserAttributeProfileTemplate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_user_authentication_method_response_content.py b/src/auth0/management/types/get_user_authentication_method_response_content.py
new file mode 100644
index 00000000..76911f19
--- /dev/null
+++ b/src/auth0/management/types/get_user_authentication_method_response_content.py
@@ -0,0 +1,109 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .authentication_method_type_enum import AuthenticationMethodTypeEnum
+from .preferred_authentication_method_enum import PreferredAuthenticationMethodEnum
+from .user_authentication_method_properties import UserAuthenticationMethodProperties
+
+
+class GetUserAuthenticationMethodResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ The ID of the authentication method (auto generated)
+ """
+
+ type: AuthenticationMethodTypeEnum
+ confirmed: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ The authentication method status
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ A human-readable label to identify the authentication method
+ """
+
+ authentication_methods: typing.Optional[typing.List[UserAuthenticationMethodProperties]] = None
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = None
+ link_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of a linked authentication method. Linked authentication methods will be deleted together.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to email and email-verification authentication methods only. The email address used to send verification messages.
+ """
+
+ key_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authentication methods only. The ID of the generated credential.
+ """
+
+ public_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authentication methods only. The public key.
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ Authenticator creation date
+ """
+
+ enrolled_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Enrollment date
+ """
+
+ last_auth_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Last authentication
+ """
+
+ credential_device_type: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. The kind of device the credential is stored on as defined by backup eligibility. "single_device" credentials cannot be backed up and synced to another device, "multi_device" credentials can be backed up if enabled by the end-user.
+ """
+
+ credential_backed_up: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. Whether the credential was backed up.
+ """
+
+ identity_user_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. The ID of the user identity linked with the authentication method.
+ """
+
+ user_agent: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. The user-agent of the browser used to create the passkey.
+ """
+
+ aaguid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkey authentication methods only. Authenticator Attestation Globally Unique Identifier.
+ """
+
+ relying_party_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn/passkey authentication methods only. The credential's relying party identifier.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_user_response_content.py b/src/auth0/management/types/get_user_response_content.py
new file mode 100644
index 00000000..95bfe101
--- /dev/null
+++ b/src/auth0/management/types/get_user_response_content.py
@@ -0,0 +1,106 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_app_metadata_schema import UserAppMetadataSchema
+from .user_date_schema import UserDateSchema
+from .user_identity_schema import UserIdentitySchema
+from .user_metadata_schema import UserMetadataSchema
+
+
+class GetUserResponseContent(UniversalBaseModel):
+ user_id: typing.Optional[str] = pydantic.Field(default="auth0|507f1f77bcf86cd799439020")
+ """
+ ID of the user which can be used when interacting with other APIs.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default="john.doe@gmail.com")
+ """
+ Email address of this user.
+ """
+
+ email_verified: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this email address is verified (true) or unverified (false).
+ """
+
+ username: typing.Optional[str] = pydantic.Field(default="johndoe")
+ """
+ Username of this user.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default="+199999999999999")
+ """
+ Phone number for this user. Follows the E.164 recommendation.
+ """
+
+ phone_verified: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this phone number has been verified (true) or not (false).
+ """
+
+ created_at: typing.Optional[UserDateSchema] = None
+ updated_at: typing.Optional[UserDateSchema] = None
+ identities: typing.Optional[typing.List[UserIdentitySchema]] = pydantic.Field(default=None)
+ """
+ Array of user identity objects when accounts are linked.
+ """
+
+ app_metadata: typing.Optional[UserAppMetadataSchema] = None
+ user_metadata: typing.Optional[UserMetadataSchema] = None
+ picture: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL to picture, photo, or avatar of this user.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of this user.
+ """
+
+ nickname: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Preferred nickname or alias of this user.
+ """
+
+ multifactor: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of multi-factor authentication providers with which this user has enrolled.
+ """
+
+ last_ip: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Last IP address from which this user logged in.
+ """
+
+ last_login: typing.Optional[UserDateSchema] = None
+ logins_count: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Total number of logins this user has performed.
+ """
+
+ blocked: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this user was blocked by an administrator (true) or is not (false).
+ """
+
+ given_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Given name/first name/forename of this user.
+ """
+
+ family_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Family name/last name/surname of this user.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/get_verifiable_credential_template_response_content.py b/src/auth0/management/types/get_verifiable_credential_template_response_content.py
new file mode 100644
index 00000000..8ec742af
--- /dev/null
+++ b/src/auth0/management/types/get_verifiable_credential_template_response_content.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .mdl_presentation_request import MdlPresentationRequest
+
+
+class GetVerifiableCredentialTemplateResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="vct_0000000000000001")
+ """
+ The id of the template.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the template.
+ """
+
+ type: typing.Optional[str] = pydantic.Field(default="mdl")
+ """
+ The type of the template.
+ """
+
+ dialect: typing.Optional[str] = pydantic.Field(default="simplified/1.0")
+ """
+ The dialect of the template.
+ """
+
+ presentation: typing.Optional[MdlPresentationRequest] = None
+ custom_certificate_authority: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The custom certificate authority.
+ """
+
+ well_known_trusted_issuers: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The well-known trusted issuers, comma separated.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time the template was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time the template was created.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/group.py b/src/auth0/management/types/group.py
new file mode 100644
index 00000000..e68320d4
--- /dev/null
+++ b/src/auth0/management/types/group.py
@@ -0,0 +1,63 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class Group(UniversalBaseModel):
+ """
+ Represents the metadata of a group. Member lists are retrieved via a separate endpoint.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique identifier for the group (service-generated).
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the group. Must be unique within its scope (connection, organization, or tenant). Must contain between 1 and 128 printable ASCII characters.
+ """
+
+ external_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ External identifier for the group, often used for SCIM synchronization. Max length of 256 characters.
+ """
+
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Identifier for the connection this group belongs to (if a connection group).
+ """
+
+ organization_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Identifier for the organization this group belongs to (if an organization group).
+ """
+
+ tenant_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Identifier for the tenant this group belongs to.
+ """
+
+ description: typing.Optional[str] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp of when the group was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp of when the group was last updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/guardian_enrollment_date.py b/src/auth0/management/types/guardian_enrollment_date.py
new file mode 100644
index 00000000..1a4a974e
--- /dev/null
+++ b/src/auth0/management/types/guardian_enrollment_date.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+GuardianEnrollmentDate = str
diff --git a/src/auth0/management/types/guardian_enrollment_factor_enum.py b/src/auth0/management/types/guardian_enrollment_factor_enum.py
new file mode 100644
index 00000000..38732ce3
--- /dev/null
+++ b/src/auth0/management/types/guardian_enrollment_factor_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GuardianEnrollmentFactorEnum = typing.Union[
+ typing.Literal["push-notification", "phone", "email", "otp", "webauthn-roaming", "webauthn-platform"], typing.Any
+]
diff --git a/src/auth0/management/types/guardian_enrollment_status.py b/src/auth0/management/types/guardian_enrollment_status.py
new file mode 100644
index 00000000..fe2f127d
--- /dev/null
+++ b/src/auth0/management/types/guardian_enrollment_status.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GuardianEnrollmentStatus = typing.Union[typing.Literal["pending", "confirmed"], typing.Any]
diff --git a/src/auth0/management/types/guardian_factor.py b/src/auth0/management/types/guardian_factor.py
new file mode 100644
index 00000000..c6278a44
--- /dev/null
+++ b/src/auth0/management/types/guardian_factor.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_factor_name_enum import GuardianFactorNameEnum
+
+
+class GuardianFactor(UniversalBaseModel):
+ enabled: bool = pydantic.Field(default=True)
+ """
+ Whether this factor is enabled (true) or disabled (false).
+ """
+
+ trial_expired: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether trial limits have been exceeded.
+ """
+
+ name: typing.Optional[GuardianFactorNameEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/guardian_factor_name_enum.py b/src/auth0/management/types/guardian_factor_name_enum.py
new file mode 100644
index 00000000..edd7f1e4
--- /dev/null
+++ b/src/auth0/management/types/guardian_factor_name_enum.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GuardianFactorNameEnum = typing.Union[
+ typing.Literal[
+ "push-notification", "sms", "email", "duo", "otp", "webauthn-roaming", "webauthn-platform", "recovery-code"
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/guardian_factor_phone_factor_message_type_enum.py b/src/auth0/management/types/guardian_factor_phone_factor_message_type_enum.py
new file mode 100644
index 00000000..bb393f98
--- /dev/null
+++ b/src/auth0/management/types/guardian_factor_phone_factor_message_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GuardianFactorPhoneFactorMessageTypeEnum = typing.Union[typing.Literal["sms", "voice"], typing.Any]
diff --git a/src/auth0/management/types/guardian_factors_provider_push_notification_provider_data_enum.py b/src/auth0/management/types/guardian_factors_provider_push_notification_provider_data_enum.py
new file mode 100644
index 00000000..c333028b
--- /dev/null
+++ b/src/auth0/management/types/guardian_factors_provider_push_notification_provider_data_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GuardianFactorsProviderPushNotificationProviderDataEnum = typing.Union[
+ typing.Literal["guardian", "sns", "direct"], typing.Any
+]
diff --git a/src/auth0/management/types/guardian_factors_provider_sms_provider_enum.py b/src/auth0/management/types/guardian_factors_provider_sms_provider_enum.py
new file mode 100644
index 00000000..04872204
--- /dev/null
+++ b/src/auth0/management/types/guardian_factors_provider_sms_provider_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GuardianFactorsProviderSmsProviderEnum = typing.Union[
+ typing.Literal["auth0", "twilio", "phone-message-hook"], typing.Any
+]
diff --git a/src/auth0/management/types/hook.py b/src/auth0/management/types/hook.py
new file mode 100644
index 00000000..40e8a519
--- /dev/null
+++ b/src/auth0/management/types/hook.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .hook_dependencies import HookDependencies
+
+
+class Hook(UniversalBaseModel):
+ trigger_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="triggerId")] = pydantic.Field(
+ default=None
+ )
+ """
+ Trigger ID
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="00001")
+ """
+ ID of this hook.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="hook")
+ """
+ Name of this hook.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether this hook will be executed (true) or ignored (false).
+ """
+
+ script: typing.Optional[str] = pydantic.Field(
+ default="module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };"
+ )
+ """
+ Code to be executed when this hook runs.
+ """
+
+ dependencies: typing.Optional[HookDependencies] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/hook_dependencies.py b/src/auth0/management/types/hook_dependencies.py
new file mode 100644
index 00000000..7a2fca81
--- /dev/null
+++ b/src/auth0/management/types/hook_dependencies.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+HookDependencies = typing.Dict[str, str]
diff --git a/src/auth0/management/types/hook_trigger_id_enum.py b/src/auth0/management/types/hook_trigger_id_enum.py
new file mode 100644
index 00000000..88b2c8e0
--- /dev/null
+++ b/src/auth0/management/types/hook_trigger_id_enum.py
@@ -0,0 +1,14 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+HookTriggerIdEnum = typing.Union[
+ typing.Literal[
+ "credentials-exchange",
+ "pre-user-registration",
+ "post-user-registration",
+ "post-change-password",
+ "send-phone-message",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/http_custom_header.py b/src/auth0/management/types/http_custom_header.py
new file mode 100644
index 00000000..75f9ca6b
--- /dev/null
+++ b/src/auth0/management/types/http_custom_header.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class HttpCustomHeader(UniversalBaseModel):
+ header: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ HTTP header name
+ """
+
+ value: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ HTTP header value
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/identity.py b/src/auth0/management/types/identity.py
new file mode 100644
index 00000000..66818637
--- /dev/null
+++ b/src/auth0/management/types/identity.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .identity_provider_enum import IdentityProviderEnum
+
+
+class Identity(UniversalBaseModel):
+ """
+ This must be provided to verify primary social, enterprise and passwordless email identities. Also, is needed to verify secondary identities.
+ """
+
+ user_id: str = pydantic.Field(default="5457edea1b8f22891a000004")
+ """
+ user_id of the identity to be verified.
+ """
+
+ provider: IdentityProviderEnum
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ connection_id of the identity.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/identity_provider_enum.py b/src/auth0/management/types/identity_provider_enum.py
new file mode 100644
index 00000000..9464e65a
--- /dev/null
+++ b/src/auth0/management/types/identity_provider_enum.py
@@ -0,0 +1,71 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+IdentityProviderEnum = typing.Union[
+ typing.Literal[
+ "ad",
+ "adfs",
+ "amazon",
+ "apple",
+ "dropbox",
+ "bitbucket",
+ "aol",
+ "auth0-oidc",
+ "auth0",
+ "baidu",
+ "bitly",
+ "box",
+ "custom",
+ "daccount",
+ "dwolla",
+ "email",
+ "evernote-sandbox",
+ "evernote",
+ "exact",
+ "facebook",
+ "fitbit",
+ "flickr",
+ "github",
+ "google-apps",
+ "google-oauth2",
+ "instagram",
+ "ip",
+ "line",
+ "linkedin",
+ "miicard",
+ "oauth1",
+ "oauth2",
+ "office365",
+ "oidc",
+ "okta",
+ "paypal",
+ "paypal-sandbox",
+ "pingfederate",
+ "planningcenter",
+ "renren",
+ "salesforce-community",
+ "salesforce-sandbox",
+ "salesforce",
+ "samlp",
+ "sharepoint",
+ "shopify",
+ "shop",
+ "sms",
+ "soundcloud",
+ "thecity-sandbox",
+ "thecity",
+ "thirtysevensignals",
+ "twitter",
+ "untappd",
+ "vkontakte",
+ "waad",
+ "weibo",
+ "windowslive",
+ "wordpress",
+ "yahoo",
+ "yammer",
+ "yandex",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/identity_provider_only_auth_0_enum.py b/src/auth0/management/types/identity_provider_only_auth_0_enum.py
new file mode 100644
index 00000000..3dbc3a6d
--- /dev/null
+++ b/src/auth0/management/types/identity_provider_only_auth_0_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+IdentityProviderOnlyAuth0Enum = typing.Literal["auth0"]
diff --git a/src/auth0/management/types/import_encryption_key_response_content.py b/src/auth0/management/types/import_encryption_key_response_content.py
new file mode 100644
index 00000000..481c94e7
--- /dev/null
+++ b/src/auth0/management/types/import_encryption_key_response_content.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .encryption_key_state import EncryptionKeyState
+from .encryption_key_type import EncryptionKeyType
+
+
+class ImportEncryptionKeyResponseContent(UniversalBaseModel):
+ """
+ Encryption key
+ """
+
+ kid: str = pydantic.Field()
+ """
+ Key ID
+ """
+
+ type: EncryptionKeyType
+ state: EncryptionKeyState
+ created_at: dt.datetime = pydantic.Field()
+ """
+ Key creation timestamp
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ Key update timestamp
+ """
+
+ parent_kid: str = pydantic.Field()
+ """
+ ID of parent wrapping key
+ """
+
+ public_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Public key in PEM format
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/integration.py b/src/auth0/management/types/integration.py
new file mode 100644
index 00000000..0c2310dd
--- /dev/null
+++ b/src/auth0/management/types/integration.py
@@ -0,0 +1,76 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .integration_feature_type_enum import IntegrationFeatureTypeEnum
+from .integration_release import IntegrationRelease
+
+
+class Integration(UniversalBaseModel):
+ """
+ Integration defines a self contained functioning unit which partners
+ publish. A partner may create one or many of these integrations.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="8e9fe2d0-a2fc-4c8c-9e35-dae5afadb70b")
+ """
+ id is a system generated GUID. This same ID is designed to be federated in
+ all the applicable localities.
+ """
+
+ catalog_id: typing.Optional[str] = pydantic.Field(default="awesome-auth0-integration")
+ """
+ catalog_id refers to the ID in the marketplace catalog
+ """
+
+ url_slug: typing.Optional[str] = pydantic.Field(default="awesome-auth0-integration-slug")
+ """
+ url_slug refers to the url_slug in the marketplace catalog
+ """
+
+ partner_id: typing.Optional[str] = pydantic.Field(default="b8575c12-8d9d-4b5c-b28e-671fe9d39029")
+ """
+ partner_id is the foreign key reference to the partner account this
+ integration belongs to.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="Example Auth0 integration")
+ """
+ name is the integration name, which will be used for display purposes in
+ the marketplace.
+
+ To start we're going to make sure the display name is at least 3
+ characters. Can adjust this easily later.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default="An awesome Auth0 integration")
+ """
+ description adds more text for the integration name -- also relevant for
+ the marketplace listing.
+ """
+
+ short_description: typing.Optional[str] = pydantic.Field(default="Awesome Auth0 integration")
+ """
+ short_description is the brief description of the integration, which is used for display purposes in cards
+ """
+
+ logo: typing.Optional[str] = None
+ feature_type: typing.Optional[IntegrationFeatureTypeEnum] = None
+ terms_of_use_url: typing.Optional[str] = None
+ privacy_policy_url: typing.Optional[str] = None
+ public_support_link: typing.Optional[str] = None
+ current_release: typing.Optional[IntegrationRelease] = None
+ created_at: typing.Optional[dt.datetime] = None
+ updated_at: typing.Optional[dt.datetime] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/integration_feature_type_enum.py b/src/auth0/management/types/integration_feature_type_enum.py
new file mode 100644
index 00000000..85e280f1
--- /dev/null
+++ b/src/auth0/management/types/integration_feature_type_enum.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+IntegrationFeatureTypeEnum = typing.Union[
+ typing.Literal["unspecified", "action", "social_connection", "log_stream", "sso_integration", "sms_provider"],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/integration_release.py b/src/auth0/management/types/integration_release.py
new file mode 100644
index 00000000..66d7e363
--- /dev/null
+++ b/src/auth0/management/types/integration_release.py
@@ -0,0 +1,38 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_trigger import ActionTrigger
+from .integration_required_param import IntegrationRequiredParam
+from .integration_sem_ver import IntegrationSemVer
+
+
+class IntegrationRelease(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The id of the associated IntegrationRelease
+ """
+
+ trigger: typing.Optional[ActionTrigger] = None
+ semver: typing.Optional[IntegrationSemVer] = None
+ required_secrets: typing.Optional[typing.List[IntegrationRequiredParam]] = pydantic.Field(default=None)
+ """
+ required_secrets declares all the necessary secrets for an integration to
+ work.
+ """
+
+ required_configuration: typing.Optional[typing.List[IntegrationRequiredParam]] = pydantic.Field(default=None)
+ """
+ required_configuration declares all the necessary configuration fields for an integration to work.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/integration_required_param.py b/src/auth0/management/types/integration_required_param.py
new file mode 100644
index 00000000..bf25cdcc
--- /dev/null
+++ b/src/auth0/management/types/integration_required_param.py
@@ -0,0 +1,69 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .integration_required_param_option import IntegrationRequiredParamOption
+from .integration_required_param_type_enum import IntegrationRequiredParamTypeEnum
+
+
+class IntegrationRequiredParam(UniversalBaseModel):
+ """
+ Param are form input values, primarily utilized when specifying secrets and
+ configuration values for actions.
+
+ These are especially important for partner integrations -- but can be
+ exposed to tenant admins as well if they want to parameterize their custom
+ actions.
+ """
+
+ type: typing.Optional[IntegrationRequiredParamTypeEnum] = None
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the parameter.
+ """
+
+ required: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ The flag for if this parameter is required.
+ """
+
+ optional: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ The temp flag for if this parameter is required (experimental; for Labs use only).
+ """
+
+ label: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The short label for this parameter.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The lengthier description for this parameter.
+ """
+
+ default_value: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The default value for this parameter.
+ """
+
+ placeholder: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Placeholder text for this parameter.
+ """
+
+ options: typing.Optional[typing.List[IntegrationRequiredParamOption]] = pydantic.Field(default=None)
+ """
+ The allowable options for this param.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/integration_required_param_option.py b/src/auth0/management/types/integration_required_param_option.py
new file mode 100644
index 00000000..74598889
--- /dev/null
+++ b/src/auth0/management/types/integration_required_param_option.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class IntegrationRequiredParamOption(UniversalBaseModel):
+ value: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The value of an option that will be used within the application.
+ """
+
+ label: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The display value of an option suitable for displaying in a UI.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/integration_required_param_type_enum.py b/src/auth0/management/types/integration_required_param_type_enum.py
new file mode 100644
index 00000000..01045311
--- /dev/null
+++ b/src/auth0/management/types/integration_required_param_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+IntegrationRequiredParamTypeEnum = typing.Union[typing.Literal["UNSPECIFIED", "STRING"], typing.Any]
diff --git a/src/auth0/management/types/integration_sem_ver.py b/src/auth0/management/types/integration_sem_ver.py
new file mode 100644
index 00000000..d5049d8c
--- /dev/null
+++ b/src/auth0/management/types/integration_sem_ver.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class IntegrationSemVer(UniversalBaseModel):
+ """
+ Semver denotes the major.minor version of an integration release
+ """
+
+ major: typing.Optional[int] = pydantic.Field(default=1)
+ """
+ Major is the major number of a semver
+ """
+
+ minor: typing.Optional[int] = pydantic.Field(default=1)
+ """
+ Minior is the minior number of a semver
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/job_file_format_enum.py b/src/auth0/management/types/job_file_format_enum.py
new file mode 100644
index 00000000..4f3ffb7b
--- /dev/null
+++ b/src/auth0/management/types/job_file_format_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+JobFileFormatEnum = typing.Union[typing.Literal["json", "csv"], typing.Any]
diff --git a/src/auth0/management/types/linked_client_configuration.py b/src/auth0/management/types/linked_client_configuration.py
new file mode 100644
index 00000000..f352d49d
--- /dev/null
+++ b/src/auth0/management/types/linked_client_configuration.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class LinkedClientConfiguration(UniversalBaseModel):
+ """
+ Configuration for linked clients in the OIN Express Configuration feature.
+ """
+
+ client_id: str = pydantic.Field()
+ """
+ The ID of the linked client.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/list_action_bindings_paginated_response_content.py b/src/auth0/management/types/list_action_bindings_paginated_response_content.py
new file mode 100644
index 00000000..f03e793a
--- /dev/null
+++ b/src/auth0/management/types/list_action_bindings_paginated_response_content.py
@@ -0,0 +1,38 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_binding import ActionBinding
+
+
+class ListActionBindingsPaginatedResponseContent(UniversalBaseModel):
+ total: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ The total result count.
+ """
+
+ page: typing.Optional[float] = pydantic.Field(default=0.0)
+ """
+ Page index of the results being returned. First page is 0.
+ """
+
+ per_page: typing.Optional[float] = pydantic.Field(default=20.0)
+ """
+ Number of results per page.
+ """
+
+ bindings: typing.Optional[typing.List[ActionBinding]] = pydantic.Field(default=None)
+ """
+ The list of actions that are bound to this trigger in the order in which they will be executed.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/list_action_triggers_response_content.py b/src/auth0/management/types/list_action_triggers_response_content.py
new file mode 100644
index 00000000..312ba200
--- /dev/null
+++ b/src/auth0/management/types/list_action_triggers_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_trigger import ActionTrigger
+
+
+class ListActionTriggersResponseContent(UniversalBaseModel):
+ triggers: typing.Optional[typing.List[ActionTrigger]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/list_action_versions_paginated_response_content.py b/src/auth0/management/types/list_action_versions_paginated_response_content.py
new file mode 100644
index 00000000..ba82550a
--- /dev/null
+++ b/src/auth0/management/types/list_action_versions_paginated_response_content.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_version import ActionVersion
+
+
+class ListActionVersionsPaginatedResponseContent(UniversalBaseModel):
+ total: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ The total result count.
+ """
+
+ page: typing.Optional[float] = pydantic.Field(default=0.0)
+ """
+ Page index of the results being returned. First page is 0.
+ """
+
+ per_page: typing.Optional[float] = pydantic.Field(default=20.0)
+ """
+ Number of results per page.
+ """
+
+ versions: typing.Optional[typing.List[ActionVersion]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/list_actions_paginated_response_content.py b/src/auth0/management/types/list_actions_paginated_response_content.py
new file mode 100644
index 00000000..d3b26382
--- /dev/null
+++ b/src/auth0/management/types/list_actions_paginated_response_content.py
@@ -0,0 +1,38 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action import Action
+
+
+class ListActionsPaginatedResponseContent(UniversalBaseModel):
+ total: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ The total result count.
+ """
+
+ page: typing.Optional[float] = pydantic.Field(default=0.0)
+ """
+ Page index of the results being returned. First page is 0.
+ """
+
+ per_page: typing.Optional[float] = pydantic.Field(default=20.0)
+ """
+ Number of results per page.
+ """
+
+ actions: typing.Optional[typing.List[Action]] = pydantic.Field(default=None)
+ """
+ The list of actions.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/list_aculs_offset_paginated_response_content.py b/src/auth0/management/types/list_aculs_offset_paginated_response_content.py
new file mode 100644
index 00000000..49ae4f41
--- /dev/null
+++ b/src/auth0/management/types/list_aculs_offset_paginated_response_content.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_response_content import AculResponseContent
+
+
+class ListAculsOffsetPaginatedResponseContent(UniversalBaseModel):
+ configs: typing.Optional[typing.List[AculResponseContent]] = None
+ start: typing.Optional[float] = pydantic.Field(default=None)
+ """
+ the index of the first configuration in the response (before filtering)
+ """
+
+ limit: typing.Optional[float] = pydantic.Field(default=None)
+ """
+ the maximum number of configurations shown per page (before filtering)
+ """
+
+ total: typing.Optional[float] = pydantic.Field(default=None)
+ """
+ the total number of configurations on this tenant
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/list_branding_phone_providers_response_content.py b/src/auth0/management/types/list_branding_phone_providers_response_content.py
new file mode 100644
index 00000000..899cb491
--- /dev/null
+++ b/src/auth0/management/types/list_branding_phone_providers_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .phone_provider_schema_masked import PhoneProviderSchemaMasked
+
+
+class ListBrandingPhoneProvidersResponseContent(UniversalBaseModel):
+ providers: typing.Optional[typing.List[PhoneProviderSchemaMasked]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/list_client_connections_response_content.py b/src/auth0/management/types/list_client_connections_response_content.py
new file mode 100644
index 00000000..2d3c2f24
--- /dev/null
+++ b/src/auth0/management/types/list_client_connections_response_content.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_for_list import ConnectionForList
+
+
+class ListClientConnectionsResponseContent(UniversalBaseModel):
+ connections: typing.List[ConnectionForList]
+ next: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Encoded next token
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/list_client_grant_organizations_paginated_response_content.py b/src/auth0/management/types/list_client_grant_organizations_paginated_response_content.py
new file mode 100644
index 00000000..dc9e774c
--- /dev/null
+++ b/src/auth0/management/types/list_client_grant_organizations_paginated_response_content.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization import Organization
+
+
+class ListClientGrantOrganizationsPaginatedResponseContent(UniversalBaseModel):
+ next: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Opaque identifier for use with the from query parameter for the next page of results.true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD. (Defaults to false.)
+ """
+
+ metadata: typing.Optional[ConnectionsMetadata] = None
+ options: typing.Optional[SelfServiceProfileSsoTicketConnectionOptions] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/self_service_profile_sso_ticket_connection_options.py b/src/auth0/management/types/self_service_profile_sso_ticket_connection_options.py
new file mode 100644
index 00000000..0e612829
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_sso_ticket_connection_options.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .self_service_profile_sso_ticket_idp_initiated_options import SelfServiceProfileSsoTicketIdpInitiatedOptions
+
+
+class SelfServiceProfileSsoTicketConnectionOptions(UniversalBaseModel):
+ """
+ The connection's options (depend on the connection strategy)
+ """
+
+ icon_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL for the icon. Must use HTTPS.
+ """
+
+ domain_aliases: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of domain_aliases that can be authenticated in the Identity Provider
+ """
+
+ idpinitiated: typing.Optional[SelfServiceProfileSsoTicketIdpInitiatedOptions] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/self_service_profile_sso_ticket_domain_aliases_config.py b/src/auth0/management/types/self_service_profile_sso_ticket_domain_aliases_config.py
new file mode 100644
index 00000000..0fe42ceb
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_sso_ticket_domain_aliases_config.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .self_service_profile_sso_ticket_domain_verification_enum import SelfServiceProfileSsoTicketDomainVerificationEnum
+
+
+class SelfServiceProfileSsoTicketDomainAliasesConfig(UniversalBaseModel):
+ """
+ Configuration for the setup of the connection’s domain_aliases in the self-service SSO flow.
+ """
+
+ domain_verification: SelfServiceProfileSsoTicketDomainVerificationEnum
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/self_service_profile_sso_ticket_domain_verification_enum.py b/src/auth0/management/types/self_service_profile_sso_ticket_domain_verification_enum.py
new file mode 100644
index 00000000..07ba4007
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_sso_ticket_domain_verification_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SelfServiceProfileSsoTicketDomainVerificationEnum = typing.Union[
+ typing.Literal["none", "optional", "required"], typing.Any
+]
diff --git a/src/auth0/management/types/self_service_profile_sso_ticket_enabled_organization.py b/src/auth0/management/types/self_service_profile_sso_ticket_enabled_organization.py
new file mode 100644
index 00000000..ad15baac
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_sso_ticket_enabled_organization.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SelfServiceProfileSsoTicketEnabledOrganization(UniversalBaseModel):
+ organization_id: str = pydantic.Field()
+ """
+ Organization identifier.
+ """
+
+ assign_membership_on_login: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/self_service_profile_sso_ticket_google_workspace_config.py b/src/auth0/management/types/self_service_profile_sso_ticket_google_workspace_config.py
new file mode 100644
index 00000000..6eb78c21
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_sso_ticket_google_workspace_config.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SelfServiceProfileSsoTicketGoogleWorkspaceConfig(UniversalBaseModel):
+ """
+ Configuration for Google Workspace Directory Sync during the self-service flow.
+ """
+
+ sync_users: bool = pydantic.Field()
+ """
+ Whether to enable Google Workspace Directory Sync for users during the self-service flow.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/self_service_profile_sso_ticket_idp_initiated_client_protocol_enum.py b/src/auth0/management/types/self_service_profile_sso_ticket_idp_initiated_client_protocol_enum.py
new file mode 100644
index 00000000..44c1fb1d
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_sso_ticket_idp_initiated_client_protocol_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SelfServiceProfileSsoTicketIdpInitiatedClientProtocolEnum = typing.Union[
+ typing.Literal["samlp", "wsfed", "oauth2"], typing.Any
+]
diff --git a/src/auth0/management/types/self_service_profile_sso_ticket_idp_initiated_options.py b/src/auth0/management/types/self_service_profile_sso_ticket_idp_initiated_options.py
new file mode 100644
index 00000000..955a561d
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_sso_ticket_idp_initiated_options.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .self_service_profile_sso_ticket_idp_initiated_client_protocol_enum import (
+ SelfServiceProfileSsoTicketIdpInitiatedClientProtocolEnum,
+)
+
+
+class SelfServiceProfileSsoTicketIdpInitiatedOptions(UniversalBaseModel):
+ """
+ Allows IdP-initiated login
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables IdP-initiated login for this connection
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Default application client_id user is redirected to after validated SAML response
+ """
+
+ client_protocol: typing.Optional[SelfServiceProfileSsoTicketIdpInitiatedClientProtocolEnum] = None
+ client_authorizequery: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Query string options to customize the behaviour for OpenID Connect when idpinitiated.client_protocol is oauth2. Allowed parameters: redirect_uri, scope, response_type. For example, redirect_uri=https://jwt.io&scope=openid email&response_type=token
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/self_service_profile_sso_ticket_provisioning_config.py b/src/auth0/management/types/self_service_profile_sso_ticket_provisioning_config.py
new file mode 100644
index 00000000..545e24b7
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_sso_ticket_provisioning_config.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .self_service_profile_sso_ticket_google_workspace_config import SelfServiceProfileSsoTicketGoogleWorkspaceConfig
+from .self_service_profile_sso_ticket_provisioning_scope_enum import SelfServiceProfileSsoTicketProvisioningScopeEnum
+
+
+class SelfServiceProfileSsoTicketProvisioningConfig(UniversalBaseModel):
+ """
+ Configuration for the setup of Provisioning in the self-service flow.
+ """
+
+ scopes: typing.Optional[typing.List[SelfServiceProfileSsoTicketProvisioningScopeEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ The scopes of the SCIM tokens generated during the self-service flow.
+ """
+
+ google_workspace: typing.Optional[SelfServiceProfileSsoTicketGoogleWorkspaceConfig] = None
+ token_lifetime: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Lifetime of the tokens in seconds. Must be greater than 900. If not provided, the tokens don't expire.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/self_service_profile_sso_ticket_provisioning_scope_enum.py b/src/auth0/management/types/self_service_profile_sso_ticket_provisioning_scope_enum.py
new file mode 100644
index 00000000..acab42fd
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_sso_ticket_provisioning_scope_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SelfServiceProfileSsoTicketProvisioningScopeEnum = typing.Union[
+ typing.Literal["get:users", "post:users", "put:users", "patch:users", "delete:users"], typing.Any
+]
diff --git a/src/auth0/management/types/self_service_profile_user_attribute.py b/src/auth0/management/types/self_service_profile_user_attribute.py
new file mode 100644
index 00000000..afcfa6dd
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_user_attribute.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SelfServiceProfileUserAttribute(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ Identifier of this attribute.
+ """
+
+ description: str = pydantic.Field()
+ """
+ Description of this attribute.
+ """
+
+ is_optional: bool = pydantic.Field()
+ """
+ Determines if this attribute is required
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/self_service_profile_user_attributes.py b/src/auth0/management/types/self_service_profile_user_attributes.py
new file mode 100644
index 00000000..fdb2749c
--- /dev/null
+++ b/src/auth0/management/types/self_service_profile_user_attributes.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .self_service_profile_user_attribute import SelfServiceProfileUserAttribute
+
+SelfServiceProfileUserAttributes = typing.Optional[typing.List[SelfServiceProfileUserAttribute]]
diff --git a/src/auth0/management/types/session_authentication_signal.py b/src/auth0/management/types/session_authentication_signal.py
new file mode 100644
index 00000000..5f3ff5dd
--- /dev/null
+++ b/src/auth0/management/types/session_authentication_signal.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .session_date import SessionDate
+
+
+class SessionAuthenticationSignal(UniversalBaseModel):
+ """
+ Authentication signal details
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ One of: "federated", "passkey", "pwd", "sms", "email", "mfa", "mock" or a custom method denoted by a URL
+ """
+
+ timestamp: typing.Optional[SessionDate] = None
+ type: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="^type$")] = pydantic.Field(
+ default=None
+ )
+ """
+ A specific MFA factor. Only present when "name" is set to "mfa"
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/session_authentication_signals.py b/src/auth0/management/types/session_authentication_signals.py
new file mode 100644
index 00000000..754c2c02
--- /dev/null
+++ b/src/auth0/management/types/session_authentication_signals.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .session_authentication_signal import SessionAuthenticationSignal
+
+
+class SessionAuthenticationSignals(UniversalBaseModel):
+ """
+ Details about authentication signals obtained during the login flow
+ """
+
+ methods: typing.Optional[typing.List[SessionAuthenticationSignal]] = pydantic.Field(default=None)
+ """
+ Contains the authentication methods a user has completed during their session
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/session_client_metadata.py b/src/auth0/management/types/session_client_metadata.py
new file mode 100644
index 00000000..2eccbe59
--- /dev/null
+++ b/src/auth0/management/types/session_client_metadata.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SessionClientMetadata(UniversalBaseModel):
+ """
+ Client details
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of client for the session
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/session_cookie_metadata.py b/src/auth0/management/types/session_cookie_metadata.py
new file mode 100644
index 00000000..a9c01799
--- /dev/null
+++ b/src/auth0/management/types/session_cookie_metadata.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .session_cookie_metadata_mode_enum import SessionCookieMetadataModeEnum
+
+
+class SessionCookieMetadata(UniversalBaseModel):
+ """
+ [Private Early Access] Session cookie configuration.
+ """
+
+ mode: typing.Optional[SessionCookieMetadataModeEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/session_cookie_metadata_mode_enum.py b/src/auth0/management/types/session_cookie_metadata_mode_enum.py
new file mode 100644
index 00000000..c8540ef1
--- /dev/null
+++ b/src/auth0/management/types/session_cookie_metadata_mode_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SessionCookieMetadataModeEnum = typing.Union[typing.Literal["non-persistent", "persistent"], typing.Any]
diff --git a/src/auth0/management/types/session_cookie_mode_enum.py b/src/auth0/management/types/session_cookie_mode_enum.py
new file mode 100644
index 00000000..801eecb6
--- /dev/null
+++ b/src/auth0/management/types/session_cookie_mode_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SessionCookieModeEnum = typing.Union[typing.Literal["persistent", "non-persistent"], typing.Any]
diff --git a/src/auth0/management/types/session_cookie_schema.py b/src/auth0/management/types/session_cookie_schema.py
new file mode 100644
index 00000000..bf14ca53
--- /dev/null
+++ b/src/auth0/management/types/session_cookie_schema.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .session_cookie_mode_enum import SessionCookieModeEnum
+
+
+class SessionCookieSchema(UniversalBaseModel):
+ """
+ Session cookie configuration
+ """
+
+ mode: SessionCookieModeEnum
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/session_date.py b/src/auth0/management/types/session_date.py
new file mode 100644
index 00000000..d13bff7e
--- /dev/null
+++ b/src/auth0/management/types/session_date.py
@@ -0,0 +1,6 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+SessionDate = typing.Union[dt.datetime, typing.Dict[str, typing.Any]]
diff --git a/src/auth0/management/types/session_device_metadata.py b/src/auth0/management/types/session_device_metadata.py
new file mode 100644
index 00000000..3838b0ce
--- /dev/null
+++ b/src/auth0/management/types/session_device_metadata.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .session_ip import SessionIp
+
+
+class SessionDeviceMetadata(UniversalBaseModel):
+ """
+ Metadata related to the device used in the session
+ """
+
+ initial_user_agent: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ First user agent of the device from which this user logged in
+ """
+
+ initial_ip: typing.Optional[SessionIp] = None
+ initial_asn: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ First autonomous system number associated with this session
+ """
+
+ last_user_agent: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Last user agent of the device from which this user logged in
+ """
+
+ last_ip: typing.Optional[SessionIp] = None
+ last_asn: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Last autonomous system number from which this user logged in
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/session_ip.py b/src/auth0/management/types/session_ip.py
new file mode 100644
index 00000000..7e8e41fa
--- /dev/null
+++ b/src/auth0/management/types/session_ip.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SessionIp = typing.Optional[str]
diff --git a/src/auth0/management/types/session_metadata.py b/src/auth0/management/types/session_metadata.py
new file mode 100644
index 00000000..caaddb67
--- /dev/null
+++ b/src/auth0/management/types/session_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SessionMetadata = typing.Optional[typing.Dict[str, typing.Any]]
diff --git a/src/auth0/management/types/session_response_content.py b/src/auth0/management/types/session_response_content.py
new file mode 100644
index 00000000..7a4f73dd
--- /dev/null
+++ b/src/auth0/management/types/session_response_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .session_authentication_signals import SessionAuthenticationSignals
+from .session_client_metadata import SessionClientMetadata
+from .session_cookie_metadata import SessionCookieMetadata
+from .session_date import SessionDate
+from .session_device_metadata import SessionDeviceMetadata
+from .session_metadata import SessionMetadata
+
+
+class SessionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the session
+ """
+
+ user_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the user which can be used when interacting with other APIs.
+ """
+
+ created_at: typing.Optional[SessionDate] = None
+ updated_at: typing.Optional[SessionDate] = None
+ authenticated_at: typing.Optional[SessionDate] = None
+ idle_expires_at: typing.Optional[SessionDate] = None
+ expires_at: typing.Optional[SessionDate] = None
+ last_interacted_at: typing.Optional[SessionDate] = None
+ device: typing.Optional[SessionDeviceMetadata] = None
+ clients: typing.Optional[typing.List[SessionClientMetadata]] = pydantic.Field(default=None)
+ """
+ List of client details for the session
+ """
+
+ authentication: typing.Optional[SessionAuthenticationSignals] = None
+ cookie: typing.Optional[SessionCookieMetadata] = None
+ session_metadata: typing.Optional[SessionMetadata] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_custom_signing_keys_response_content.py b/src/auth0/management/types/set_custom_signing_keys_response_content.py
new file mode 100644
index 00000000..890a7e83
--- /dev/null
+++ b/src/auth0/management/types/set_custom_signing_keys_response_content.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_signing_key_jwk import CustomSigningKeyJwk
+
+
+class SetCustomSigningKeysResponseContent(UniversalBaseModel):
+ """
+ JWKS representing an array of custom public signing keys.
+ """
+
+ keys: typing.Optional[typing.List[CustomSigningKeyJwk]] = pydantic.Field(default=None)
+ """
+ An array of custom public signing keys.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_email_template_response_content.py b/src/auth0/management/types/set_email_template_response_content.py
new file mode 100644
index 00000000..8d0e94b2
--- /dev/null
+++ b/src/auth0/management/types/set_email_template_response_content.py
@@ -0,0 +1,69 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .email_template_name_enum import EmailTemplateNameEnum
+
+
+class SetEmailTemplateResponseContent(UniversalBaseModel):
+ template: EmailTemplateNameEnum
+ body: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Body of the email template.
+ """
+
+ from_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="from")] = pydantic.Field(
+ default="sender@auth0.com"
+ )
+ """
+ Senders `from` email address.
+ """
+
+ result_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="resultUrl")] = pydantic.Field(
+ default=None
+ )
+ """
+ URL to redirect the user to after a successful action.
+ """
+
+ subject: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Subject line of the email.
+ """
+
+ syntax: typing.Optional[str] = pydantic.Field(default="liquid")
+ """
+ Syntax of the template body.
+ """
+
+ url_lifetime_in_seconds: typing_extensions.Annotated[
+ typing.Optional[float], FieldMetadata(alias="urlLifetimeInSeconds")
+ ] = pydantic.Field(default=None)
+ """
+ Lifetime in seconds that the link within the email will be valid for.
+ """
+
+ include_email_in_redirect: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="includeEmailInRedirect")
+ ] = pydantic.Field(default=None)
+ """
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the template is enabled (true) or disabled (false).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factor_duo_settings_response_content.py b/src/auth0/management/types/set_guardian_factor_duo_settings_response_content.py
new file mode 100644
index 00000000..1edd9781
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factor_duo_settings_response_content.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SetGuardianFactorDuoSettingsResponseContent(UniversalBaseModel):
+ ikey: typing.Optional[str] = None
+ skey: typing.Optional[str] = None
+ host: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factor_phone_message_types_response_content.py b/src/auth0/management/types/set_guardian_factor_phone_message_types_response_content.py
new file mode 100644
index 00000000..6b7fce32
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factor_phone_message_types_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_factor_phone_factor_message_type_enum import GuardianFactorPhoneFactorMessageTypeEnum
+
+
+class SetGuardianFactorPhoneMessageTypesResponseContent(UniversalBaseModel):
+ message_types: typing.Optional[typing.List[GuardianFactorPhoneFactorMessageTypeEnum]] = pydantic.Field(default=None)
+ """
+ The list of phone factors to enable on the tenant. Can include `sms` and `voice`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factor_phone_templates_response_content.py b/src/auth0/management/types/set_guardian_factor_phone_templates_response_content.py
new file mode 100644
index 00000000..94619858
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factor_phone_templates_response_content.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SetGuardianFactorPhoneTemplatesResponseContent(UniversalBaseModel):
+ enrollment_message: str = pydantic.Field(
+ default="{{code}} is your verification code for {{tenant.friendly_name}}. Please enter this code to verify your enrollment."
+ )
+ """
+ Message sent to the user when they are invited to enroll with a phone number.
+ """
+
+ verification_message: str = pydantic.Field(
+ default="{{code}} is your verification code for {{tenant.friendly_name}}"
+ )
+ """
+ Message sent to the user when they are prompted to verify their account.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factor_response_content.py b/src/auth0/management/types/set_guardian_factor_response_content.py
new file mode 100644
index 00000000..42533a20
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factor_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SetGuardianFactorResponseContent(UniversalBaseModel):
+ enabled: bool = pydantic.Field()
+ """
+ Whether this factor is enabled (true) or disabled (false).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factor_sms_templates_response_content.py b/src/auth0/management/types/set_guardian_factor_sms_templates_response_content.py
new file mode 100644
index 00000000..f68bd6d3
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factor_sms_templates_response_content.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SetGuardianFactorSmsTemplatesResponseContent(UniversalBaseModel):
+ enrollment_message: str = pydantic.Field(
+ default="{{code}} is your verification code for {{tenant.friendly_name}}. Please enter this code to verify your enrollment."
+ )
+ """
+ Message sent to the user when they are invited to enroll with a phone number.
+ """
+
+ verification_message: str = pydantic.Field(
+ default="{{code}} is your verification code for {{tenant.friendly_name}}"
+ )
+ """
+ Message sent to the user when they are prompted to verify their account.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_phone_response_content.py b/src/auth0/management/types/set_guardian_factors_provider_phone_response_content.py
new file mode 100644
index 00000000..7ba7fa1f
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_phone_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_factors_provider_sms_provider_enum import GuardianFactorsProviderSmsProviderEnum
+
+
+class SetGuardianFactorsProviderPhoneResponseContent(UniversalBaseModel):
+ provider: typing.Optional[GuardianFactorsProviderSmsProviderEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_phone_twilio_response_content.py b/src/auth0/management/types/set_guardian_factors_provider_phone_twilio_response_content.py
new file mode 100644
index 00000000..b00d82b6
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_phone_twilio_response_content.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class SetGuardianFactorsProviderPhoneTwilioResponseContent(UniversalBaseModel):
+ from_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="from")] = pydantic.Field(
+ default="+1223323"
+ )
+ """
+ From number
+ """
+
+ messaging_service_sid: typing.Optional[str] = pydantic.Field(default="5dEkAiHLPCuQ1uJj4qNXcAnERFAL6cpq")
+ """
+ Copilot SID
+ """
+
+ auth_token: typing.Optional[str] = pydantic.Field(default="zw5Ku6z2sxhd0ZVXto5SDHX6KPDByJPU")
+ """
+ Twilio Authentication token
+ """
+
+ sid: typing.Optional[str] = pydantic.Field(default="wywA2BH4VqTpfywiDuyDAYZL3xQjoO40")
+ """
+ Twilio SID
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_push_notification_apns_request_content.py b/src/auth0/management/types/set_guardian_factors_provider_push_notification_apns_request_content.py
new file mode 100644
index 00000000..d2de7ec1
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_push_notification_apns_request_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class SetGuardianFactorsProviderPushNotificationApnsRequestContent(UniversalBaseModel):
+ sandbox: typing.Optional[bool] = None
+ bundle_id: typing.Optional[str] = None
+ p_12: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="p12")] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_push_notification_apns_response_content.py b/src/auth0/management/types/set_guardian_factors_provider_push_notification_apns_response_content.py
new file mode 100644
index 00000000..b5f87a70
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_push_notification_apns_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SetGuardianFactorsProviderPushNotificationApnsResponseContent(UniversalBaseModel):
+ sandbox: typing.Optional[bool] = None
+ bundle_id: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcm_request_content.py b/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcm_request_content.py
new file mode 100644
index 00000000..aa5d4376
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcm_request_content.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SetGuardianFactorsProviderPushNotificationFcmRequestContent(UniversalBaseModel):
+ server_key: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcm_response_content.py b/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcm_response_content.py
new file mode 100644
index 00000000..1f7180db
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcm_response_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SetGuardianFactorsProviderPushNotificationFcmResponseContent = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcmv_1_request_content.py b/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcmv_1_request_content.py
new file mode 100644
index 00000000..92ad6b77
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcmv_1_request_content.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SetGuardianFactorsProviderPushNotificationFcmv1RequestContent(UniversalBaseModel):
+ server_credentials: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcmv_1_response_content.py b/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcmv_1_response_content.py
new file mode 100644
index 00000000..c5867129
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_push_notification_fcmv_1_response_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SetGuardianFactorsProviderPushNotificationFcmv1ResponseContent = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/set_guardian_factors_provider_push_notification_response_content.py b/src/auth0/management/types/set_guardian_factors_provider_push_notification_response_content.py
new file mode 100644
index 00000000..4a19a882
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_push_notification_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_factors_provider_push_notification_provider_data_enum import (
+ GuardianFactorsProviderPushNotificationProviderDataEnum,
+)
+
+
+class SetGuardianFactorsProviderPushNotificationResponseContent(UniversalBaseModel):
+ provider: typing.Optional[GuardianFactorsProviderPushNotificationProviderDataEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_push_notification_sns_response_content.py b/src/auth0/management/types/set_guardian_factors_provider_push_notification_sns_response_content.py
new file mode 100644
index 00000000..7974cc3a
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_push_notification_sns_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SetGuardianFactorsProviderPushNotificationSnsResponseContent(UniversalBaseModel):
+ aws_access_key_id: typing.Optional[str] = "wywA2BH4VqTpfywiDuyDAYZL3xQjoO40"
+ aws_secret_access_key: typing.Optional[str] = "B1ER5JHDGJL3C4sVAKK7SBsq806R3IpL"
+ aws_region: typing.Optional[str] = "us-west-1"
+ sns_apns_platform_application_arn: typing.Optional[str] = None
+ sns_gcm_platform_application_arn: typing.Optional[str] = "urn://yRMeBxgcCXh8MeTXPBAxhQnm6gP6f5nP"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_sms_response_content.py b/src/auth0/management/types/set_guardian_factors_provider_sms_response_content.py
new file mode 100644
index 00000000..f109a5b8
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_sms_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardian_factors_provider_sms_provider_enum import GuardianFactorsProviderSmsProviderEnum
+
+
+class SetGuardianFactorsProviderSmsResponseContent(UniversalBaseModel):
+ provider: typing.Optional[GuardianFactorsProviderSmsProviderEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_factors_provider_sms_twilio_response_content.py b/src/auth0/management/types/set_guardian_factors_provider_sms_twilio_response_content.py
new file mode 100644
index 00000000..42fd0279
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_factors_provider_sms_twilio_response_content.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class SetGuardianFactorsProviderSmsTwilioResponseContent(UniversalBaseModel):
+ from_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="from")] = pydantic.Field(
+ default="+1223323"
+ )
+ """
+ From number
+ """
+
+ messaging_service_sid: typing.Optional[str] = pydantic.Field(default="5dEkAiHLPCuQ1uJj4qNXcAnERFAL6cpq")
+ """
+ Copilot SID
+ """
+
+ auth_token: typing.Optional[str] = pydantic.Field(default="zw5Ku6z2sxhd0ZVXto5SDHX6KPDByJPU")
+ """
+ Twilio Authentication token
+ """
+
+ sid: typing.Optional[str] = pydantic.Field(default="wywA2BH4VqTpfywiDuyDAYZL3xQjoO40")
+ """
+ Twilio SID
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_guardian_policies_request_content.py b/src/auth0/management/types/set_guardian_policies_request_content.py
new file mode 100644
index 00000000..b0eacd4a
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_policies_request_content.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .mfa_policy_enum import MfaPolicyEnum
+
+SetGuardianPoliciesRequestContent = typing.List[MfaPolicyEnum]
diff --git a/src/auth0/management/types/set_guardian_policies_response_content.py b/src/auth0/management/types/set_guardian_policies_response_content.py
new file mode 100644
index 00000000..7ecd6f92
--- /dev/null
+++ b/src/auth0/management/types/set_guardian_policies_response_content.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .mfa_policy_enum import MfaPolicyEnum
+
+SetGuardianPoliciesResponseContent = typing.List[MfaPolicyEnum]
diff --git a/src/auth0/management/types/set_network_acls_response_content.py b/src/auth0/management/types/set_network_acls_response_content.py
new file mode 100644
index 00000000..c4542498
--- /dev/null
+++ b/src/auth0/management/types/set_network_acls_response_content.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .network_acl_rule import NetworkAclRule
+
+
+class SetNetworkAclsResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = None
+ description: typing.Optional[str] = None
+ active: typing.Optional[bool] = None
+ priority: typing.Optional[float] = None
+ rule: typing.Optional[NetworkAclRule] = None
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The timestamp when the Network ACL Configuration was created
+ """
+
+ updated_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The timestamp when the Network ACL Configuration was last updated
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_partials_request_content.py b/src/auth0/management/types/set_partials_request_content.py
new file mode 100644
index 00000000..2ca88603
--- /dev/null
+++ b/src/auth0/management/types/set_partials_request_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SetPartialsRequestContent = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/set_rules_config_response_content.py b/src/auth0/management/types/set_rules_config_response_content.py
new file mode 100644
index 00000000..3d45c1c3
--- /dev/null
+++ b/src/auth0/management/types/set_rules_config_response_content.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SetRulesConfigResponseContent(UniversalBaseModel):
+ key: str = pydantic.Field(default="MY_RULES_CONFIG_KEY")
+ """
+ Key for a rules config variable.
+ """
+
+ value: str = pydantic.Field(default="MY_RULES_CONFIG_VALUE")
+ """
+ Value for a rules config variable.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_self_service_profile_custom_text_request_content.py b/src/auth0/management/types/set_self_service_profile_custom_text_request_content.py
new file mode 100644
index 00000000..7739c9d8
--- /dev/null
+++ b/src/auth0/management/types/set_self_service_profile_custom_text_request_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SetSelfServiceProfileCustomTextRequestContent = typing.Dict[str, str]
diff --git a/src/auth0/management/types/set_self_service_profile_custom_text_response_content.py b/src/auth0/management/types/set_self_service_profile_custom_text_response_content.py
new file mode 100644
index 00000000..8135ebc5
--- /dev/null
+++ b/src/auth0/management/types/set_self_service_profile_custom_text_response_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SetSelfServiceProfileCustomTextResponseContent = typing.Dict[str, str]
diff --git a/src/auth0/management/types/set_user_authentication_method_response_content.py b/src/auth0/management/types/set_user_authentication_method_response_content.py
new file mode 100644
index 00000000..9bc570ef
--- /dev/null
+++ b/src/auth0/management/types/set_user_authentication_method_response_content.py
@@ -0,0 +1,78 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .created_authentication_method_type_enum import CreatedAuthenticationMethodTypeEnum
+from .preferred_authentication_method_enum import PreferredAuthenticationMethodEnum
+from .user_authentication_method_properties import UserAuthenticationMethodProperties
+
+
+class SetUserAuthenticationMethodResponseContent(UniversalBaseModel):
+ """
+ The successfully created authentication method.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the newly created authentication method (automatically generated by the application)
+ """
+
+ type: CreatedAuthenticationMethodTypeEnum
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ A human-readable label to identify the authentication method.
+ """
+
+ totp_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Base32 encoded secret for TOTP generation
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to email authentication methods only. The email address used to send verification messages.
+ """
+
+ authentication_methods: typing.Optional[typing.List[UserAuthenticationMethodProperties]] = None
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = None
+ key_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authenticators only. The id of the credential.
+ """
+
+ public_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authenticators only. The public key.
+ """
+
+ aaguid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. Authenticator Attestation Globally Unique Identifier.
+ """
+
+ relying_party_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authenticators only. The relying party identifier.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Authentication method creation date
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_user_authentication_methods.py b/src/auth0/management/types/set_user_authentication_methods.py
new file mode 100644
index 00000000..366f42ab
--- /dev/null
+++ b/src/auth0/management/types/set_user_authentication_methods.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .authentication_type_enum import AuthenticationTypeEnum
+from .preferred_authentication_method_enum import PreferredAuthenticationMethodEnum
+
+
+class SetUserAuthenticationMethods(UniversalBaseModel):
+ type: AuthenticationTypeEnum
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = None
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ AA human-readable label to identify the authentication method.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to email authentication methods only. The email address used to send verification messages.
+ """
+
+ totp_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to totp authentication methods only. The base32 encoded secret for TOTP generation.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/set_user_authentication_methods_request_content.py b/src/auth0/management/types/set_user_authentication_methods_request_content.py
new file mode 100644
index 00000000..f4910466
--- /dev/null
+++ b/src/auth0/management/types/set_user_authentication_methods_request_content.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .set_user_authentication_methods import SetUserAuthenticationMethods
+
+SetUserAuthenticationMethodsRequestContent = typing.List[SetUserAuthenticationMethods]
diff --git a/src/auth0/management/types/sets_custom_texts_by_language_request_content.py b/src/auth0/management/types/sets_custom_texts_by_language_request_content.py
new file mode 100644
index 00000000..e7f87b1e
--- /dev/null
+++ b/src/auth0/management/types/sets_custom_texts_by_language_request_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SetsCustomTextsByLanguageRequestContent = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/signing_algorithm_enum.py b/src/auth0/management/types/signing_algorithm_enum.py
new file mode 100644
index 00000000..ce520ac6
--- /dev/null
+++ b/src/auth0/management/types/signing_algorithm_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SigningAlgorithmEnum = typing.Union[typing.Literal["HS256", "RS256", "RS512", "PS256"], typing.Any]
diff --git a/src/auth0/management/types/signing_keys.py b/src/auth0/management/types/signing_keys.py
new file mode 100644
index 00000000..eed3ecee
--- /dev/null
+++ b/src/auth0/management/types/signing_keys.py
@@ -0,0 +1,73 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .signing_keys_date import SigningKeysDate
+
+
+class SigningKeys(UniversalBaseModel):
+ kid: str = pydantic.Field(default="21hi274Rp02112mgkUGma")
+ """
+ The key id of the signing key
+ """
+
+ cert: str = pydantic.Field(
+ default="-----BEGIN CERTIFICATE-----\r\nMIIDDTCCA...YiA0TQhAt8=\r\n-----END CERTIFICATE-----"
+ )
+ """
+ The public certificate of the signing key
+ """
+
+ pkcs_7: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="pkcs7")] = pydantic.Field(
+ default="-----BEGIN PKCS7-----\r\nMIIDPA....t8xAA==\r\n-----END PKCS7-----"
+ )
+ """
+ The public certificate of the signing key in pkcs7 format
+ """
+
+ current: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ True if the key is the the current key
+ """
+
+ next: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the key is the the next key
+ """
+
+ previous: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the key is the the previous key
+ """
+
+ current_since: typing.Optional[SigningKeysDate] = None
+ current_until: typing.Optional[SigningKeysDate] = None
+ fingerprint: str = pydantic.Field(default="CC:FB:DD:D8:9A:B5:DE:1B:F0:CC:36:D2:99:59:21:12:03:DD:A8:25")
+ """
+ The cert fingerprint
+ """
+
+ thumbprint: str = pydantic.Field(default="CCFBDDD89AB5DE1BF0CC36D29959211203DDA825")
+ """
+ The cert thumbprint
+ """
+
+ revoked: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the key is revoked
+ """
+
+ revoked_at: typing.Optional[SigningKeysDate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/signing_keys_date.py b/src/auth0/management/types/signing_keys_date.py
new file mode 100644
index 00000000..e67fca2e
--- /dev/null
+++ b/src/auth0/management/types/signing_keys_date.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SigningKeysDate = typing.Union[str, typing.Dict[str, typing.Any]]
diff --git a/src/auth0/management/types/signup_schema.py b/src/auth0/management/types/signup_schema.py
new file mode 100644
index 00000000..1553eedd
--- /dev/null
+++ b/src/auth0/management/types/signup_schema.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .signup_status_enum import SignupStatusEnum
+
+
+class SignupSchema(UniversalBaseModel):
+ status: typing.Optional[SignupStatusEnum] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/signup_status_enum.py b/src/auth0/management/types/signup_status_enum.py
new file mode 100644
index 00000000..e0193950
--- /dev/null
+++ b/src/auth0/management/types/signup_status_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SignupStatusEnum = typing.Union[typing.Literal["required", "optional", "inactive"], typing.Any]
diff --git a/src/auth0/management/types/signup_verification.py b/src/auth0/management/types/signup_verification.py
new file mode 100644
index 00000000..ba76f497
--- /dev/null
+++ b/src/auth0/management/types/signup_verification.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SignupVerification(UniversalBaseModel):
+ active: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/signup_verified.py b/src/auth0/management/types/signup_verified.py
new file mode 100644
index 00000000..6bb9af8b
--- /dev/null
+++ b/src/auth0/management/types/signup_verified.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .signup_status_enum import SignupStatusEnum
+from .signup_verification import SignupVerification
+
+
+class SignupVerified(UniversalBaseModel):
+ status: typing.Optional[SignupStatusEnum] = None
+ verification: typing.Optional[SignupVerification] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/supported_locales.py b/src/auth0/management/types/supported_locales.py
new file mode 100644
index 00000000..3f28b3ed
--- /dev/null
+++ b/src/auth0/management/types/supported_locales.py
@@ -0,0 +1,90 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SupportedLocales = typing.Union[
+ typing.Literal[
+ "am",
+ "ar",
+ "ar-EG",
+ "ar-SA",
+ "az",
+ "bg",
+ "bn",
+ "bs",
+ "ca-ES",
+ "cnr",
+ "cs",
+ "cy",
+ "da",
+ "de",
+ "el",
+ "en",
+ "en-CA",
+ "es",
+ "es-419",
+ "es-AR",
+ "es-MX",
+ "et",
+ "eu-ES",
+ "fa",
+ "fi",
+ "fr",
+ "fr-CA",
+ "fr-FR",
+ "gl-ES",
+ "gu",
+ "he",
+ "hi",
+ "hr",
+ "hu",
+ "hy",
+ "id",
+ "is",
+ "it",
+ "ja",
+ "ka",
+ "kk",
+ "kn",
+ "ko",
+ "lt",
+ "lv",
+ "mk",
+ "ml",
+ "mn",
+ "mr",
+ "ms",
+ "my",
+ "nb",
+ "nl",
+ "nn",
+ "no",
+ "pa",
+ "pl",
+ "pt",
+ "pt-BR",
+ "pt-PT",
+ "ro",
+ "ru",
+ "sk",
+ "sl",
+ "so",
+ "sq",
+ "sr",
+ "sv",
+ "sw",
+ "ta",
+ "te",
+ "th",
+ "tl",
+ "tr",
+ "uk",
+ "ur",
+ "vi",
+ "zgh",
+ "zh-CN",
+ "zh-HK",
+ "zh-TW",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/suspicious_ip_throttling_allowlist.py b/src/auth0/management/types/suspicious_ip_throttling_allowlist.py
new file mode 100644
index 00000000..b63ba444
--- /dev/null
+++ b/src/auth0/management/types/suspicious_ip_throttling_allowlist.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .suspicious_ip_throttling_allowlist_item import SuspiciousIpThrottlingAllowlistItem
+
+SuspiciousIpThrottlingAllowlist = typing.List[SuspiciousIpThrottlingAllowlistItem]
diff --git a/src/auth0/management/types/suspicious_ip_throttling_allowlist_item.py b/src/auth0/management/types/suspicious_ip_throttling_allowlist_item.py
new file mode 100644
index 00000000..96019194
--- /dev/null
+++ b/src/auth0/management/types/suspicious_ip_throttling_allowlist_item.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+SuspiciousIpThrottlingAllowlistItem = str
diff --git a/src/auth0/management/types/suspicious_ip_throttling_pre_login_stage.py b/src/auth0/management/types/suspicious_ip_throttling_pre_login_stage.py
new file mode 100644
index 00000000..758ecf23
--- /dev/null
+++ b/src/auth0/management/types/suspicious_ip_throttling_pre_login_stage.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SuspiciousIpThrottlingPreLoginStage(UniversalBaseModel):
+ """
+ Configuration options that apply before every login attempt.
+ """
+
+ max_attempts: typing.Optional[int] = pydantic.Field(default=100)
+ """
+ Total number of attempts allowed per day.
+ """
+
+ rate: typing.Optional[int] = pydantic.Field(default=864000)
+ """
+ Interval of time, given in milliseconds, at which new attempts are granted.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/suspicious_ip_throttling_pre_user_registration_stage.py b/src/auth0/management/types/suspicious_ip_throttling_pre_user_registration_stage.py
new file mode 100644
index 00000000..bd7dc052
--- /dev/null
+++ b/src/auth0/management/types/suspicious_ip_throttling_pre_user_registration_stage.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SuspiciousIpThrottlingPreUserRegistrationStage(UniversalBaseModel):
+ """
+ Configuration options that apply before every user registration attempt.
+ """
+
+ max_attempts: typing.Optional[int] = pydantic.Field(default=50)
+ """
+ Total number of attempts allowed.
+ """
+
+ rate: typing.Optional[int] = pydantic.Field(default=1728000)
+ """
+ Interval of time, given in milliseconds, at which new attempts are granted.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/suspicious_ip_throttling_shields_enum.py b/src/auth0/management/types/suspicious_ip_throttling_shields_enum.py
new file mode 100644
index 00000000..9d570f3c
--- /dev/null
+++ b/src/auth0/management/types/suspicious_ip_throttling_shields_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+SuspiciousIpThrottlingShieldsEnum = typing.Union[typing.Literal["block", "admin_notification"], typing.Any]
diff --git a/src/auth0/management/types/suspicious_ip_throttling_stage.py b/src/auth0/management/types/suspicious_ip_throttling_stage.py
new file mode 100644
index 00000000..214caec2
--- /dev/null
+++ b/src/auth0/management/types/suspicious_ip_throttling_stage.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .suspicious_ip_throttling_pre_login_stage import SuspiciousIpThrottlingPreLoginStage
+from .suspicious_ip_throttling_pre_user_registration_stage import SuspiciousIpThrottlingPreUserRegistrationStage
+
+
+class SuspiciousIpThrottlingStage(UniversalBaseModel):
+ """
+ Holds per-stage configuration options (max_attempts and rate).
+ """
+
+ pre_login: typing_extensions.Annotated[
+ typing.Optional[SuspiciousIpThrottlingPreLoginStage], FieldMetadata(alias="pre-login")
+ ] = None
+ pre_user_registration: typing_extensions.Annotated[
+ typing.Optional[SuspiciousIpThrottlingPreUserRegistrationStage], FieldMetadata(alias="pre-user-registration")
+ ] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/tenant_oidc_logout_settings.py b/src/auth0/management/types/tenant_oidc_logout_settings.py
new file mode 100644
index 00000000..755b11f8
--- /dev/null
+++ b/src/auth0/management/types/tenant_oidc_logout_settings.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TenantOidcLogoutSettings(UniversalBaseModel):
+ """
+ Settings related to OIDC RP-initiated Logout
+ """
+
+ rp_logout_end_session_endpoint_discovery: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Enable the end_session_endpoint URL in the .well-known discovery configuration
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/tenant_settings_device_flow.py b/src/auth0/management/types/tenant_settings_device_flow.py
new file mode 100644
index 00000000..38d238a6
--- /dev/null
+++ b/src/auth0/management/types/tenant_settings_device_flow.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .tenant_settings_device_flow_charset import TenantSettingsDeviceFlowCharset
+
+
+class TenantSettingsDeviceFlow(UniversalBaseModel):
+ """
+ Device Flow configuration
+ """
+
+ charset: typing.Optional[TenantSettingsDeviceFlowCharset] = None
+ mask: typing.Optional[str] = pydantic.Field(default="****-****")
+ """
+ Mask used to format a generated User Code into a friendly, readable format.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/tenant_settings_device_flow_charset.py b/src/auth0/management/types/tenant_settings_device_flow_charset.py
new file mode 100644
index 00000000..7b68910b
--- /dev/null
+++ b/src/auth0/management/types/tenant_settings_device_flow_charset.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+TenantSettingsDeviceFlowCharset = typing.Union[typing.Literal["base20", "digits"], typing.Any]
diff --git a/src/auth0/management/types/tenant_settings_error_page.py b/src/auth0/management/types/tenant_settings_error_page.py
new file mode 100644
index 00000000..a589a1b5
--- /dev/null
+++ b/src/auth0/management/types/tenant_settings_error_page.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TenantSettingsErrorPage(UniversalBaseModel):
+ """
+ Error page customization.
+ """
+
+ html: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Custom Error HTML (Liquid syntax is supported).
+ """
+
+ show_log_link: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether to show the link to log as part of the default error page (true, default) or not to show the link (false).
+ """
+
+ url: typing.Optional[str] = pydantic.Field(default="https://mycompany.org/error")
+ """
+ URL to redirect to when an error occurs instead of showing the default error page.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/tenant_settings_flags.py b/src/auth0/management/types/tenant_settings_flags.py
new file mode 100644
index 00000000..b82c01b4
--- /dev/null
+++ b/src/auth0/management/types/tenant_settings_flags.py
@@ -0,0 +1,174 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class TenantSettingsFlags(UniversalBaseModel):
+ """
+ Flags used to change the behavior of this tenant.
+ """
+
+ change_pwd_flow_v_1: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="change_pwd_flow_v1")
+ ] = pydantic.Field(default=False)
+ """
+ Whether to use the older v1 change password flow (true, not recommended except for backward compatibility) or the newer safer flow (false, recommended).
+ """
+
+ enable_apis_section: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether the APIs section is enabled (true) or disabled (false).
+ """
+
+ disable_impersonation: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether the impersonation functionality has been disabled (true) or not (false). Read-only.
+ """
+
+ enable_client_connections: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether all current connections should be enabled when a new client (application) is created (true, default) or not (false).
+ """
+
+ enable_pipeline_2: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="enable_pipeline2")] = (
+ pydantic.Field(default=True)
+ )
+ """
+ Whether advanced API Authorization scenarios are enabled (true) or disabled (false).
+ """
+
+ allow_legacy_delegation_grant_types: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, clients are able to add legacy delegation grants.
+ """
+
+ allow_legacy_ro_grant_types: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, clients are able to add legacy RO grants.
+ """
+
+ allow_legacy_tokeninfo_endpoint: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the legacy `/tokeninfo` endpoint is enabled for your account (true) or unavailable (false).
+ """
+
+ enable_legacy_profile: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether ID tokens and the userinfo endpoint includes a complete user profile (true) or only OpenID Connect claims (false).
+ """
+
+ enable_idtoken_api_2: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="enable_idtoken_api2")
+ ] = pydantic.Field(default=None)
+ """
+ Whether ID tokens can be used to authorize some types of requests to API v2 (true) not not (false).
+ """
+
+ enable_public_signup_user_exists_error: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the public sign up process shows a user_exists error (true) or a generic error (false) if the user already exists.
+ """
+
+ enable_sso: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether users are prompted to confirm log in before SSO redirection (false) or are not prompted (true).
+ """
+
+ allow_changing_enable_sso: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the `enable_sso` setting can be changed (true) or not (false).
+ """
+
+ disable_clickjack_protection_headers: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether classic Universal Login prompts include additional security headers to prevent clickjacking (true) or no safeguard (false).
+ """
+
+ no_disclose_enterprise_connections: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Do not Publish Enterprise Connections Information with IdP domains on the lock configuration file.
+ """
+
+ enforce_client_authentication_on_passwordless_start: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enforce client authentication for passwordless start.
+ """
+
+ enable_adfs_waad_email_verification: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables the email verification flow during login for Azure AD and ADFS connections
+ """
+
+ revoke_refresh_token_grant: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Delete underlying grant when a Refresh Token is revoked via the Authentication API.
+ """
+
+ dashboard_log_streams_next: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables beta access to log streaming changes
+ """
+
+ dashboard_insights_view: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables new insights activity page view
+ """
+
+ disable_fields_map_fix: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Disables SAML fields map fix for bad mappings with repeated attributes
+ """
+
+ mfa_show_factor_list_on_enrollment: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Used to allow users to pick what factor to enroll of the available MFA factors.
+ """
+
+ remove_alg_from_jwks: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Removes alg property from jwks .well-known endpoint
+ """
+
+ improved_signup_bot_detection_in_classic: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Improves bot detection during signup in classic universal login
+ """
+
+ genai_trial: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ This tenant signed up for the Auth4GenAI trail
+ """
+
+ enable_dynamic_client_registration: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether third-party developers can dynamically register applications for your APIs (true) or not (false). This flag enables dynamic client registration.
+ """
+
+ disable_management_api_sms_obfuscation: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ If true, SMS phone numbers will not be obfuscated in Management API GET calls.
+ """
+
+ trust_azure_adfs_email_verified_connection_property: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Changes email_verified behavior for Azure AD/ADFS connections when enabled. Sets email_verified to false otherwise.
+ """
+
+ custom_domains_provisioning: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ If true, custom domains feature will be enabled for tenant.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/tenant_settings_guardian_page.py b/src/auth0/management/types/tenant_settings_guardian_page.py
new file mode 100644
index 00000000..7fcb8e20
--- /dev/null
+++ b/src/auth0/management/types/tenant_settings_guardian_page.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TenantSettingsGuardianPage(UniversalBaseModel):
+ """
+ Guardian page customization.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether to use the custom Guardian HTML (true) or the default Auth0 page (false, default)
+ """
+
+ html: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Custom Guardian HTML (Liquid syntax is supported).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/tenant_settings_mtls.py b/src/auth0/management/types/tenant_settings_mtls.py
new file mode 100644
index 00000000..e65bb1f2
--- /dev/null
+++ b/src/auth0/management/types/tenant_settings_mtls.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TenantSettingsMtls(UniversalBaseModel):
+ """
+ mTLS configuration.
+ """
+
+ enable_endpoint_aliases: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ If true, enables mTLS endpoint aliases
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/tenant_settings_password_page.py b/src/auth0/management/types/tenant_settings_password_page.py
new file mode 100644
index 00000000..00690b3a
--- /dev/null
+++ b/src/auth0/management/types/tenant_settings_password_page.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TenantSettingsPasswordPage(UniversalBaseModel):
+ """
+ Change Password page customization.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether to use the custom change password HTML (true) or the default Auth0 page (false). Default is to use the Auth0 page.
+ """
+
+ html: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Custom change password HTML (Liquid syntax supported).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/tenant_settings_resource_parameter_profile.py b/src/auth0/management/types/tenant_settings_resource_parameter_profile.py
new file mode 100644
index 00000000..8afd1312
--- /dev/null
+++ b/src/auth0/management/types/tenant_settings_resource_parameter_profile.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+TenantSettingsResourceParameterProfile = typing.Union[typing.Literal["audience", "compatibility"], typing.Any]
diff --git a/src/auth0/management/types/tenant_settings_sessions.py b/src/auth0/management/types/tenant_settings_sessions.py
new file mode 100644
index 00000000..0cd3e396
--- /dev/null
+++ b/src/auth0/management/types/tenant_settings_sessions.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TenantSettingsSessions(UniversalBaseModel):
+ """
+ Sessions related settings for tenant
+ """
+
+ oidc_logout_prompt_enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether to bypass prompting logic (false) when performing OIDC Logout
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/test_action_payload.py b/src/auth0/management/types/test_action_payload.py
new file mode 100644
index 00000000..b9e05814
--- /dev/null
+++ b/src/auth0/management/types/test_action_payload.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+TestActionPayload = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/test_action_response_content.py b/src/auth0/management/types/test_action_response_content.py
new file mode 100644
index 00000000..c5b5ca5b
--- /dev/null
+++ b/src/auth0/management/types/test_action_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .test_action_result_payload import TestActionResultPayload
+
+
+class TestActionResponseContent(UniversalBaseModel):
+ payload: typing.Optional[TestActionResultPayload] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/test_action_result_payload.py b/src/auth0/management/types/test_action_result_payload.py
new file mode 100644
index 00000000..ea0beaa6
--- /dev/null
+++ b/src/auth0/management/types/test_action_result_payload.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+TestActionResultPayload = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/test_custom_domain_response_content.py b/src/auth0/management/types/test_custom_domain_response_content.py
new file mode 100644
index 00000000..a1c79a20
--- /dev/null
+++ b/src/auth0/management/types/test_custom_domain_response_content.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TestCustomDomainResponseContent(UniversalBaseModel):
+ success: bool = pydantic.Field()
+ """
+ Result of the operation.
+ """
+
+ message: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Message describing the operation status.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/test_event_data_content.py b/src/auth0/management/types/test_event_data_content.py
new file mode 100644
index 00000000..b8dd4a98
--- /dev/null
+++ b/src/auth0/management/types/test_event_data_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+TestEventDataContent = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/token_exchange_profile_response_content.py b/src/auth0/management/types/token_exchange_profile_response_content.py
new file mode 100644
index 00000000..91141ba7
--- /dev/null
+++ b/src/auth0/management/types/token_exchange_profile_response_content.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .token_exchange_profile_type_enum import TokenExchangeProfileTypeEnum
+
+
+class TokenExchangeProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The unique ID of the token exchange profile.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="Token Exchange Profile 1")
+ """
+ Friendly name of this profile.
+ """
+
+ subject_token_type: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Subject token type for this profile. When receiving a token exchange request on the Authentication API, the corresponding token exchange profile with a matching subject_token_type will be executed. This must be a URI.
+ """
+
+ action_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the Custom Token Exchange action to execute for this profile, in order to validate the subject_token. The action must use the custom-token-exchange trigger.
+ """
+
+ type: typing.Optional[TokenExchangeProfileTypeEnum] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this profile was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this profile was updated.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/token_exchange_profile_type_enum.py b/src/auth0/management/types/token_exchange_profile_type_enum.py
new file mode 100644
index 00000000..c89e74c6
--- /dev/null
+++ b/src/auth0/management/types/token_exchange_profile_type_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+TokenExchangeProfileTypeEnum = typing.Literal["custom_authentication"]
diff --git a/src/auth0/management/types/token_quota.py b/src/auth0/management/types/token_quota.py
new file mode 100644
index 00000000..b12ef20b
--- /dev/null
+++ b/src/auth0/management/types/token_quota.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .token_quota_client_credentials import TokenQuotaClientCredentials
+
+
+class TokenQuota(UniversalBaseModel):
+ client_credentials: TokenQuotaClientCredentials
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/token_quota_client_credentials.py b/src/auth0/management/types/token_quota_client_credentials.py
new file mode 100644
index 00000000..87a2dfb8
--- /dev/null
+++ b/src/auth0/management/types/token_quota_client_credentials.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TokenQuotaClientCredentials(UniversalBaseModel):
+ """
+ The token quota configuration
+ """
+
+ enforce: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, the quota will be enforced and requests in excess of the quota will fail. If disabled, the quota will not be enforced, but notifications for requests exceeding the quota will be available in logs.
+ """
+
+ per_day: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Maximum number of issued tokens per day
+ """
+
+ per_hour: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Maximum number of issued tokens per hour
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/token_quota_configuration.py b/src/auth0/management/types/token_quota_configuration.py
new file mode 100644
index 00000000..d7ccea5f
--- /dev/null
+++ b/src/auth0/management/types/token_quota_configuration.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .token_quota_client_credentials import TokenQuotaClientCredentials
+
+
+class TokenQuotaConfiguration(UniversalBaseModel):
+ client_credentials: TokenQuotaClientCredentials
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/twilio_provider_configuration.py b/src/auth0/management/types/twilio_provider_configuration.py
new file mode 100644
index 00000000..6cba6298
--- /dev/null
+++ b/src/auth0/management/types/twilio_provider_configuration.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .twilio_provider_delivery_method_enum import TwilioProviderDeliveryMethodEnum
+
+
+class TwilioProviderConfiguration(UniversalBaseModel):
+ default_from: typing.Optional[str] = None
+ mssid: typing.Optional[str] = None
+ sid: str
+ delivery_methods: typing.List[TwilioProviderDeliveryMethodEnum]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/twilio_provider_credentials.py b/src/auth0/management/types/twilio_provider_credentials.py
new file mode 100644
index 00000000..4fa1b55c
--- /dev/null
+++ b/src/auth0/management/types/twilio_provider_credentials.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TwilioProviderCredentials(UniversalBaseModel):
+ auth_token: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/twilio_provider_delivery_method_enum.py b/src/auth0/management/types/twilio_provider_delivery_method_enum.py
new file mode 100644
index 00000000..b0bef591
--- /dev/null
+++ b/src/auth0/management/types/twilio_provider_delivery_method_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+TwilioProviderDeliveryMethodEnum = typing.Union[typing.Literal["text", "voice"], typing.Any]
diff --git a/src/auth0/management/types/universal_login_experience_enum.py b/src/auth0/management/types/universal_login_experience_enum.py
new file mode 100644
index 00000000..44159c8c
--- /dev/null
+++ b/src/auth0/management/types/universal_login_experience_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UniversalLoginExperienceEnum = typing.Union[typing.Literal["new", "classic"], typing.Any]
diff --git a/src/auth0/management/types/update_action_bindings_response_content.py b/src/auth0/management/types/update_action_bindings_response_content.py
new file mode 100644
index 00000000..8b165baa
--- /dev/null
+++ b/src/auth0/management/types/update_action_bindings_response_content.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_binding import ActionBinding
+
+
+class UpdateActionBindingsResponseContent(UniversalBaseModel):
+ bindings: typing.Optional[typing.List[ActionBinding]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_action_response_content.py b/src/auth0/management/types/update_action_response_content.py
new file mode 100644
index 00000000..221dd5fd
--- /dev/null
+++ b/src/auth0/management/types/update_action_response_content.py
@@ -0,0 +1,92 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .action_build_status_enum import ActionBuildStatusEnum
+from .action_deployed_version import ActionDeployedVersion
+from .action_secret_response import ActionSecretResponse
+from .action_trigger import ActionTrigger
+from .action_version_dependency import ActionVersionDependency
+from .integration import Integration
+
+
+class UpdateActionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="910b1053-577f-4d81-a8c8-020e7319a38a")
+ """
+ The unique ID of the action.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="my-action")
+ """
+ The name of an action.
+ """
+
+ supported_triggers: typing.Optional[typing.List[ActionTrigger]] = pydantic.Field(default=None)
+ """
+ The list of triggers that this action supports. At this time, an action can only target a single trigger at a time.
+ """
+
+ all_changes_deployed: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if all of an Action's contents have been deployed.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was updated.
+ """
+
+ code: typing.Optional[str] = pydantic.Field(default="module.exports = () => {}")
+ """
+ The source code of the action.
+ """
+
+ dependencies: typing.Optional[typing.List[ActionVersionDependency]] = pydantic.Field(default=None)
+ """
+ The list of third party npm modules, and their versions, that this action depends on.
+ """
+
+ runtime: typing.Optional[str] = pydantic.Field(default="node22")
+ """
+ The Node runtime. For example: `node22`, defaults to `node22`
+ """
+
+ secrets: typing.Optional[typing.List[ActionSecretResponse]] = pydantic.Field(default=None)
+ """
+ The list of secrets that are included in an action or a version of an action.
+ """
+
+ deployed_version: typing.Optional[ActionDeployedVersion] = None
+ installed_integration_id: typing.Optional[str] = pydantic.Field(default="7d2bc0c9-c0c2-433a-9f4e-86ef80270aad")
+ """
+ installed_integration_id is the fk reference to the InstalledIntegration entity.
+ """
+
+ integration: typing.Optional[Integration] = None
+ status: typing.Optional[ActionBuildStatusEnum] = None
+ built_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this action was built successfully.
+ """
+
+ deploy: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ True if the action should be deployed after creation.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_acul_response_content.py b/src/auth0/management/types/update_acul_response_content.py
new file mode 100644
index 00000000..1e08cfe8
--- /dev/null
+++ b/src/auth0/management/types/update_acul_response_content.py
@@ -0,0 +1,43 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .acul_filters import AculFilters
+from .acul_head_tag import AculHeadTag
+from .acul_rendering_mode_enum import AculRenderingModeEnum
+
+
+class UpdateAculResponseContent(UniversalBaseModel):
+ rendering_mode: typing.Optional[AculRenderingModeEnum] = None
+ context_configuration: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Context values to make available
+ """
+
+ default_head_tags_disabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Override Universal Login default head tags
+ """
+
+ use_page_template: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Use page template with ACUL
+ """
+
+ head_tags: typing.Optional[typing.List[AculHeadTag]] = pydantic.Field(default=None)
+ """
+ An array of head tags
+ """
+
+ filters: typing.Optional[AculFilters] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_attack_protection_captcha_response_content.py b/src/auth0/management/types/update_attack_protection_captcha_response_content.py
new file mode 100644
index 00000000..21f21ff8
--- /dev/null
+++ b/src/auth0/management/types/update_attack_protection_captcha_response_content.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .attack_protection_captcha_arkose_response_content import AttackProtectionCaptchaArkoseResponseContent
+from .attack_protection_captcha_auth_challenge_response_content import (
+ AttackProtectionCaptchaAuthChallengeResponseContent,
+)
+from .attack_protection_captcha_friendly_captcha_response_content import (
+ AttackProtectionCaptchaFriendlyCaptchaResponseContent,
+)
+from .attack_protection_captcha_hcaptcha_response_content import AttackProtectionCaptchaHcaptchaResponseContent
+from .attack_protection_captcha_recaptcha_enterprise_response_content import (
+ AttackProtectionCaptchaRecaptchaEnterpriseResponseContent,
+)
+from .attack_protection_captcha_recaptcha_v_2_response_content import AttackProtectionCaptchaRecaptchaV2ResponseContent
+from .attack_protection_captcha_simple_captcha_response_content import (
+ AttackProtectionCaptchaSimpleCaptchaResponseContent,
+)
+
+
+class UpdateAttackProtectionCaptchaResponseContent(UniversalBaseModel):
+ active_provider_id: typing.Optional[str] = None
+ arkose: typing.Optional[AttackProtectionCaptchaArkoseResponseContent] = None
+ auth_challenge: typing.Optional[AttackProtectionCaptchaAuthChallengeResponseContent] = None
+ hcaptcha: typing.Optional[AttackProtectionCaptchaHcaptchaResponseContent] = None
+ friendly_captcha: typing.Optional[AttackProtectionCaptchaFriendlyCaptchaResponseContent] = None
+ recaptcha_enterprise: typing.Optional[AttackProtectionCaptchaRecaptchaEnterpriseResponseContent] = None
+ recaptcha_v_2: typing_extensions.Annotated[
+ typing.Optional[AttackProtectionCaptchaRecaptchaV2ResponseContent], FieldMetadata(alias="recaptcha_v2")
+ ] = None
+ simple_captcha: typing.Optional[AttackProtectionCaptchaSimpleCaptchaResponseContent] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_bot_detection_settings_response_content.py b/src/auth0/management/types/update_bot_detection_settings_response_content.py
new file mode 100644
index 00000000..a679df9f
--- /dev/null
+++ b/src/auth0/management/types/update_bot_detection_settings_response_content.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .bot_detection_allowlist import BotDetectionAllowlist
+from .bot_detection_challenge_policy_password_flow_enum import BotDetectionChallengePolicyPasswordFlowEnum
+from .bot_detection_challenge_policy_password_reset_flow_enum import BotDetectionChallengePolicyPasswordResetFlowEnum
+from .bot_detection_challenge_policy_passwordless_flow_enum import BotDetectionChallengePolicyPasswordlessFlowEnum
+from .bot_detection_level_enum import BotDetectionLevelEnum
+from .bot_detection_monitoring_mode_enabled import BotDetectionMonitoringModeEnabled
+
+
+class UpdateBotDetectionSettingsResponseContent(UniversalBaseModel):
+ bot_detection_level: typing.Optional[BotDetectionLevelEnum] = None
+ challenge_password_policy: typing.Optional[BotDetectionChallengePolicyPasswordFlowEnum] = None
+ challenge_passwordless_policy: typing.Optional[BotDetectionChallengePolicyPasswordlessFlowEnum] = None
+ challenge_password_reset_policy: typing.Optional[BotDetectionChallengePolicyPasswordResetFlowEnum] = None
+ allowlist: typing.Optional[BotDetectionAllowlist] = None
+ monitoring_mode_enabled: typing.Optional[BotDetectionMonitoringModeEnabled] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_branding_colors.py b/src/auth0/management/types/update_branding_colors.py
new file mode 100644
index 00000000..96a723aa
--- /dev/null
+++ b/src/auth0/management/types/update_branding_colors.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .update_branding_page_background import UpdateBrandingPageBackground
+
+
+class UpdateBrandingColors(UniversalBaseModel):
+ """
+ Custom color settings.
+ """
+
+ primary: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Accent color.
+ """
+
+ page_background: typing.Optional[UpdateBrandingPageBackground] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_branding_font.py b/src/auth0/management/types/update_branding_font.py
new file mode 100644
index 00000000..f3b0aee9
--- /dev/null
+++ b/src/auth0/management/types/update_branding_font.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateBrandingFont(UniversalBaseModel):
+ """
+ Custom font settings.
+ """
+
+ url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL for the custom font. The URL must point to a font file and not a stylesheet. Must use HTTPS.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_branding_page_background.py b/src/auth0/management/types/update_branding_page_background.py
new file mode 100644
index 00000000..4c562d8a
--- /dev/null
+++ b/src/auth0/management/types/update_branding_page_background.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UpdateBrandingPageBackground = typing.Union[typing.Optional[str], typing.Optional[typing.Dict[str, typing.Any]]]
diff --git a/src/auth0/management/types/update_branding_phone_provider_response_content.py b/src/auth0/management/types/update_branding_phone_provider_response_content.py
new file mode 100644
index 00000000..6f20b80a
--- /dev/null
+++ b/src/auth0/management/types/update_branding_phone_provider_response_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .phone_provider_channel_enum import PhoneProviderChannelEnum
+from .phone_provider_configuration import PhoneProviderConfiguration
+from .phone_provider_name_enum import PhoneProviderNameEnum
+
+
+class UpdateBrandingPhoneProviderResponseContent(UniversalBaseModel):
+ """
+ Phone provider configuration schema
+ """
+
+ id: typing.Optional[str] = None
+ tenant: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the tenant
+ """
+
+ name: PhoneProviderNameEnum
+ channel: typing.Optional[PhoneProviderChannelEnum] = None
+ disabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the provider is enabled (false) or disabled (true).
+ """
+
+ configuration: typing.Optional[PhoneProviderConfiguration] = None
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The provider's creation date and time in ISO 8601 format
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time of the last update to the provider in ISO 8601 format
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_branding_response_content.py b/src/auth0/management/types/update_branding_response_content.py
new file mode 100644
index 00000000..0aa9bd46
--- /dev/null
+++ b/src/auth0/management/types/update_branding_response_content.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .branding_colors import BrandingColors
+from .branding_font import BrandingFont
+
+
+class UpdateBrandingResponseContent(UniversalBaseModel):
+ colors: typing.Optional[BrandingColors] = None
+ favicon_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL for the favicon. Must use HTTPS.
+ """
+
+ logo_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL for the logo. Must use HTTPS.
+ """
+
+ font: typing.Optional[BrandingFont] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_branding_theme_response_content.py b/src/auth0/management/types/update_branding_theme_response_content.py
new file mode 100644
index 00000000..6684278a
--- /dev/null
+++ b/src/auth0/management/types/update_branding_theme_response_content.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .branding_theme_borders import BrandingThemeBorders
+from .branding_theme_colors import BrandingThemeColors
+from .branding_theme_fonts import BrandingThemeFonts
+from .branding_theme_page_background import BrandingThemePageBackground
+from .branding_theme_widget import BrandingThemeWidget
+
+
+class UpdateBrandingThemeResponseContent(UniversalBaseModel):
+ borders: BrandingThemeBorders
+ colors: BrandingThemeColors
+ display_name: typing_extensions.Annotated[str, FieldMetadata(alias="displayName")] = pydantic.Field()
+ """
+ Display Name
+ """
+
+ fonts: BrandingThemeFonts
+ page_background: BrandingThemePageBackground
+ theme_id: typing_extensions.Annotated[str, FieldMetadata(alias="themeId")] = pydantic.Field()
+ """
+ Theme Id
+ """
+
+ widget: BrandingThemeWidget
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_breached_password_detection_settings_response_content.py b/src/auth0/management/types/update_breached_password_detection_settings_response_content.py
new file mode 100644
index 00000000..d40badcf
--- /dev/null
+++ b/src/auth0/management/types/update_breached_password_detection_settings_response_content.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .breached_password_detection_admin_notification_frequency_enum import (
+ BreachedPasswordDetectionAdminNotificationFrequencyEnum,
+)
+from .breached_password_detection_method_enum import BreachedPasswordDetectionMethodEnum
+from .breached_password_detection_shields_enum import BreachedPasswordDetectionShieldsEnum
+from .breached_password_detection_stage import BreachedPasswordDetectionStage
+
+
+class UpdateBreachedPasswordDetectionSettingsResponseContent(UniversalBaseModel):
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether or not breached password detection is active.
+ """
+
+ shields: typing.Optional[typing.List[BreachedPasswordDetectionShieldsEnum]] = pydantic.Field(default=None)
+ """
+ Action to take when a breached password is detected during a login.
+ Possible values: block, user_notification, admin_notification.
+ """
+
+ admin_notification_frequency: typing.Optional[
+ typing.List[BreachedPasswordDetectionAdminNotificationFrequencyEnum]
+ ] = pydantic.Field(default=None)
+ """
+ When "admin_notification" is enabled, determines how often email notifications are sent.
+ Possible values: immediately, daily, weekly, monthly.
+ """
+
+ method: typing.Optional[BreachedPasswordDetectionMethodEnum] = None
+ stage: typing.Optional[BreachedPasswordDetectionStage] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_brute_force_settings_response_content.py b/src/auth0/management/types/update_brute_force_settings_response_content.py
new file mode 100644
index 00000000..ec437f7b
--- /dev/null
+++ b/src/auth0/management/types/update_brute_force_settings_response_content.py
@@ -0,0 +1,50 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .update_brute_force_settings_response_content_mode import UpdateBruteForceSettingsResponseContentMode
+from .update_brute_force_settings_response_content_shields_item import (
+ UpdateBruteForceSettingsResponseContentShieldsItem,
+)
+
+
+class UpdateBruteForceSettingsResponseContent(UniversalBaseModel):
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether or not brute force attack protections are active.
+ """
+
+ shields: typing.Optional[typing.List[UpdateBruteForceSettingsResponseContentShieldsItem]] = pydantic.Field(
+ default=None
+ )
+ """
+ Action to take when a brute force protection threshold is violated.
+ Possible values: block, user_notification.
+ """
+
+ allowlist: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of trusted IP addresses that will not have attack protection enforced against them.
+ """
+
+ mode: typing.Optional[UpdateBruteForceSettingsResponseContentMode] = pydantic.Field(default=None)
+ """
+ Account Lockout: Determines whether or not IP address is used when counting failed attempts.
+ Possible values: count_per_identifier_and_ip, count_per_identifier.
+ """
+
+ max_attempts: typing.Optional[int] = pydantic.Field(default=10)
+ """
+ Maximum number of unsuccessful attempts.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_brute_force_settings_response_content_mode.py b/src/auth0/management/types/update_brute_force_settings_response_content_mode.py
new file mode 100644
index 00000000..75affba6
--- /dev/null
+++ b/src/auth0/management/types/update_brute_force_settings_response_content_mode.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UpdateBruteForceSettingsResponseContentMode = typing.Union[
+ typing.Literal["count_per_identifier_and_ip", "count_per_identifier"], typing.Any
+]
diff --git a/src/auth0/management/types/update_brute_force_settings_response_content_shields_item.py b/src/auth0/management/types/update_brute_force_settings_response_content_shields_item.py
new file mode 100644
index 00000000..2e75d851
--- /dev/null
+++ b/src/auth0/management/types/update_brute_force_settings_response_content_shields_item.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UpdateBruteForceSettingsResponseContentShieldsItem = typing.Union[
+ typing.Literal["block", "user_notification"], typing.Any
+]
diff --git a/src/auth0/management/types/update_client_grant_response_content.py b/src/auth0/management/types/update_client_grant_response_content.py
new file mode 100644
index 00000000..994271ae
--- /dev/null
+++ b/src/auth0/management/types/update_client_grant_response_content.py
@@ -0,0 +1,56 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .client_grant_organization_usage_enum import ClientGrantOrganizationUsageEnum
+from .client_grant_subject_type_enum import ClientGrantSubjectTypeEnum
+
+
+class UpdateClientGrantResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the client grant.
+ """
+
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the client.
+ """
+
+ audience: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The audience (API identifier) of this client grant.
+ """
+
+ scope: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Scopes allowed for this client grant.
+ """
+
+ organization_usage: typing.Optional[ClientGrantOrganizationUsageEnum] = None
+ allow_any_organization: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, any organization can be used with this grant. If disabled (default), the grant must be explicitly assigned to the desired organizations.
+ """
+
+ is_system: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If enabled, this grant is a special grant created by Auth0. It cannot be modified or deleted directly.
+ """
+
+ subject_type: typing.Optional[ClientGrantSubjectTypeEnum] = None
+ authorization_details_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Types of authorization_details allowed for this client grant. Use of this field is subject to the applicable Free Trial terms in Okta’s Master Subscription Agreement.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_client_response_content.py b/src/auth0/management/types/update_client_response_content.py
new file mode 100644
index 00000000..1740ff68
--- /dev/null
+++ b/src/auth0/management/types/update_client_response_content.py
@@ -0,0 +1,235 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .client_addons import ClientAddons
+from .client_app_type_enum import ClientAppTypeEnum
+from .client_async_approval_notifications_channels_api_post_configuration import (
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration,
+)
+from .client_authentication_method import ClientAuthenticationMethod
+from .client_compliance_level_enum import ClientComplianceLevelEnum
+from .client_default_organization import ClientDefaultOrganization
+from .client_encryption_key import ClientEncryptionKey
+from .client_jwt_configuration import ClientJwtConfiguration
+from .client_metadata import ClientMetadata
+from .client_mobile import ClientMobile
+from .client_oidc_backchannel_logout_settings import ClientOidcBackchannelLogoutSettings
+from .client_organization_discovery_enum import ClientOrganizationDiscoveryEnum
+from .client_organization_require_behavior_enum import ClientOrganizationRequireBehaviorEnum
+from .client_organization_usage_enum import ClientOrganizationUsageEnum
+from .client_refresh_token_configuration import ClientRefreshTokenConfiguration
+from .client_session_transfer_configuration import ClientSessionTransferConfiguration
+from .client_signed_request_object_with_credential_id import ClientSignedRequestObjectWithCredentialId
+from .client_signing_keys import ClientSigningKeys
+from .client_token_endpoint_auth_method_enum import ClientTokenEndpointAuthMethodEnum
+from .client_token_exchange_configuration import ClientTokenExchangeConfiguration
+from .express_configuration import ExpressConfiguration
+from .token_quota import TokenQuota
+
+
+class UpdateClientResponseContent(UniversalBaseModel):
+ client_id: typing.Optional[str] = pydantic.Field(default="AaiyAPdpYdesoKnqjj8HJqRn4T5titww")
+ """
+ ID of this client.
+ """
+
+ tenant: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Name of the tenant this client belongs to.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="My application")
+ """
+ Name of this client (min length: 1 character, does not allow `<` or `>`).
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Free text description of this client (max length: 140 characters).
+ """
+
+ global_: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="global")] = pydantic.Field(
+ default=False
+ )
+ """
+ Whether this is your global 'All Applications' client representing legacy tenant settings (true) or a regular client (false).
+ """
+
+ client_secret: typing.Optional[str] = pydantic.Field(
+ default="MG_TNT2ver-SylNat-_VeMmd-4m0Waba0jr1troztBniSChEw0glxEmgEi2Kw40H"
+ )
+ """
+ Client secret (which you must not make public).
+ """
+
+ app_type: typing.Optional[ClientAppTypeEnum] = None
+ logo_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL of the logo to display for this client. Recommended size is 150x150 pixels.
+ """
+
+ is_first_party: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this client a first party client (true) or not (false).
+ """
+
+ oidc_conformant: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this client conforms to strict OIDC specifications (true) or uses legacy features (false).
+ """
+
+ callbacks: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs whitelisted for Auth0 to use as a callback to the client after authentication.
+ """
+
+ allowed_origins: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs allowed to make requests from JavaScript to Auth0 API (typically used with CORS). By default, all your callback URLs will be allowed. This field allows you to enter other origins if necessary. You can also use wildcards at the subdomain level (e.g., https://*.contoso.com). Query strings and hash information are not taken into account when validating these URLs.
+ """
+
+ web_origins: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of allowed origins for use with Cross-Origin Authentication, Device Flow, and web message response mode.
+ """
+
+ client_aliases: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of audiences/realms for SAML protocol. Used by the wsfed addon.
+ """
+
+ allowed_clients: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of allow clients and API ids that are allowed to make delegation requests. Empty means all all your clients are allowed.
+ """
+
+ allowed_logout_urls: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Comma-separated list of URLs that are valid to redirect to after logout from Auth0. Wildcards are allowed for subdomains.
+ """
+
+ session_transfer: typing.Optional[ClientSessionTransferConfiguration] = None
+ oidc_logout: typing.Optional[ClientOidcBackchannelLogoutSettings] = None
+ grant_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of grant types supported for this application. Can include `authorization_code`, `implicit`, `refresh_token`, `client_credentials`, `password`, `http://auth0.com/oauth/grant-type/password-realm`, `http://auth0.com/oauth/grant-type/mfa-oob`, `http://auth0.com/oauth/grant-type/mfa-otp`, `http://auth0.com/oauth/grant-type/mfa-recovery-code`, `urn:openid:params:grant-type:ciba`, `urn:ietf:params:oauth:grant-type:device_code`, and `urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token`.
+ """
+
+ jwt_configuration: typing.Optional[ClientJwtConfiguration] = None
+ signing_keys: typing.Optional[ClientSigningKeys] = None
+ encryption_key: typing.Optional[ClientEncryptionKey] = None
+ sso: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Applies only to SSO clients and determines whether Auth0 will handle Single Sign On (true) or whether the Identity Provider will (false).
+ """
+
+ sso_disabled: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether Single Sign On is disabled (true) or enabled (true). Defaults to true.
+ """
+
+ cross_origin_authentication: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this client can be used to make cross-origin authentication requests (true) or it is not allowed to make such requests (false).
+ """
+
+ cross_origin_loc: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL of the location in your site where the cross origin verification takes place for the cross-origin auth flow when performing Auth in your own domain instead of Auth0 hosted login page.
+ """
+
+ custom_login_page_on: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether a custom login page is to be used (true) or the default provided login page (false).
+ """
+
+ custom_login_page: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The content (HTML, CSS, JS) of the custom login page.
+ """
+
+ custom_login_page_preview: typing.Optional[str] = pydantic.Field(default="")
+ """
+ The content (HTML, CSS, JS) of the custom login page. (Used on Previews)
+ """
+
+ form_template: typing.Optional[str] = pydantic.Field(default="")
+ """
+ HTML form template to be used for WS-Federation.
+ """
+
+ addons: typing.Optional[ClientAddons] = None
+ token_endpoint_auth_method: typing.Optional[ClientTokenEndpointAuthMethodEnum] = None
+ is_token_endpoint_ip_header_trusted: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ If true, trust that the IP specified in the `auth0-forwarded-for` header is the end-user's IP for brute-force-protection on token endpoint.
+ """
+
+ client_metadata: typing.Optional[ClientMetadata] = None
+ mobile: typing.Optional[ClientMobile] = None
+ initiate_login_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Initiate login uri, must be https
+ """
+
+ refresh_token: typing.Optional[ClientRefreshTokenConfiguration] = None
+ default_organization: typing.Optional[ClientDefaultOrganization] = None
+ organization_usage: typing.Optional[ClientOrganizationUsageEnum] = None
+ organization_require_behavior: typing.Optional[ClientOrganizationRequireBehaviorEnum] = None
+ organization_discovery_methods: typing.Optional[typing.List[ClientOrganizationDiscoveryEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ Defines the available methods for organization discovery during the `pre_login_prompt`. Users can discover their organization either by `email`, `organization_name` or both.
+ """
+
+ client_authentication_methods: typing.Optional[ClientAuthenticationMethod] = None
+ require_pushed_authorization_requests: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Makes the use of Pushed Authorization Requests mandatory for this client
+ """
+
+ require_proof_of_possession: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Makes the use of Proof-of-Possession mandatory for this client
+ """
+
+ signed_request_object: typing.Optional[ClientSignedRequestObjectWithCredentialId] = None
+ compliance_level: typing.Optional[ClientComplianceLevelEnum] = None
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+ """
+
+ token_exchange: typing.Optional[ClientTokenExchangeConfiguration] = None
+ par_request_expiry: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Specifies how long, in seconds, a Pushed Authorization Request URI remains valid
+ """
+
+ token_quota: typing.Optional[TokenQuota] = None
+ express_configuration: typing.Optional[ExpressConfiguration] = None
+ resource_server_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The identifier of the resource server that this client is linked to.
+ """
+
+ async_approval_notification_channels: typing.Optional[
+ ClientAsyncApprovalNotificationsChannelsApiPostConfiguration
+ ] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_connection_options.py b/src/auth0/management/types/update_connection_options.py
new file mode 100644
index 00000000..0020e2ce
--- /dev/null
+++ b/src/auth0/management/types/update_connection_options.py
@@ -0,0 +1,93 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .connection_attributes import ConnectionAttributes
+from .connection_authentication_methods import ConnectionAuthenticationMethods
+from .connection_custom_scripts import ConnectionCustomScripts
+from .connection_federated_connections_access_tokens import ConnectionFederatedConnectionsAccessTokens
+from .connection_gateway_authentication import ConnectionGatewayAuthentication
+from .connection_identifier_precedence_enum import ConnectionIdentifierPrecedenceEnum
+from .connection_passkey_options import ConnectionPasskeyOptions
+from .connection_password_complexity_options import ConnectionPasswordComplexityOptions
+from .connection_password_dictionary_options import ConnectionPasswordDictionaryOptions
+from .connection_password_history_options import ConnectionPasswordHistoryOptions
+from .connection_password_no_personal_info_options import ConnectionPasswordNoPersonalInfoOptions
+from .connection_password_policy_enum import ConnectionPasswordPolicyEnum
+from .connection_set_user_root_attributes_enum import ConnectionSetUserRootAttributesEnum
+from .connection_upstream_params import ConnectionUpstreamParams
+from .connection_validation_options import ConnectionValidationOptions
+
+
+class UpdateConnectionOptions(UniversalBaseModel):
+ """
+ The connection's options (depend on the connection strategy). To update these options, the `update:connections_options` scope must be present. To verify your changes, also include the `read:connections_options` scope. If this scope is not specified, you will not be able to review the updated object.
+ """
+
+ validation: typing.Optional[ConnectionValidationOptions] = None
+ non_persistent_attrs: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ An array of user fields that should not be stored in the Auth0 database (https://auth0.com/docs/security/data-security/denylist)
+ """
+
+ precedence: typing.Optional[typing.List[ConnectionIdentifierPrecedenceEnum]] = pydantic.Field(default=None)
+ """
+ Order of precedence for attribute types. If the property is not specified, the default precedence of attributes will be used.
+ """
+
+ attributes: typing.Optional[ConnectionAttributes] = None
+ enable_script_context: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Set to true to inject context into custom DB scripts (warning: cannot be disabled once enabled)
+ """
+
+ enabled_database_customization: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="enabledDatabaseCustomization")
+ ] = pydantic.Field(default=None)
+ """
+ Set to true to use a legacy user store
+ """
+
+ import_mode: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enable this if you have a legacy user store and you want to gradually migrate those users to the Auth0 user store
+ """
+
+ custom_scripts: typing_extensions.Annotated[
+ typing.Optional[ConnectionCustomScripts], FieldMetadata(alias="customScripts")
+ ] = None
+ authentication_methods: typing.Optional[ConnectionAuthenticationMethods] = None
+ passkey_options: typing.Optional[ConnectionPasskeyOptions] = None
+ password_policy: typing_extensions.Annotated[
+ typing.Optional[ConnectionPasswordPolicyEnum], FieldMetadata(alias="passwordPolicy")
+ ] = None
+ password_complexity_options: typing.Optional[ConnectionPasswordComplexityOptions] = None
+ password_history: typing.Optional[ConnectionPasswordHistoryOptions] = None
+ password_no_personal_info: typing.Optional[ConnectionPasswordNoPersonalInfoOptions] = None
+ password_dictionary: typing.Optional[ConnectionPasswordDictionaryOptions] = None
+ api_enable_users: typing.Optional[bool] = None
+ basic_profile: typing.Optional[bool] = None
+ ext_admin: typing.Optional[bool] = None
+ ext_is_suspended: typing.Optional[bool] = None
+ ext_agreed_terms: typing.Optional[bool] = None
+ ext_groups: typing.Optional[bool] = None
+ ext_assigned_plans: typing.Optional[bool] = None
+ ext_profile: typing.Optional[bool] = None
+ disable_self_service_change_password: typing.Optional[bool] = None
+ upstream_params: typing.Optional[ConnectionUpstreamParams] = None
+ set_user_root_attributes: typing.Optional[ConnectionSetUserRootAttributesEnum] = None
+ gateway_authentication: typing.Optional[ConnectionGatewayAuthentication] = None
+ federated_connections_access_tokens: typing.Optional[ConnectionFederatedConnectionsAccessTokens] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_connection_profile_response_content.py b/src/auth0/management/types/update_connection_profile_response_content.py
new file mode 100644
index 00000000..4d9a6049
--- /dev/null
+++ b/src/auth0/management/types/update_connection_profile_response_content.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_name_prefix_template import ConnectionNamePrefixTemplate
+from .connection_profile_config import ConnectionProfileConfig
+from .connection_profile_enabled_features import ConnectionProfileEnabledFeatures
+from .connection_profile_id import ConnectionProfileId
+from .connection_profile_name import ConnectionProfileName
+from .connection_profile_organization import ConnectionProfileOrganization
+from .connection_profile_strategy_overrides import ConnectionProfileStrategyOverrides
+
+
+class UpdateConnectionProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[ConnectionProfileId] = None
+ name: typing.Optional[ConnectionProfileName] = None
+ organization: typing.Optional[ConnectionProfileOrganization] = None
+ connection_name_prefix_template: typing.Optional[ConnectionNamePrefixTemplate] = None
+ enabled_features: typing.Optional[ConnectionProfileEnabledFeatures] = None
+ connection_config: typing.Optional[ConnectionProfileConfig] = None
+ strategy_overrides: typing.Optional[ConnectionProfileStrategyOverrides] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_connection_response_content.py b/src/auth0/management/types/update_connection_response_content.py
new file mode 100644
index 00000000..80bce589
--- /dev/null
+++ b/src/auth0/management/types/update_connection_response_content.py
@@ -0,0 +1,66 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_authentication_purpose import ConnectionAuthenticationPurpose
+from .connection_connected_accounts_purpose import ConnectionConnectedAccountsPurpose
+from .connection_options import ConnectionOptions
+from .connections_metadata import ConnectionsMetadata
+
+
+class UpdateConnectionResponseContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="My connection")
+ """
+ The name of the connection
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Connection name used in login screen
+ """
+
+ options: typing.Optional[ConnectionOptions] = None
+ id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ The connection's identifier
+ """
+
+ strategy: typing.Optional[str] = pydantic.Field(default="auth0")
+ """
+ The type of the connection, related to the identity provider
+ """
+
+ realms: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Defines the realms for which the connection will be used (ie: email domains). If the array is empty or the property is not specified, the connection name will be added as realm.
+ """
+
+ enabled_clients: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ DEPRECATED property. Use the GET /connections/:id/clients endpoint to get the ids of the clients for which the connection is enabled
+ """
+
+ is_domain_connection: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ True if the connection is domain level
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Enables showing a button for the connection in the login page (new experience only). If false, it will be usable only by HRD.
+ """
+
+ metadata: typing.Optional[ConnectionsMetadata] = None
+ authentication: typing.Optional[ConnectionAuthenticationPurpose] = None
+ connected_accounts: typing.Optional[ConnectionConnectedAccountsPurpose] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_custom_domain_response_content.py b/src/auth0/management/types/update_custom_domain_response_content.py
new file mode 100644
index 00000000..146455a8
--- /dev/null
+++ b/src/auth0/management/types/update_custom_domain_response_content.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_domain_status_filter_enum import CustomDomainStatusFilterEnum
+from .custom_domain_type_enum import CustomDomainTypeEnum
+from .domain_certificate import DomainCertificate
+from .domain_metadata import DomainMetadata
+from .domain_verification import DomainVerification
+
+
+class UpdateCustomDomainResponseContent(UniversalBaseModel):
+ custom_domain_id: str = pydantic.Field(default="cd_0000000000000001")
+ """
+ ID of the custom domain.
+ """
+
+ domain: str = pydantic.Field(default="login.mycompany.com")
+ """
+ Domain name.
+ """
+
+ primary: bool = pydantic.Field(default=False)
+ """
+ Whether this is a primary domain (true) or not (false).
+ """
+
+ status: CustomDomainStatusFilterEnum
+ type: CustomDomainTypeEnum
+ verification: DomainVerification
+ custom_client_ip_header: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The HTTP header to fetch the client's IP address
+ """
+
+ tls_policy: typing.Optional[str] = pydantic.Field(default="recommended")
+ """
+ The TLS version policy
+ """
+
+ domain_metadata: typing.Optional[DomainMetadata] = None
+ certificate: typing.Optional[DomainCertificate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_directory_provisioning_request_content.py b/src/auth0/management/types/update_directory_provisioning_request_content.py
new file mode 100644
index 00000000..550be664
--- /dev/null
+++ b/src/auth0/management/types/update_directory_provisioning_request_content.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .directory_provisioning_mapping_item import DirectoryProvisioningMappingItem
+
+
+class UpdateDirectoryProvisioningRequestContent(UniversalBaseModel):
+ mapping: typing.Optional[typing.List[DirectoryProvisioningMappingItem]] = pydantic.Field(default=None)
+ """
+ The mapping between Auth0 and IDP user attributes
+ """
+
+ synchronize_automatically: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether periodic automatic synchronization is enabled
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_directory_provisioning_response_content.py b/src/auth0/management/types/update_directory_provisioning_response_content.py
new file mode 100644
index 00000000..a9c3cf3f
--- /dev/null
+++ b/src/auth0/management/types/update_directory_provisioning_response_content.py
@@ -0,0 +1,69 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .directory_provisioning_mapping_item import DirectoryProvisioningMappingItem
+
+
+class UpdateDirectoryProvisioningResponseContent(UniversalBaseModel):
+ connection_id: str = pydantic.Field()
+ """
+ The connection's identifier
+ """
+
+ connection_name: str = pydantic.Field()
+ """
+ The connection's name
+ """
+
+ strategy: str = pydantic.Field()
+ """
+ The connection's strategy
+ """
+
+ mapping: typing.List[DirectoryProvisioningMappingItem] = pydantic.Field()
+ """
+ The mapping between Auth0 and IDP user attributes
+ """
+
+ synchronize_automatically: bool = pydantic.Field()
+ """
+ Whether periodic automatic synchronization is enabled
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ The timestamp at which the directory provisioning configuration was created
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ The timestamp at which the directory provisioning configuration was last updated
+ """
+
+ last_synchronization_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The timestamp at which the connection was last synchronized
+ """
+
+ last_synchronization_status: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The status of the last synchronization
+ """
+
+ last_synchronization_error: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The error message of the last synchronization, if any
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_email_provider_response_content.py b/src/auth0/management/types/update_email_provider_response_content.py
new file mode 100644
index 00000000..da43a194
--- /dev/null
+++ b/src/auth0/management/types/update_email_provider_response_content.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .email_provider_credentials import EmailProviderCredentials
+from .email_provider_settings import EmailProviderSettings
+
+
+class UpdateEmailProviderResponseContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="sendgrid")
+ """
+ Name of the email provider. Can be `mailgun`, `mandrill`, `sendgrid`, `ses`, `sparkpost`, `smtp`, `azure_cs`, `ms365`, or `custom`.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether the provider is enabled (true) or disabled (false).
+ """
+
+ default_from_address: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Email address to use as "from" when no other address specified.
+ """
+
+ credentials: typing.Optional[EmailProviderCredentials] = None
+ settings: typing.Optional[EmailProviderSettings] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_email_template_response_content.py b/src/auth0/management/types/update_email_template_response_content.py
new file mode 100644
index 00000000..f148dab5
--- /dev/null
+++ b/src/auth0/management/types/update_email_template_response_content.py
@@ -0,0 +1,69 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .email_template_name_enum import EmailTemplateNameEnum
+
+
+class UpdateEmailTemplateResponseContent(UniversalBaseModel):
+ template: typing.Optional[EmailTemplateNameEnum] = None
+ body: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Body of the email template.
+ """
+
+ from_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="from")] = pydantic.Field(
+ default="sender@auth0.com"
+ )
+ """
+ Senders `from` email address.
+ """
+
+ result_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="resultUrl")] = pydantic.Field(
+ default=None
+ )
+ """
+ URL to redirect the user to after a successful action.
+ """
+
+ subject: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Subject line of the email.
+ """
+
+ syntax: typing.Optional[str] = pydantic.Field(default="liquid")
+ """
+ Syntax of the template body.
+ """
+
+ url_lifetime_in_seconds: typing_extensions.Annotated[
+ typing.Optional[float], FieldMetadata(alias="urlLifetimeInSeconds")
+ ] = pydantic.Field(default=None)
+ """
+ Lifetime in seconds that the link within the email will be valid for.
+ """
+
+ include_email_in_redirect: typing_extensions.Annotated[
+ typing.Optional[bool], FieldMetadata(alias="includeEmailInRedirect")
+ ] = pydantic.Field(default=None)
+ """
+ Whether the `reset_email` and `verify_email` templates should include the user's email address as the `email` parameter in the returnUrl (true) or whether no email address should be included in the redirect (false). Defaults to true.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether the template is enabled (true) or disabled (false).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_enabled_client_connections_request_content.py b/src/auth0/management/types/update_enabled_client_connections_request_content.py
new file mode 100644
index 00000000..1bbacb2b
--- /dev/null
+++ b/src/auth0/management/types/update_enabled_client_connections_request_content.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .update_enabled_client_connections_request_content_item import UpdateEnabledClientConnectionsRequestContentItem
+
+UpdateEnabledClientConnectionsRequestContent = typing.List[UpdateEnabledClientConnectionsRequestContentItem]
diff --git a/src/auth0/management/types/update_enabled_client_connections_request_content_item.py b/src/auth0/management/types/update_enabled_client_connections_request_content_item.py
new file mode 100644
index 00000000..dbf5398b
--- /dev/null
+++ b/src/auth0/management/types/update_enabled_client_connections_request_content_item.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateEnabledClientConnectionsRequestContentItem(UniversalBaseModel):
+ client_id: str = pydantic.Field()
+ """
+ The client_id of the client to be the subject to change status
+ """
+
+ status: bool = pydantic.Field()
+ """
+ Whether the connection is enabled or not for this client_id
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_event_stream_response_content.py b/src/auth0/management/types/update_event_stream_response_content.py
new file mode 100644
index 00000000..8e36e28d
--- /dev/null
+++ b/src/auth0/management/types/update_event_stream_response_content.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .event_stream_action_response_content import EventStreamActionResponseContent
+from .event_stream_event_bridge_response_content import EventStreamEventBridgeResponseContent
+from .event_stream_webhook_response_content import EventStreamWebhookResponseContent
+
+UpdateEventStreamResponseContent = typing.Union[
+ EventStreamWebhookResponseContent, EventStreamEventBridgeResponseContent, EventStreamActionResponseContent
+]
diff --git a/src/auth0/management/types/update_flow_response_content.py b/src/auth0/management/types/update_flow_response_content.py
new file mode 100644
index 00000000..28829865
--- /dev/null
+++ b/src/auth0/management/types/update_flow_response_content.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
+
+
+class UpdateFlowResponseContent(UniversalBaseModel):
+ id: str
+ name: str
+ actions: typing.Optional[typing.List["FlowAction"]] = None
+ created_at: dt.datetime
+ updated_at: dt.datetime
+ executed_at: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
+
+
+from .flow_action import FlowAction # noqa: E402, I001
+from .flow_action_flow import FlowActionFlow # noqa: E402, I001
+from .flow_action_flow_boolean_condition import FlowActionFlowBooleanCondition # noqa: E402, I001
+from .flow_action_flow_boolean_condition_params import FlowActionFlowBooleanConditionParams # noqa: E402, I001
+
+update_forward_refs(
+ UpdateFlowResponseContent,
+ FlowAction=FlowAction,
+ FlowActionFlow=FlowActionFlow,
+ FlowActionFlowBooleanCondition=FlowActionFlowBooleanCondition,
+ FlowActionFlowBooleanConditionParams=FlowActionFlowBooleanConditionParams,
+)
diff --git a/src/auth0/management/types/update_flows_vault_connection_response_content.py b/src/auth0/management/types/update_flows_vault_connection_response_content.py
new file mode 100644
index 00000000..a0b6f277
--- /dev/null
+++ b/src/auth0/management/types/update_flows_vault_connection_response_content.py
@@ -0,0 +1,65 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateFlowsVaultConnectionResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Flows Vault Connection identifier.
+ """
+
+ app_id: str = pydantic.Field()
+ """
+ Flows Vault Connection app identifier.
+ """
+
+ environment: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Flows Vault Connection environment.
+ """
+
+ name: str = pydantic.Field()
+ """
+ Flows Vault Connection name.
+ """
+
+ account_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Flows Vault Connection custom account name.
+ """
+
+ ready: bool = pydantic.Field()
+ """
+ Whether the Flows Vault Connection is configured.
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was created.
+ """
+
+ updated_at: dt.datetime = pydantic.Field()
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was updated.
+ """
+
+ refreshed_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The ISO 8601 formatted date when this Flows Vault Connection was refreshed.
+ """
+
+ fingerprint: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_flows_vault_connection_setup.py b/src/auth0/management/types/update_flows_vault_connection_setup.py
new file mode 100644
index 00000000..c64e0bd6
--- /dev/null
+++ b/src/auth0/management/types/update_flows_vault_connection_setup.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .flows_vault_connectio_setup_api_key import FlowsVaultConnectioSetupApiKey
+from .flows_vault_connectio_setup_api_key_with_base_url import FlowsVaultConnectioSetupApiKeyWithBaseUrl
+from .flows_vault_connectio_setup_bigquery_oauth_jwt import FlowsVaultConnectioSetupBigqueryOauthJwt
+from .flows_vault_connectio_setup_http_bearer import FlowsVaultConnectioSetupHttpBearer
+from .flows_vault_connectio_setup_jwt import FlowsVaultConnectioSetupJwt
+from .flows_vault_connectio_setup_mailjet_api_key import FlowsVaultConnectioSetupMailjetApiKey
+from .flows_vault_connectio_setup_oauth_app import FlowsVaultConnectioSetupOauthApp
+from .flows_vault_connectio_setup_oauth_code import FlowsVaultConnectioSetupOauthCode
+from .flows_vault_connectio_setup_secret_api_key import FlowsVaultConnectioSetupSecretApiKey
+from .flows_vault_connectio_setup_stripe_key_pair import FlowsVaultConnectioSetupStripeKeyPair
+from .flows_vault_connectio_setup_token import FlowsVaultConnectioSetupToken
+from .flows_vault_connectio_setup_twilio_api_key import FlowsVaultConnectioSetupTwilioApiKey
+from .flows_vault_connectio_setup_webhook import FlowsVaultConnectioSetupWebhook
+
+UpdateFlowsVaultConnectionSetup = typing.Union[
+ FlowsVaultConnectioSetupApiKeyWithBaseUrl,
+ FlowsVaultConnectioSetupApiKey,
+ FlowsVaultConnectioSetupOauthApp,
+ FlowsVaultConnectioSetupBigqueryOauthJwt,
+ FlowsVaultConnectioSetupSecretApiKey,
+ FlowsVaultConnectioSetupHttpBearer,
+ FlowsVaultConnectioSetupJwt,
+ FlowsVaultConnectioSetupMailjetApiKey,
+ FlowsVaultConnectioSetupToken,
+ FlowsVaultConnectioSetupWebhook,
+ FlowsVaultConnectioSetupStripeKeyPair,
+ FlowsVaultConnectioSetupOauthCode,
+ FlowsVaultConnectioSetupTwilioApiKey,
+]
diff --git a/src/auth0/management/types/update_form_response_content.py b/src/auth0/management/types/update_form_response_content.py
new file mode 100644
index 00000000..bd93da87
--- /dev/null
+++ b/src/auth0/management/types/update_form_response_content.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .form_ending_node import FormEndingNode
+from .form_languages import FormLanguages
+from .form_messages import FormMessages
+from .form_node_list import FormNodeList
+from .form_start_node import FormStartNode
+from .form_style import FormStyle
+from .form_translations import FormTranslations
+
+
+class UpdateFormResponseContent(UniversalBaseModel):
+ id: str
+ name: str
+ messages: typing.Optional[FormMessages] = None
+ languages: typing.Optional[FormLanguages] = None
+ translations: typing.Optional[FormTranslations] = None
+ nodes: typing.Optional[FormNodeList] = None
+ start: typing.Optional[FormStartNode] = None
+ ending: typing.Optional[FormEndingNode] = None
+ style: typing.Optional[FormStyle] = None
+ created_at: dt.datetime
+ updated_at: dt.datetime
+ embedded_at: typing.Optional[str] = None
+ submitted_at: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_guardian_factor_duo_settings_response_content.py b/src/auth0/management/types/update_guardian_factor_duo_settings_response_content.py
new file mode 100644
index 00000000..38d6b495
--- /dev/null
+++ b/src/auth0/management/types/update_guardian_factor_duo_settings_response_content.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateGuardianFactorDuoSettingsResponseContent(UniversalBaseModel):
+ ikey: typing.Optional[str] = None
+ skey: typing.Optional[str] = None
+ host: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_guardian_factors_provider_push_notification_sns_response_content.py b/src/auth0/management/types/update_guardian_factors_provider_push_notification_sns_response_content.py
new file mode 100644
index 00000000..dc0be9f8
--- /dev/null
+++ b/src/auth0/management/types/update_guardian_factors_provider_push_notification_sns_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateGuardianFactorsProviderPushNotificationSnsResponseContent(UniversalBaseModel):
+ aws_access_key_id: typing.Optional[str] = "wywA2BH4VqTpfywiDuyDAYZL3xQjoO40"
+ aws_secret_access_key: typing.Optional[str] = "B1ER5JHDGJL3C4sVAKK7SBsq806R3IpL"
+ aws_region: typing.Optional[str] = "us-west-1"
+ sns_apns_platform_application_arn: typing.Optional[str] = None
+ sns_gcm_platform_application_arn: typing.Optional[str] = "urn://yRMeBxgcCXh8MeTXPBAxhQnm6gP6f5nP"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_hook_response_content.py b/src/auth0/management/types/update_hook_response_content.py
new file mode 100644
index 00000000..1d513563
--- /dev/null
+++ b/src/auth0/management/types/update_hook_response_content.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .hook_dependencies import HookDependencies
+
+
+class UpdateHookResponseContent(UniversalBaseModel):
+ trigger_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="triggerId")] = pydantic.Field(
+ default=None
+ )
+ """
+ Trigger ID
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="00001")
+ """
+ ID of this hook.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="hook")
+ """
+ Name of this hook.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether this hook will be executed (true) or ignored (false).
+ """
+
+ script: typing.Optional[str] = pydantic.Field(
+ default="module.exports = function(client, scope, audience, context, cb) cb(null, access_token); };"
+ )
+ """
+ Code to be executed when this hook runs.
+ """
+
+ dependencies: typing.Optional[HookDependencies] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_hook_secret_request_content.py b/src/auth0/management/types/update_hook_secret_request_content.py
new file mode 100644
index 00000000..f0f2d9e7
--- /dev/null
+++ b/src/auth0/management/types/update_hook_secret_request_content.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UpdateHookSecretRequestContent = typing.Dict[str, str]
diff --git a/src/auth0/management/types/update_log_stream_response_content.py b/src/auth0/management/types/update_log_stream_response_content.py
new file mode 100644
index 00000000..b1c03cca
--- /dev/null
+++ b/src/auth0/management/types/update_log_stream_response_content.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .log_stream_datadog_response_schema import LogStreamDatadogResponseSchema
+from .log_stream_event_bridge_response_schema import LogStreamEventBridgeResponseSchema
+from .log_stream_event_grid_response_schema import LogStreamEventGridResponseSchema
+from .log_stream_http_response_schema import LogStreamHttpResponseSchema
+from .log_stream_mixpanel_response_schema import LogStreamMixpanelResponseSchema
+from .log_stream_segment_response_schema import LogStreamSegmentResponseSchema
+from .log_stream_splunk_response_schema import LogStreamSplunkResponseSchema
+from .log_stream_sumo_response_schema import LogStreamSumoResponseSchema
+
+UpdateLogStreamResponseContent = typing.Union[
+ LogStreamHttpResponseSchema,
+ LogStreamEventBridgeResponseSchema,
+ LogStreamEventGridResponseSchema,
+ LogStreamDatadogResponseSchema,
+ LogStreamSplunkResponseSchema,
+ LogStreamSumoResponseSchema,
+ LogStreamSegmentResponseSchema,
+ LogStreamMixpanelResponseSchema,
+]
diff --git a/src/auth0/management/types/update_network_acl_response_content.py b/src/auth0/management/types/update_network_acl_response_content.py
new file mode 100644
index 00000000..7c55ecd1
--- /dev/null
+++ b/src/auth0/management/types/update_network_acl_response_content.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .network_acl_rule import NetworkAclRule
+
+
+class UpdateNetworkAclResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = None
+ description: typing.Optional[str] = None
+ active: typing.Optional[bool] = None
+ priority: typing.Optional[float] = None
+ rule: typing.Optional[NetworkAclRule] = None
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The timestamp when the Network ACL Configuration was created
+ """
+
+ updated_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The timestamp when the Network ACL Configuration was last updated
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_organization_connection_response_content.py b/src/auth0/management/types/update_organization_connection_response_content.py
new file mode 100644
index 00000000..f20a09e8
--- /dev/null
+++ b/src/auth0/management/types/update_organization_connection_response_content.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_connection_information import OrganizationConnectionInformation
+
+
+class UpdateOrganizationConnectionResponseContent(UniversalBaseModel):
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the connection.
+ """
+
+ assign_membership_on_login: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ When true, all users that log in with this connection will be automatically granted membership in the organization. When false, users must be granted membership in the organization before logging in with this connection.
+ """
+
+ show_as_button: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether a connection should be displayed on this organization’s login prompt. Only applicable for enterprise connections. Default: true.
+ """
+
+ is_signup_enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines whether organization signup should be enabled for this organization connection. Only applicable for database connections. Default: false.
+ """
+
+ connection: typing.Optional[OrganizationConnectionInformation] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_organization_discovery_domain_response_content.py b/src/auth0/management/types/update_organization_discovery_domain_response_content.py
new file mode 100644
index 00000000..1a33c939
--- /dev/null
+++ b/src/auth0/management/types/update_organization_discovery_domain_response_content.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_discovery_domain_status import OrganizationDiscoveryDomainStatus
+
+
+class UpdateOrganizationDiscoveryDomainResponseContent(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ Organization discovery domain identifier.
+ """
+
+ domain: str = pydantic.Field()
+ """
+ The domain name to associate with the organization e.g. acme.com.
+ """
+
+ status: OrganizationDiscoveryDomainStatus
+ verification_txt: str = pydantic.Field()
+ """
+ A unique token generated for the discovery domain. This must be placed in a DNS TXT record at the location specified by the verification_host field to prove domain ownership.
+ """
+
+ verification_host: str = pydantic.Field()
+ """
+ The full domain where the TXT record should be added.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_organization_response_content.py b/src/auth0/management/types/update_organization_response_content.py
new file mode 100644
index 00000000..dc3b1b02
--- /dev/null
+++ b/src/auth0/management/types/update_organization_response_content.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .organization_branding import OrganizationBranding
+from .organization_metadata import OrganizationMetadata
+from .token_quota import TokenQuota
+
+
+class UpdateOrganizationResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Organization identifier.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default="organization-1")
+ """
+ The name of this organization.
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default="Acme Users")
+ """
+ Friendly name of this organization.
+ """
+
+ branding: typing.Optional[OrganizationBranding] = None
+ metadata: typing.Optional[OrganizationMetadata] = None
+ token_quota: typing.Optional[TokenQuota] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_phone_template_response_content.py b/src/auth0/management/types/update_phone_template_response_content.py
new file mode 100644
index 00000000..c04d7e87
--- /dev/null
+++ b/src/auth0/management/types/update_phone_template_response_content.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .phone_template_content import PhoneTemplateContent
+from .phone_template_notification_type_enum import PhoneTemplateNotificationTypeEnum
+
+
+class UpdatePhoneTemplateResponseContent(UniversalBaseModel):
+ id: str
+ channel: typing.Optional[str] = None
+ customizable: typing.Optional[bool] = None
+ tenant: typing.Optional[str] = None
+ content: PhoneTemplateContent
+ type: PhoneTemplateNotificationTypeEnum
+ disabled: bool = pydantic.Field(default=False)
+ """
+ Whether the template is enabled (false) or disabled (true).
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_resource_server_response_content.py b/src/auth0/management/types/update_resource_server_response_content.py
new file mode 100644
index 00000000..4b7a65d3
--- /dev/null
+++ b/src/auth0/management/types/update_resource_server_response_content.py
@@ -0,0 +1,91 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .resource_server_consent_policy_enum import ResourceServerConsentPolicyEnum
+from .resource_server_proof_of_possession import ResourceServerProofOfPossession
+from .resource_server_scope import ResourceServerScope
+from .resource_server_subject_type_authorization import ResourceServerSubjectTypeAuthorization
+from .resource_server_token_dialect_response_enum import ResourceServerTokenDialectResponseEnum
+from .resource_server_token_encryption import ResourceServerTokenEncryption
+from .signing_algorithm_enum import SigningAlgorithmEnum
+
+
+class UpdateResourceServerResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the API (resource server).
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Friendly name for this resource server. Can not contain `<` or `>` characters.
+ """
+
+ is_system: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this is an Auth0 system API (true) or a custom API (false).
+ """
+
+ identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique identifier for the API used as the audience parameter on authorization calls. Can not be changed once set.
+ """
+
+ scopes: typing.Optional[typing.List[ResourceServerScope]] = pydantic.Field(default=None)
+ """
+ List of permissions (scopes) that this API uses.
+ """
+
+ signing_alg: typing.Optional[SigningAlgorithmEnum] = None
+ signing_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Secret used to sign tokens when using symmetric algorithms (HS256).
+ """
+
+ allow_offline_access: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether refresh tokens can be issued for this API (true) or not (false).
+ """
+
+ skip_consent_for_verifiable_first_party_clients: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether to skip user consent for applications flagged as first party (true) or not (false).
+ """
+
+ token_lifetime: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Expiration value (in seconds) for access tokens issued for this API from the token endpoint.
+ """
+
+ token_lifetime_for_web: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Expiration value (in seconds) for access tokens issued for this API via Implicit or Hybrid Flows. Cannot be greater than the `token_lifetime` value.
+ """
+
+ enforce_policies: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether authorization polices are enforced (true) or unenforced (false).
+ """
+
+ token_dialect: typing.Optional[ResourceServerTokenDialectResponseEnum] = None
+ token_encryption: typing.Optional[ResourceServerTokenEncryption] = None
+ consent_policy: typing.Optional[ResourceServerConsentPolicyEnum] = None
+ authorization_details: typing.Optional[typing.List[typing.Any]] = None
+ proof_of_possession: typing.Optional[ResourceServerProofOfPossession] = None
+ subject_type_authorization: typing.Optional[ResourceServerSubjectTypeAuthorization] = None
+ client_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The client ID of the client that this resource server is linked to
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_risk_assessments_settings_new_device_response_content.py b/src/auth0/management/types/update_risk_assessments_settings_new_device_response_content.py
new file mode 100644
index 00000000..915b0c0c
--- /dev/null
+++ b/src/auth0/management/types/update_risk_assessments_settings_new_device_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateRiskAssessmentsSettingsNewDeviceResponseContent(UniversalBaseModel):
+ remember_for: int = pydantic.Field()
+ """
+ Length of time to remember devices for, in days.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_risk_assessments_settings_response_content.py b/src/auth0/management/types/update_risk_assessments_settings_response_content.py
new file mode 100644
index 00000000..5f68ff97
--- /dev/null
+++ b/src/auth0/management/types/update_risk_assessments_settings_response_content.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateRiskAssessmentsSettingsResponseContent(UniversalBaseModel):
+ enabled: bool = pydantic.Field()
+ """
+ Whether or not risk assessment is enabled.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_role_response_content.py b/src/auth0/management/types/update_role_response_content.py
new file mode 100644
index 00000000..98e8b30c
--- /dev/null
+++ b/src/auth0/management/types/update_role_response_content.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateRoleResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID for this role.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of this role.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Description of this role.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_rule_response_content.py b/src/auth0/management/types/update_rule_response_content.py
new file mode 100644
index 00000000..6c2da1fc
--- /dev/null
+++ b/src/auth0/management/types/update_rule_response_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateRuleResponseContent(UniversalBaseModel):
+ name: typing.Optional[str] = pydantic.Field(default="rule_1")
+ """
+ Name of this rule.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default="con_0000000000000001")
+ """
+ ID of this rule.
+ """
+
+ enabled: typing.Optional[bool] = pydantic.Field(default=True)
+ """
+ Whether the rule is enabled (true), or disabled (false).
+ """
+
+ script: typing.Optional[str] = pydantic.Field(
+ default="function (user, context, callback) {\n callback(null, user, context);\n}"
+ )
+ """
+ Code to be executed when this rule runs.
+ """
+
+ order: typing.Optional[float] = pydantic.Field(default=1.0)
+ """
+ Order that this rule should execute in relative to other rules. Lower-valued rules execute first.
+ """
+
+ stage: typing.Optional[str] = pydantic.Field(default="login_success")
+ """
+ Execution stage of this rule. Can be `login_success`, `login_failure`, or `pre_authorize`.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_scim_configuration_response_content.py b/src/auth0/management/types/update_scim_configuration_response_content.py
new file mode 100644
index 00000000..326d1e60
--- /dev/null
+++ b/src/auth0/management/types/update_scim_configuration_response_content.py
@@ -0,0 +1,58 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .scim_mapping_item import ScimMappingItem
+
+
+class UpdateScimConfigurationResponseContent(UniversalBaseModel):
+ connection_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The connection's identifier
+ """
+
+ connection_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The connection's identifier
+ """
+
+ strategy: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The connection's strategy
+ """
+
+ tenant_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The tenant's name
+ """
+
+ user_id_attribute: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ User ID attribute for generating unique user ids
+ """
+
+ mapping: typing.Optional[typing.List[ScimMappingItem]] = pydantic.Field(default=None)
+ """
+ The mapping between auth0 and SCIM
+ """
+
+ created_at: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The Date Time Scim Configuration was created
+ """
+
+ updated_on: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The Date Time Scim Configuration was last updated
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_self_service_profile_response_content.py b/src/auth0/management/types/update_self_service_profile_response_content.py
new file mode 100644
index 00000000..0169db4e
--- /dev/null
+++ b/src/auth0/management/types/update_self_service_profile_response_content.py
@@ -0,0 +1,64 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .self_service_profile_allowed_strategy_enum import SelfServiceProfileAllowedStrategyEnum
+from .self_service_profile_branding_properties import SelfServiceProfileBrandingProperties
+from .self_service_profile_user_attribute import SelfServiceProfileUserAttribute
+
+
+class UpdateSelfServiceProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="ssp_n7SNCL8seoyV1TuSTCnAeo")
+ """
+ The unique ID of the self-service Profile.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the self-service Profile.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The description of the self-service Profile.
+ """
+
+ user_attributes: typing.Optional[typing.List[SelfServiceProfileUserAttribute]] = pydantic.Field(default=None)
+ """
+ List of attributes to be mapped that will be shown to the user during the SS-SSO flow.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this self-service Profile was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The time when this self-service Profile was updated.
+ """
+
+ branding: typing.Optional[SelfServiceProfileBrandingProperties] = None
+ allowed_strategies: typing.Optional[typing.List[SelfServiceProfileAllowedStrategyEnum]] = pydantic.Field(
+ default=None
+ )
+ """
+ List of IdP strategies that will be shown to users during the Self-Service SSO flow. Possible values: [`oidc`, `samlp`, `waad`, `google-apps`, `adfs`, `okta`, `keycloak-samlp`, `pingfederate`]
+ """
+
+ user_attribute_profile_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the user-attribute-profile to associate with this self-service profile.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_session_response_content.py b/src/auth0/management/types/update_session_response_content.py
new file mode 100644
index 00000000..5e160a67
--- /dev/null
+++ b/src/auth0/management/types/update_session_response_content.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .session_authentication_signals import SessionAuthenticationSignals
+from .session_client_metadata import SessionClientMetadata
+from .session_cookie_metadata import SessionCookieMetadata
+from .session_date import SessionDate
+from .session_device_metadata import SessionDeviceMetadata
+from .session_metadata import SessionMetadata
+
+
+class UpdateSessionResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the session
+ """
+
+ user_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the user which can be used when interacting with other APIs.
+ """
+
+ created_at: typing.Optional[SessionDate] = None
+ updated_at: typing.Optional[SessionDate] = None
+ authenticated_at: typing.Optional[SessionDate] = None
+ idle_expires_at: typing.Optional[SessionDate] = None
+ expires_at: typing.Optional[SessionDate] = None
+ last_interacted_at: typing.Optional[SessionDate] = None
+ device: typing.Optional[SessionDeviceMetadata] = None
+ clients: typing.Optional[typing.List[SessionClientMetadata]] = pydantic.Field(default=None)
+ """
+ List of client details for the session
+ """
+
+ authentication: typing.Optional[SessionAuthenticationSignals] = None
+ cookie: typing.Optional[SessionCookieMetadata] = None
+ session_metadata: typing.Optional[SessionMetadata] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_settings_response_content.py b/src/auth0/management/types/update_settings_response_content.py
new file mode 100644
index 00000000..a314f1a2
--- /dev/null
+++ b/src/auth0/management/types/update_settings_response_content.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .universal_login_experience_enum import UniversalLoginExperienceEnum
+
+
+class UpdateSettingsResponseContent(UniversalBaseModel):
+ universal_login_experience: typing.Optional[UniversalLoginExperienceEnum] = None
+ identifier_first: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether identifier first is enabled or not
+ """
+
+ webauthn_platform_first_factor: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Use WebAuthn with Device Biometrics as the first authentication factor
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_suspicious_ip_throttling_settings_response_content.py b/src/auth0/management/types/update_suspicious_ip_throttling_settings_response_content.py
new file mode 100644
index 00000000..c3c961ec
--- /dev/null
+++ b/src/auth0/management/types/update_suspicious_ip_throttling_settings_response_content.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .suspicious_ip_throttling_allowlist import SuspiciousIpThrottlingAllowlist
+from .suspicious_ip_throttling_shields_enum import SuspiciousIpThrottlingShieldsEnum
+from .suspicious_ip_throttling_stage import SuspiciousIpThrottlingStage
+
+
+class UpdateSuspiciousIpThrottlingSettingsResponseContent(UniversalBaseModel):
+ enabled: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether or not suspicious IP throttling attack protections are active.
+ """
+
+ shields: typing.Optional[typing.List[SuspiciousIpThrottlingShieldsEnum]] = pydantic.Field(default=None)
+ """
+ Action to take when a suspicious IP throttling threshold is violated.
+ Possible values: block, admin_notification.
+ """
+
+ allowlist: typing.Optional[SuspiciousIpThrottlingAllowlist] = None
+ stage: typing.Optional[SuspiciousIpThrottlingStage] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_tenant_settings_response_content.py b/src/auth0/management/types/update_tenant_settings_response_content.py
new file mode 100644
index 00000000..3b07a1f0
--- /dev/null
+++ b/src/auth0/management/types/update_tenant_settings_response_content.py
@@ -0,0 +1,153 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .default_token_quota import DefaultTokenQuota
+from .session_cookie_schema import SessionCookieSchema
+from .supported_locales import SupportedLocales
+from .tenant_oidc_logout_settings import TenantOidcLogoutSettings
+from .tenant_settings_device_flow import TenantSettingsDeviceFlow
+from .tenant_settings_error_page import TenantSettingsErrorPage
+from .tenant_settings_flags import TenantSettingsFlags
+from .tenant_settings_guardian_page import TenantSettingsGuardianPage
+from .tenant_settings_mtls import TenantSettingsMtls
+from .tenant_settings_password_page import TenantSettingsPasswordPage
+from .tenant_settings_resource_parameter_profile import TenantSettingsResourceParameterProfile
+from .tenant_settings_sessions import TenantSettingsSessions
+
+
+class UpdateTenantSettingsResponseContent(UniversalBaseModel):
+ change_password: typing.Optional[TenantSettingsPasswordPage] = None
+ guardian_mfa_page: typing.Optional[TenantSettingsGuardianPage] = None
+ default_audience: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Default audience for API authorization.
+ """
+
+ default_directory: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Name of connection used for password grants at the `/token`endpoint. The following connection types are supported: LDAP, AD, Database Connections, Passwordless, Windows Azure Active Directory, ADFS.
+ """
+
+ error_page: typing.Optional[TenantSettingsErrorPage] = None
+ device_flow: typing.Optional[TenantSettingsDeviceFlow] = None
+ default_token_quota: typing.Optional[DefaultTokenQuota] = None
+ flags: typing.Optional[TenantSettingsFlags] = None
+ friendly_name: typing.Optional[str] = pydantic.Field(default="My Company")
+ """
+ Friendly name for this tenant.
+ """
+
+ picture_url: typing.Optional[str] = pydantic.Field(default="https://mycompany.org/logo.png")
+ """
+ URL of logo to be shown for this tenant (recommended size: 150x150)
+ """
+
+ support_email: typing.Optional[str] = pydantic.Field(default="support@mycompany.org")
+ """
+ End-user support email address.
+ """
+
+ support_url: typing.Optional[str] = pydantic.Field(default="https://mycompany.org/support")
+ """
+ End-user support URL.
+ """
+
+ allowed_logout_urls: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ URLs that are valid to redirect to after logout from Auth0.
+ """
+
+ session_lifetime: typing.Optional[float] = pydantic.Field(default=168.0)
+ """
+ Number of hours a session will stay valid.
+ """
+
+ idle_session_lifetime: typing.Optional[float] = pydantic.Field(default=72.0)
+ """
+ Number of hours for which a session can be inactive before the user must log in again.
+ """
+
+ ephemeral_session_lifetime: typing.Optional[float] = pydantic.Field(default=72.0)
+ """
+ Number of hours an ephemeral (non-persistent) session will stay valid.
+ """
+
+ idle_ephemeral_session_lifetime: typing.Optional[float] = pydantic.Field(default=24.0)
+ """
+ Number of hours for which an ephemeral (non-persistent) session can be inactive before the user must log in again.
+ """
+
+ sandbox_version: typing.Optional[str] = pydantic.Field(default="22")
+ """
+ Selected sandbox version for the extensibility environment.
+ """
+
+ legacy_sandbox_version: typing.Optional[str] = pydantic.Field(default="")
+ """
+ Selected sandbox version for rules and hooks extensibility.
+ """
+
+ sandbox_versions_available: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Available sandbox versions for the extensibility environment.
+ """
+
+ default_redirection_uri: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The default absolute redirection uri, must be https
+ """
+
+ enabled_locales: typing.Optional[typing.List[SupportedLocales]] = pydantic.Field(default=None)
+ """
+ Supported locales for the user interface.
+ """
+
+ session_cookie: typing.Optional[SessionCookieSchema] = None
+ sessions: typing.Optional[TenantSettingsSessions] = None
+ oidc_logout: typing.Optional[TenantOidcLogoutSettings] = None
+ allow_organization_name_in_authentication_api: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether to accept an organization name instead of an ID on auth endpoints
+ """
+
+ customize_mfa_in_postlogin_action: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether to enable flexible factors for MFA in the PostLogin action
+ """
+
+ acr_values_supported: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Supported ACR values
+ """
+
+ mtls: typing.Optional[TenantSettingsMtls] = None
+ pushed_authorization_requests_supported: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Enables the use of Pushed Authorization Requests
+ """
+
+ authorization_response_iss_parameter_supported: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Supports iss parameter in authorization responses
+ """
+
+ skip_non_verifiable_callback_uri_confirmation_prompt: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Controls whether a confirmation prompt is shown during login flows when the redirect URI uses non-verifiable callback URIs (for example, a custom URI schema such as `myapp://`, or `localhost`).
+ If set to true, a confirmation prompt will not be shown. We recommend that this is set to false for improved protection from malicious apps.
+ See https://auth0.com/docs/secure/security-guidance/measures-against-app-impersonation for more information.
+ """
+
+ resource_parameter_profile: typing.Optional[TenantSettingsResourceParameterProfile] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_token_quota.py b/src/auth0/management/types/update_token_quota.py
new file mode 100644
index 00000000..5fdedbf6
--- /dev/null
+++ b/src/auth0/management/types/update_token_quota.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .token_quota_client_credentials import TokenQuotaClientCredentials
+
+
+class UpdateTokenQuota(UniversalBaseModel):
+ client_credentials: TokenQuotaClientCredentials
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_universal_login_template_request_content.py b/src/auth0/management/types/update_universal_login_template_request_content.py
new file mode 100644
index 00000000..d9555f3d
--- /dev/null
+++ b/src/auth0/management/types/update_universal_login_template_request_content.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .update_universal_login_template_request_content_template import UpdateUniversalLoginTemplateRequestContentTemplate
+
+UpdateUniversalLoginTemplateRequestContent = typing.Union[str, UpdateUniversalLoginTemplateRequestContentTemplate]
diff --git a/src/auth0/management/types/update_universal_login_template_request_content_template.py b/src/auth0/management/types/update_universal_login_template_request_content_template.py
new file mode 100644
index 00000000..3b739b24
--- /dev/null
+++ b/src/auth0/management/types/update_universal_login_template_request_content_template.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UpdateUniversalLoginTemplateRequestContentTemplate(UniversalBaseModel):
+ template: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_user_attribute_profile_response_content.py b/src/auth0/management/types/update_user_attribute_profile_response_content.py
new file mode 100644
index 00000000..13ed794b
--- /dev/null
+++ b/src/auth0/management/types/update_user_attribute_profile_response_content.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_id import UserAttributeProfileId
+from .user_attribute_profile_name import UserAttributeProfileName
+from .user_attribute_profile_user_attributes import UserAttributeProfileUserAttributes
+from .user_attribute_profile_user_id import UserAttributeProfileUserId
+
+
+class UpdateUserAttributeProfileResponseContent(UniversalBaseModel):
+ id: typing.Optional[UserAttributeProfileId] = None
+ name: typing.Optional[UserAttributeProfileName] = None
+ user_id: typing.Optional[UserAttributeProfileUserId] = None
+ user_attributes: typing.Optional[UserAttributeProfileUserAttributes] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_user_authentication_method_response_content.py b/src/auth0/management/types/update_user_authentication_method_response_content.py
new file mode 100644
index 00000000..95e8a57a
--- /dev/null
+++ b/src/auth0/management/types/update_user_authentication_method_response_content.py
@@ -0,0 +1,78 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .created_authentication_method_type_enum import CreatedAuthenticationMethodTypeEnum
+from .preferred_authentication_method_enum import PreferredAuthenticationMethodEnum
+from .user_authentication_method_properties import UserAuthenticationMethodProperties
+
+
+class UpdateUserAuthenticationMethodResponseContent(UniversalBaseModel):
+ """
+ The successfully created authentication method.
+ """
+
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of the newly created authentication method (automatically generated by the application)
+ """
+
+ type: CreatedAuthenticationMethodTypeEnum
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ A human-readable label to identify the authentication method.
+ """
+
+ totp_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Base32 encoded secret for TOTP generation
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to email authentication methods only. The email address used to send verification messages.
+ """
+
+ authentication_methods: typing.Optional[typing.List[UserAuthenticationMethodProperties]] = None
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = None
+ key_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authentication methods only. The id of the credential.
+ """
+
+ public_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authentication methods only. The public key.
+ """
+
+ aaguid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkey authentication methods only. Authenticator Attestation Globally Unique Identifier.
+ """
+
+ relying_party_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authentication methods only. The relying party identifier.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Authentication method creation date
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_user_response_content.py b/src/auth0/management/types/update_user_response_content.py
new file mode 100644
index 00000000..ac814b4d
--- /dev/null
+++ b/src/auth0/management/types/update_user_response_content.py
@@ -0,0 +1,106 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_app_metadata_schema import UserAppMetadataSchema
+from .user_date_schema import UserDateSchema
+from .user_identity_schema import UserIdentitySchema
+from .user_metadata_schema import UserMetadataSchema
+
+
+class UpdateUserResponseContent(UniversalBaseModel):
+ user_id: typing.Optional[str] = pydantic.Field(default="auth0|507f1f77bcf86cd799439020")
+ """
+ ID of the user which can be used when interacting with other APIs.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default="john.doe@gmail.com")
+ """
+ Email address of this user.
+ """
+
+ email_verified: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this email address is verified (true) or unverified (false).
+ """
+
+ username: typing.Optional[str] = pydantic.Field(default="johndoe")
+ """
+ Username of this user.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default="+199999999999999")
+ """
+ Phone number for this user. Follows the E.164 recommendation.
+ """
+
+ phone_verified: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this phone number has been verified (true) or not (false).
+ """
+
+ created_at: typing.Optional[UserDateSchema] = None
+ updated_at: typing.Optional[UserDateSchema] = None
+ identities: typing.Optional[typing.List[UserIdentitySchema]] = pydantic.Field(default=None)
+ """
+ Array of user identity objects when accounts are linked.
+ """
+
+ app_metadata: typing.Optional[UserAppMetadataSchema] = None
+ user_metadata: typing.Optional[UserMetadataSchema] = None
+ picture: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL to picture, photo, or avatar of this user.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of this user.
+ """
+
+ nickname: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Preferred nickname or alias of this user.
+ """
+
+ multifactor: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of multi-factor authentication providers with which this user has enrolled.
+ """
+
+ last_ip: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Last IP address from which this user logged in.
+ """
+
+ last_login: typing.Optional[UserDateSchema] = None
+ logins_count: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Total number of logins this user has performed.
+ """
+
+ blocked: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this user was blocked by an administrator (true) or is not (false).
+ """
+
+ given_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Given name/first name/forename of this user.
+ """
+
+ family_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Family name/last name/surname of this user.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/update_verifiable_credential_template_response_content.py b/src/auth0/management/types/update_verifiable_credential_template_response_content.py
new file mode 100644
index 00000000..ad9e14b1
--- /dev/null
+++ b/src/auth0/management/types/update_verifiable_credential_template_response_content.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .mdl_presentation_request import MdlPresentationRequest
+
+
+class UpdateVerifiableCredentialTemplateResponseContent(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="vct_0000000000000001")
+ """
+ The id of the template.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the template.
+ """
+
+ type: typing.Optional[str] = pydantic.Field(default="mdl")
+ """
+ The type of the template.
+ """
+
+ dialect: typing.Optional[str] = pydantic.Field(default="simplified/1.0")
+ """
+ The dialect of the template.
+ """
+
+ presentation: typing.Optional[MdlPresentationRequest] = None
+ custom_certificate_authority: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The custom certificate authority.
+ """
+
+ well_known_trusted_issuers: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The well-known trusted issuers, comma separated.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time the template was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time the template was created.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_app_metadata_schema.py b/src/auth0/management/types/user_app_metadata_schema.py
new file mode 100644
index 00000000..71f968d2
--- /dev/null
+++ b/src/auth0/management/types/user_app_metadata_schema.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserAppMetadataSchema = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/user_attribute_profile.py b/src/auth0/management/types/user_attribute_profile.py
new file mode 100644
index 00000000..9e8079e4
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_id import UserAttributeProfileId
+from .user_attribute_profile_name import UserAttributeProfileName
+from .user_attribute_profile_user_attributes import UserAttributeProfileUserAttributes
+from .user_attribute_profile_user_id import UserAttributeProfileUserId
+
+
+class UserAttributeProfile(UniversalBaseModel):
+ id: typing.Optional[UserAttributeProfileId] = None
+ name: typing.Optional[UserAttributeProfileName] = None
+ user_id: typing.Optional[UserAttributeProfileUserId] = None
+ user_attributes: typing.Optional[UserAttributeProfileUserAttributes] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_id.py b/src/auth0/management/types/user_attribute_profile_id.py
new file mode 100644
index 00000000..af00990f
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_id.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+UserAttributeProfileId = str
diff --git a/src/auth0/management/types/user_attribute_profile_name.py b/src/auth0/management/types/user_attribute_profile_name.py
new file mode 100644
index 00000000..9fa4a228
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_name.py
@@ -0,0 +1,3 @@
+# This file was auto-generated by Fern from our API Definition.
+
+UserAttributeProfileName = str
diff --git a/src/auth0/management/types/user_attribute_profile_oidc_mapping.py b/src/auth0/management/types/user_attribute_profile_oidc_mapping.py
new file mode 100644
index 00000000..b676c7e0
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_oidc_mapping.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UserAttributeProfileOidcMapping(UniversalBaseModel):
+ """
+ OIDC mapping for this attribute
+ """
+
+ mapping: str = pydantic.Field()
+ """
+ OIDC mapping field
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Display name for the OIDC mapping
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_patch_user_id.py b/src/auth0/management/types/user_attribute_profile_patch_user_id.py
new file mode 100644
index 00000000..b6e87b47
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_patch_user_id.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .user_attribute_profile_user_id import UserAttributeProfileUserId
+
+UserAttributeProfilePatchUserId = typing.Optional[UserAttributeProfileUserId]
diff --git a/src/auth0/management/types/user_attribute_profile_saml_mapping.py b/src/auth0/management/types/user_attribute_profile_saml_mapping.py
new file mode 100644
index 00000000..b6f79f46
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_saml_mapping.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserAttributeProfileSamlMapping = typing.List[str]
diff --git a/src/auth0/management/types/user_attribute_profile_strategy_overrides.py b/src/auth0/management/types/user_attribute_profile_strategy_overrides.py
new file mode 100644
index 00000000..9929ecda
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_strategy_overrides.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .user_attribute_profile_strategy_overrides_mapping import UserAttributeProfileStrategyOverridesMapping
+
+
+class UserAttributeProfileStrategyOverrides(UniversalBaseModel):
+ """
+ Strategy-specific overrides for this attribute
+ """
+
+ pingfederate: typing.Optional[UserAttributeProfileStrategyOverridesMapping] = None
+ ad: typing.Optional[UserAttributeProfileStrategyOverridesMapping] = None
+ adfs: typing.Optional[UserAttributeProfileStrategyOverridesMapping] = None
+ waad: typing.Optional[UserAttributeProfileStrategyOverridesMapping] = None
+ google_apps: typing_extensions.Annotated[
+ typing.Optional[UserAttributeProfileStrategyOverridesMapping], FieldMetadata(alias="google-apps")
+ ] = None
+ okta: typing.Optional[UserAttributeProfileStrategyOverridesMapping] = None
+ oidc: typing.Optional[UserAttributeProfileStrategyOverridesMapping] = None
+ samlp: typing.Optional[UserAttributeProfileStrategyOverridesMapping] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_strategy_overrides_mapping.py b/src/auth0/management/types/user_attribute_profile_strategy_overrides_mapping.py
new file mode 100644
index 00000000..efc31c9f
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_strategy_overrides_mapping.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_oidc_mapping import UserAttributeProfileOidcMapping
+from .user_attribute_profile_saml_mapping import UserAttributeProfileSamlMapping
+
+
+class UserAttributeProfileStrategyOverridesMapping(UniversalBaseModel):
+ oidc_mapping: typing.Optional[UserAttributeProfileOidcMapping] = None
+ saml_mapping: typing.Optional[UserAttributeProfileSamlMapping] = None
+ scim_mapping: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SCIM mapping override for this strategy
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_strategy_overrides_user_id.py b/src/auth0/management/types/user_attribute_profile_strategy_overrides_user_id.py
new file mode 100644
index 00000000..e0388798
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_strategy_overrides_user_id.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .user_attribute_profile_strategy_overrides_user_id_mapping import (
+ UserAttributeProfileStrategyOverridesUserIdMapping,
+)
+
+
+class UserAttributeProfileStrategyOverridesUserId(UniversalBaseModel):
+ """
+ Strategy-specific overrides for user ID
+ """
+
+ pingfederate: typing.Optional[UserAttributeProfileStrategyOverridesUserIdMapping] = None
+ ad: typing.Optional[UserAttributeProfileStrategyOverridesUserIdMapping] = None
+ adfs: typing.Optional[UserAttributeProfileStrategyOverridesUserIdMapping] = None
+ waad: typing.Optional[UserAttributeProfileStrategyOverridesUserIdMapping] = None
+ google_apps: typing_extensions.Annotated[
+ typing.Optional[UserAttributeProfileStrategyOverridesUserIdMapping], FieldMetadata(alias="google-apps")
+ ] = None
+ okta: typing.Optional[UserAttributeProfileStrategyOverridesUserIdMapping] = None
+ oidc: typing.Optional[UserAttributeProfileStrategyOverridesUserIdMapping] = None
+ samlp: typing.Optional[UserAttributeProfileStrategyOverridesUserIdMapping] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_strategy_overrides_user_id_mapping.py b/src/auth0/management/types/user_attribute_profile_strategy_overrides_user_id_mapping.py
new file mode 100644
index 00000000..cf032267
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_strategy_overrides_user_id_mapping.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_saml_mapping import UserAttributeProfileSamlMapping
+from .user_attribute_profile_user_id_oidc_strategy_override_mapping import (
+ UserAttributeProfileUserIdOidcStrategyOverrideMapping,
+)
+
+
+class UserAttributeProfileStrategyOverridesUserIdMapping(UniversalBaseModel):
+ oidc_mapping: typing.Optional[UserAttributeProfileUserIdOidcStrategyOverrideMapping] = None
+ saml_mapping: typing.Optional[UserAttributeProfileSamlMapping] = None
+ scim_mapping: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SCIM mapping override for this strategy
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_template.py b/src/auth0/management/types/user_attribute_profile_template.py
new file mode 100644
index 00000000..47905255
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_template.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_name import UserAttributeProfileName
+from .user_attribute_profile_user_attributes import UserAttributeProfileUserAttributes
+from .user_attribute_profile_user_id import UserAttributeProfileUserId
+
+
+class UserAttributeProfileTemplate(UniversalBaseModel):
+ """
+ The structure of the template, which can be used as the payload for creating or updating a User Attribute Profile.
+ """
+
+ name: typing.Optional[UserAttributeProfileName] = None
+ user_id: typing.Optional[UserAttributeProfileUserId] = None
+ user_attributes: typing.Optional[UserAttributeProfileUserAttributes] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_template_item.py b/src/auth0/management/types/user_attribute_profile_template_item.py
new file mode 100644
index 00000000..d89c0e35
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_template_item.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_template import UserAttributeProfileTemplate
+
+
+class UserAttributeProfileTemplateItem(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The id of the template.
+ """
+
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The user-friendly name of the template displayed in the UI.
+ """
+
+ template: typing.Optional[UserAttributeProfileTemplate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_user_attribute_additional_properties.py b/src/auth0/management/types/user_attribute_profile_user_attribute_additional_properties.py
new file mode 100644
index 00000000..6102f873
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_user_attribute_additional_properties.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .user_attribute_profile_oidc_mapping import UserAttributeProfileOidcMapping
+from .user_attribute_profile_saml_mapping import UserAttributeProfileSamlMapping
+from .user_attribute_profile_strategy_overrides import UserAttributeProfileStrategyOverrides
+
+
+class UserAttributeProfileUserAttributeAdditionalProperties(UniversalBaseModel):
+ description: str = pydantic.Field()
+ """
+ Description of this attribute
+ """
+
+ label: str = pydantic.Field()
+ """
+ Display label for this attribute
+ """
+
+ profile_required: bool = pydantic.Field()
+ """
+ Whether this attribute is required in the profile
+ """
+
+ auth_0_mapping: typing_extensions.Annotated[str, FieldMetadata(alias="auth0_mapping")] = pydantic.Field()
+ """
+ Auth0 mapping for this attribute
+ """
+
+ oidc_mapping: typing.Optional[UserAttributeProfileOidcMapping] = None
+ saml_mapping: typing.Optional[UserAttributeProfileSamlMapping] = None
+ scim_mapping: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SCIM mapping for this attribute
+ """
+
+ strategy_overrides: typing.Optional[UserAttributeProfileStrategyOverrides] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_user_attributes.py b/src/auth0/management/types/user_attribute_profile_user_attributes.py
new file mode 100644
index 00000000..046a7b37
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_user_attributes.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .user_attribute_profile_user_attribute_additional_properties import (
+ UserAttributeProfileUserAttributeAdditionalProperties,
+)
+
+UserAttributeProfileUserAttributes = typing.Dict[str, UserAttributeProfileUserAttributeAdditionalProperties]
diff --git a/src/auth0/management/types/user_attribute_profile_user_id.py b/src/auth0/management/types/user_attribute_profile_user_id.py
new file mode 100644
index 00000000..bdaad750
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_user_id.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_attribute_profile_strategy_overrides_user_id import UserAttributeProfileStrategyOverridesUserId
+from .user_attribute_profile_user_id_oidc_mapping_enum import UserAttributeProfileUserIdOidcMappingEnum
+from .user_attribute_profile_user_id_saml_mapping import UserAttributeProfileUserIdSamlMapping
+
+
+class UserAttributeProfileUserId(UniversalBaseModel):
+ """
+ User ID mapping configuration
+ """
+
+ oidc_mapping: typing.Optional[UserAttributeProfileUserIdOidcMappingEnum] = None
+ saml_mapping: typing.Optional[UserAttributeProfileUserIdSamlMapping] = None
+ scim_mapping: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ SCIM mapping for user ID
+ """
+
+ strategy_overrides: typing.Optional[UserAttributeProfileStrategyOverridesUserId] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_attribute_profile_user_id_oidc_mapping_enum.py b/src/auth0/management/types/user_attribute_profile_user_id_oidc_mapping_enum.py
new file mode 100644
index 00000000..6dac1178
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_user_id_oidc_mapping_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserAttributeProfileUserIdOidcMappingEnum = typing.Literal["sub"]
diff --git a/src/auth0/management/types/user_attribute_profile_user_id_oidc_strategy_override_mapping.py b/src/auth0/management/types/user_attribute_profile_user_id_oidc_strategy_override_mapping.py
new file mode 100644
index 00000000..fa0b7b07
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_user_id_oidc_strategy_override_mapping.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserAttributeProfileUserIdOidcStrategyOverrideMapping = typing.Union[typing.Literal["sub", "oid", "email"], typing.Any]
diff --git a/src/auth0/management/types/user_attribute_profile_user_id_saml_mapping.py b/src/auth0/management/types/user_attribute_profile_user_id_saml_mapping.py
new file mode 100644
index 00000000..abce0f6f
--- /dev/null
+++ b/src/auth0/management/types/user_attribute_profile_user_id_saml_mapping.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserAttributeProfileUserIdSamlMapping = typing.List[str]
diff --git a/src/auth0/management/types/user_authentication_method.py b/src/auth0/management/types/user_authentication_method.py
new file mode 100644
index 00000000..16d3440f
--- /dev/null
+++ b/src/auth0/management/types/user_authentication_method.py
@@ -0,0 +1,109 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .authentication_method_type_enum import AuthenticationMethodTypeEnum
+from .preferred_authentication_method_enum import PreferredAuthenticationMethodEnum
+from .user_authentication_method_properties import UserAuthenticationMethodProperties
+
+
+class UserAuthenticationMethod(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ The ID of the authentication method (auto generated)
+ """
+
+ type: AuthenticationMethodTypeEnum
+ confirmed: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ The authentication method status
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ A human-readable label to identify the authentication method
+ """
+
+ authentication_methods: typing.Optional[typing.List[UserAuthenticationMethodProperties]] = None
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = None
+ link_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The ID of a linked authentication method. Linked authentication methods will be deleted together.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to email and email-verification authentication methods only. The email address used to send verification messages.
+ """
+
+ key_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authentication methods only. The ID of the generated credential.
+ """
+
+ public_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn authentication methods only. The public key.
+ """
+
+ created_at: dt.datetime = pydantic.Field()
+ """
+ Authenticator creation date
+ """
+
+ enrolled_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Enrollment date
+ """
+
+ last_auth_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Last authentication
+ """
+
+ credential_device_type: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. The kind of device the credential is stored on as defined by backup eligibility. "single_device" credentials cannot be backed up and synced to another device, "multi_device" credentials can be backed up if enabled by the end-user.
+ """
+
+ credential_backed_up: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. Whether the credential was backed up.
+ """
+
+ identity_user_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. The ID of the user identity linked with the authentication method.
+ """
+
+ user_agent: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkeys only. The user-agent of the browser used to create the passkey.
+ """
+
+ aaguid: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to passkey authentication methods only. Authenticator Attestation Globally Unique Identifier.
+ """
+
+ relying_party_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Applies to webauthn/passkey authentication methods only. The credential's relying party identifier.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_authentication_method_properties.py b/src/auth0/management/types/user_authentication_method_properties.py
new file mode 100644
index 00000000..34ebed86
--- /dev/null
+++ b/src/auth0/management/types/user_authentication_method_properties.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_authentication_method_properties_enum import UserAuthenticationMethodPropertiesEnum
+
+
+class UserAuthenticationMethodProperties(UniversalBaseModel):
+ type: typing.Optional[UserAuthenticationMethodPropertiesEnum] = None
+ id: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_authentication_method_properties_enum.py b/src/auth0/management/types/user_authentication_method_properties_enum.py
new file mode 100644
index 00000000..9def1d50
--- /dev/null
+++ b/src/auth0/management/types/user_authentication_method_properties_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserAuthenticationMethodPropertiesEnum = typing.Union[typing.Literal["totp", "push", "sms", "voice"], typing.Any]
diff --git a/src/auth0/management/types/user_block_identifier.py b/src/auth0/management/types/user_block_identifier.py
new file mode 100644
index 00000000..9d3855e1
--- /dev/null
+++ b/src/auth0/management/types/user_block_identifier.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UserBlockIdentifier(UniversalBaseModel):
+ identifier: typing.Optional[str] = pydantic.Field(default="john.doe@gmail.com")
+ """
+ Identifier (should be any of an `email`, `username`, or `phone_number`)
+ """
+
+ ip: typing.Optional[str] = pydantic.Field(default="10.0.0.1")
+ """
+ IP Address
+ """
+
+ connection: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Connection identifier
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_date_schema.py b/src/auth0/management/types/user_date_schema.py
new file mode 100644
index 00000000..3e6b3432
--- /dev/null
+++ b/src/auth0/management/types/user_date_schema.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserDateSchema = typing.Union[str, typing.Dict[str, typing.Any]]
diff --git a/src/auth0/management/types/user_enrollment_auth_method_enum.py b/src/auth0/management/types/user_enrollment_auth_method_enum.py
new file mode 100644
index 00000000..b620d6e2
--- /dev/null
+++ b/src/auth0/management/types/user_enrollment_auth_method_enum.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserEnrollmentAuthMethodEnum = typing.Union[
+ typing.Literal["authenticator", "guardian", "sms", "webauthn-platform", "webauthn-roaming"], typing.Any
+]
diff --git a/src/auth0/management/types/user_enrollment_status_enum.py b/src/auth0/management/types/user_enrollment_status_enum.py
new file mode 100644
index 00000000..b8afa334
--- /dev/null
+++ b/src/auth0/management/types/user_enrollment_status_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserEnrollmentStatusEnum = typing.Union[typing.Literal["pending", "confirmed"], typing.Any]
diff --git a/src/auth0/management/types/user_grant.py b/src/auth0/management/types/user_grant.py
new file mode 100644
index 00000000..58a9ff63
--- /dev/null
+++ b/src/auth0/management/types/user_grant.py
@@ -0,0 +1,46 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class UserGrant(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the grant.
+ """
+
+ client_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="clientID")] = pydantic.Field(
+ default=None
+ )
+ """
+ ID of the client.
+ """
+
+ user_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of the user.
+ """
+
+ audience: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Audience of the grant.
+ """
+
+ scope: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Scopes included in this grant.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_groups_response_schema.py b/src/auth0/management/types/user_groups_response_schema.py
new file mode 100644
index 00000000..2ab13d1d
--- /dev/null
+++ b/src/auth0/management/types/user_groups_response_schema.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .group import Group
+
+
+class UserGroupsResponseSchema(Group):
+ membership_created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Timestamp of when the group membership was added.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_id.py b/src/auth0/management/types/user_id.py
new file mode 100644
index 00000000..a35851ca
--- /dev/null
+++ b/src/auth0/management/types/user_id.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserId = typing.Union[str, int]
diff --git a/src/auth0/management/types/user_identity.py b/src/auth0/management/types/user_identity.py
new file mode 100644
index 00000000..5a01de26
--- /dev/null
+++ b/src/auth0/management/types/user_identity.py
@@ -0,0 +1,57 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .user_id import UserId
+from .user_profile_data import UserProfileData
+
+
+class UserIdentity(UniversalBaseModel):
+ connection: str = pydantic.Field(default="twitter")
+ """
+ Connection name of this identity.
+ """
+
+ user_id: UserId
+ provider: str = pydantic.Field(default="twitter")
+ """
+ Type of identity provider.
+ """
+
+ profile_data: typing_extensions.Annotated[typing.Optional[UserProfileData], FieldMetadata(alias="profileData")] = (
+ None
+ )
+ is_social: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isSocial")] = pydantic.Field(
+ default=None
+ )
+ """
+ Whether the identity provider is a social provider (true) or not (false).
+ """
+
+ access_token: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ IDP access token returned if scope `read:user_idp_tokens` is defined.
+ """
+
+ access_token_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ IDP access token secret returned only if `scope read:user_idp_tokens` is defined.
+ """
+
+ refresh_token: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ IDP refresh token returned only if scope `read:user_idp_tokens` is defined.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_identity_provider_enum.py b/src/auth0/management/types/user_identity_provider_enum.py
new file mode 100644
index 00000000..8f5ae120
--- /dev/null
+++ b/src/auth0/management/types/user_identity_provider_enum.py
@@ -0,0 +1,71 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserIdentityProviderEnum = typing.Union[
+ typing.Literal[
+ "ad",
+ "adfs",
+ "amazon",
+ "apple",
+ "dropbox",
+ "bitbucket",
+ "aol",
+ "auth0-oidc",
+ "auth0",
+ "baidu",
+ "bitly",
+ "box",
+ "custom",
+ "daccount",
+ "dwolla",
+ "email",
+ "evernote-sandbox",
+ "evernote",
+ "exact",
+ "facebook",
+ "fitbit",
+ "flickr",
+ "github",
+ "google-apps",
+ "google-oauth2",
+ "instagram",
+ "ip",
+ "line",
+ "linkedin",
+ "miicard",
+ "oauth1",
+ "oauth2",
+ "office365",
+ "oidc",
+ "okta",
+ "paypal",
+ "paypal-sandbox",
+ "pingfederate",
+ "planningcenter",
+ "renren",
+ "salesforce-community",
+ "salesforce-sandbox",
+ "salesforce",
+ "samlp",
+ "sharepoint",
+ "shopify",
+ "shop",
+ "sms",
+ "soundcloud",
+ "thecity-sandbox",
+ "thecity",
+ "thirtysevensignals",
+ "twitter",
+ "untappd",
+ "vkontakte",
+ "waad",
+ "weibo",
+ "windowslive",
+ "wordpress",
+ "yahoo",
+ "yammer",
+ "yandex",
+ ],
+ typing.Any,
+]
diff --git a/src/auth0/management/types/user_identity_schema.py b/src/auth0/management/types/user_identity_schema.py
new file mode 100644
index 00000000..41c26167
--- /dev/null
+++ b/src/auth0/management/types/user_identity_schema.py
@@ -0,0 +1,58 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .user_identity_provider_enum import UserIdentityProviderEnum
+from .user_profile_data import UserProfileData
+
+
+class UserIdentitySchema(UniversalBaseModel):
+ connection: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of the connection containing this identity.
+ """
+
+ user_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Unique identifier of the user user for this identity.
+ """
+
+ provider: typing.Optional[UserIdentityProviderEnum] = None
+ is_social: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isSocial")] = pydantic.Field(
+ default=None
+ )
+ """
+ Whether this identity is from a social provider (true) or not (false).
+ """
+
+ access_token: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ IDP access token returned only if scope read:user_idp_tokens is defined.
+ """
+
+ access_token_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ IDP access token secret returned only if scope read:user_idp_tokens is defined.
+ """
+
+ refresh_token: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ IDP refresh token returned only if scope read:user_idp_tokens is defined.
+ """
+
+ profile_data: typing_extensions.Annotated[typing.Optional[UserProfileData], FieldMetadata(alias="profileData")] = (
+ None
+ )
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_list_log_offset_paginated_response_content.py b/src/auth0/management/types/user_list_log_offset_paginated_response_content.py
new file mode 100644
index 00000000..1cd3acdf
--- /dev/null
+++ b/src/auth0/management/types/user_list_log_offset_paginated_response_content.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .log import Log
+
+
+class UserListLogOffsetPaginatedResponseContent(UniversalBaseModel):
+ start: typing.Optional[float] = None
+ limit: typing.Optional[float] = None
+ length: typing.Optional[float] = None
+ total: typing.Optional[float] = None
+ logs: typing.Optional[typing.List[Log]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_metadata.py b/src/auth0/management/types/user_metadata.py
new file mode 100644
index 00000000..2c92f8a3
--- /dev/null
+++ b/src/auth0/management/types/user_metadata.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserMetadata = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/user_metadata_schema.py b/src/auth0/management/types/user_metadata_schema.py
new file mode 100644
index 00000000..a6de8c8e
--- /dev/null
+++ b/src/auth0/management/types/user_metadata_schema.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserMetadataSchema = typing.Dict[str, typing.Any]
diff --git a/src/auth0/management/types/user_multifactor_provider_enum.py b/src/auth0/management/types/user_multifactor_provider_enum.py
new file mode 100644
index 00000000..7481748e
--- /dev/null
+++ b/src/auth0/management/types/user_multifactor_provider_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+UserMultifactorProviderEnum = typing.Union[typing.Literal["duo", "google-authenticator"], typing.Any]
diff --git a/src/auth0/management/types/user_permission_schema.py b/src/auth0/management/types/user_permission_schema.py
new file mode 100644
index 00000000..1329d8b0
--- /dev/null
+++ b/src/auth0/management/types/user_permission_schema.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UserPermissionSchema(UniversalBaseModel):
+ resource_server_identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Resource server (API) identifier that this permission is for.
+ """
+
+ permission_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of this permission.
+ """
+
+ resource_server_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Resource server (API) name this permission is for.
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Description of this permission.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_profile_data.py b/src/auth0/management/types/user_profile_data.py
new file mode 100644
index 00000000..a6228cab
--- /dev/null
+++ b/src/auth0/management/types/user_profile_data.py
@@ -0,0 +1,57 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UserProfileData(UniversalBaseModel):
+ email: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Email address of this user.
+ """
+
+ email_verified: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this email address is verified (true) or unverified (false).
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of this user.
+ """
+
+ username: typing.Optional[str] = pydantic.Field(default="johndoe")
+ """
+ Username of this user.
+ """
+
+ given_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Given name/first name/forename of this user.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Phone number for this user.
+ """
+
+ phone_verified: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this phone number is verified (true) or unverified (false).
+ """
+
+ family_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Family name/last name/surname of this user.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/user_response_schema.py b/src/auth0/management/types/user_response_schema.py
new file mode 100644
index 00000000..bee75ca6
--- /dev/null
+++ b/src/auth0/management/types/user_response_schema.py
@@ -0,0 +1,106 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_app_metadata_schema import UserAppMetadataSchema
+from .user_date_schema import UserDateSchema
+from .user_identity_schema import UserIdentitySchema
+from .user_metadata_schema import UserMetadataSchema
+
+
+class UserResponseSchema(UniversalBaseModel):
+ user_id: typing.Optional[str] = pydantic.Field(default="auth0|507f1f77bcf86cd799439020")
+ """
+ ID of the user which can be used when interacting with other APIs.
+ """
+
+ email: typing.Optional[str] = pydantic.Field(default="john.doe@gmail.com")
+ """
+ Email address of this user.
+ """
+
+ email_verified: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this email address is verified (true) or unverified (false).
+ """
+
+ username: typing.Optional[str] = pydantic.Field(default="johndoe")
+ """
+ Username of this user.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default="+199999999999999")
+ """
+ Phone number for this user. Follows the E.164 recommendation.
+ """
+
+ phone_verified: typing.Optional[bool] = pydantic.Field(default=False)
+ """
+ Whether this phone number has been verified (true) or not (false).
+ """
+
+ created_at: typing.Optional[UserDateSchema] = None
+ updated_at: typing.Optional[UserDateSchema] = None
+ identities: typing.Optional[typing.List[UserIdentitySchema]] = pydantic.Field(default=None)
+ """
+ Array of user identity objects when accounts are linked.
+ """
+
+ app_metadata: typing.Optional[UserAppMetadataSchema] = None
+ user_metadata: typing.Optional[UserMetadataSchema] = None
+ picture: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL to picture, photo, or avatar of this user.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of this user.
+ """
+
+ nickname: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Preferred nickname or alias of this user.
+ """
+
+ multifactor: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ List of multi-factor authentication providers with which this user has enrolled.
+ """
+
+ last_ip: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Last IP address from which this user logged in.
+ """
+
+ last_login: typing.Optional[UserDateSchema] = None
+ logins_count: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Total number of logins this user has performed.
+ """
+
+ blocked: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether this user was blocked by an administrator (true) or is not (false).
+ """
+
+ given_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Given name/first name/forename of this user.
+ """
+
+ family_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Family name/last name/surname of this user.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/username_allowed_types.py b/src/auth0/management/types/username_allowed_types.py
new file mode 100644
index 00000000..d1c97ad4
--- /dev/null
+++ b/src/auth0/management/types/username_allowed_types.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UsernameAllowedTypes(UniversalBaseModel):
+ email: typing.Optional[bool] = None
+ phone_number: typing.Optional[bool] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/username_attribute.py b/src/auth0/management/types/username_attribute.py
new file mode 100644
index 00000000..44711459
--- /dev/null
+++ b/src/auth0/management/types/username_attribute.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .connection_attribute_identifier import ConnectionAttributeIdentifier
+from .signup_schema import SignupSchema
+from .username_validation import UsernameValidation
+
+
+class UsernameAttribute(UniversalBaseModel):
+ """
+ Configuration for the username attribute for users.
+ """
+
+ identifier: typing.Optional[ConnectionAttributeIdentifier] = None
+ profile_required: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Determines if property should be required for users
+ """
+
+ signup: typing.Optional[SignupSchema] = None
+ validation: typing.Optional[UsernameValidation] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/username_validation.py b/src/auth0/management/types/username_validation.py
new file mode 100644
index 00000000..d852729d
--- /dev/null
+++ b/src/auth0/management/types/username_validation.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .username_allowed_types import UsernameAllowedTypes
+
+
+class UsernameValidation(UniversalBaseModel):
+ min_length: typing.Optional[float] = pydantic.Field(default=None)
+ """
+ Minimum allowed length
+ """
+
+ max_length: typing.Optional[float] = pydantic.Field(default=None)
+ """
+ Maximum allowed length
+ """
+
+ allowed_types: typing.Optional[UsernameAllowedTypes] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/users_enrollment.py b/src/auth0/management/types/users_enrollment.py
new file mode 100644
index 00000000..280cbd9d
--- /dev/null
+++ b/src/auth0/management/types/users_enrollment.py
@@ -0,0 +1,57 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .user_enrollment_auth_method_enum import UserEnrollmentAuthMethodEnum
+from .user_enrollment_status_enum import UserEnrollmentStatusEnum
+
+
+class UsersEnrollment(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ ID of this enrollment.
+ """
+
+ status: typing.Optional[UserEnrollmentStatusEnum] = None
+ type: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Type of enrollment.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Name of enrollment (usually phone number).
+ """
+
+ identifier: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Device identifier (usually phone identifier) of this enrollment.
+ """
+
+ phone_number: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Phone number for this enrollment.
+ """
+
+ auth_method: typing.Optional[UserEnrollmentAuthMethodEnum] = None
+ enrolled_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Start date and time of this enrollment.
+ """
+
+ last_auth: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Last authentication date and time of this enrollment.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/verifiable_credential_template_response.py b/src/auth0/management/types/verifiable_credential_template_response.py
new file mode 100644
index 00000000..ff9b7aaa
--- /dev/null
+++ b/src/auth0/management/types/verifiable_credential_template_response.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .mdl_presentation_request import MdlPresentationRequest
+
+
+class VerifiableCredentialTemplateResponse(UniversalBaseModel):
+ id: typing.Optional[str] = pydantic.Field(default="vct_0000000000000001")
+ """
+ The id of the template.
+ """
+
+ name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The name of the template.
+ """
+
+ type: typing.Optional[str] = pydantic.Field(default="mdl")
+ """
+ The type of the template.
+ """
+
+ dialect: typing.Optional[str] = pydantic.Field(default="simplified/1.0")
+ """
+ The dialect of the template.
+ """
+
+ presentation: typing.Optional[MdlPresentationRequest] = None
+ custom_certificate_authority: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The custom certificate authority.
+ """
+
+ well_known_trusted_issuers: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The well-known trusted issuers, comma separated.
+ """
+
+ created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time the template was created.
+ """
+
+ updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ The date and time the template was created.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/verification_method_enum.py b/src/auth0/management/types/verification_method_enum.py
new file mode 100644
index 00000000..12315de7
--- /dev/null
+++ b/src/auth0/management/types/verification_method_enum.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+VerificationMethodEnum = typing.Union[typing.Literal["link", "otp"], typing.Any]
diff --git a/src/auth0/management/types/verify_custom_domain_response_content.py b/src/auth0/management/types/verify_custom_domain_response_content.py
new file mode 100644
index 00000000..f384deb6
--- /dev/null
+++ b/src/auth0/management/types/verify_custom_domain_response_content.py
@@ -0,0 +1,65 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_domain_status_filter_enum import CustomDomainStatusFilterEnum
+from .custom_domain_type_enum import CustomDomainTypeEnum
+from .domain_certificate import DomainCertificate
+from .domain_metadata import DomainMetadata
+from .domain_verification import DomainVerification
+
+
+class VerifyCustomDomainResponseContent(UniversalBaseModel):
+ custom_domain_id: str = pydantic.Field(default="cd_0000000000000001")
+ """
+ ID of the custom domain.
+ """
+
+ domain: str = pydantic.Field(default="login.mycompany.com")
+ """
+ Domain name.
+ """
+
+ primary: bool = pydantic.Field(default=False)
+ """
+ Whether this is a primary domain (true) or not (false).
+ """
+
+ status: CustomDomainStatusFilterEnum
+ type: CustomDomainTypeEnum
+ cname_api_key: typing.Optional[str] = pydantic.Field(default="d4feca...")
+ """
+ CNAME API key header.
+ """
+
+ origin_domain_name: typing.Optional[str] = pydantic.Field(
+ default="mycompany_cd_0000000000000001.edge.tenants.auth0.com"
+ )
+ """
+ Intermediate address.
+ """
+
+ verification: typing.Optional[DomainVerification] = None
+ custom_client_ip_header: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The HTTP header to fetch the client's IP address
+ """
+
+ tls_policy: typing.Optional[str] = pydantic.Field(default="recommended")
+ """
+ The TLS version policy
+ """
+
+ domain_metadata: typing.Optional[DomainMetadata] = None
+ certificate: typing.Optional[DomainCertificate] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/types/verify_email_ticket_response_content.py b/src/auth0/management/types/verify_email_ticket_response_content.py
new file mode 100644
index 00000000..f885d2d2
--- /dev/null
+++ b/src/auth0/management/types/verify_email_ticket_response_content.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class VerifyEmailTicketResponseContent(UniversalBaseModel):
+ ticket: str = pydantic.Field(
+ default="https://login.auth0.com/lo/verify_email?client_id=nsaPS2p3cargoFy82WT7betaOPOt3qSh&tenant=mdocs&bewit=bmNlR01CcDNOUE1GeXVzODJXVDdyY1RUT1BPdDNxU2hcMTQzMDY2MjE4MVxuRTcxM0RSeUNlbEpzUUJmaFVaS3A1NEdJbWFzSUZMYzRTdEFtY2NMMXhZPVx7ImVtYWloojoiZGFtaWtww2NoQGhvdG1haWwuY29tIiwidGVuYW50IjoiZHNjaGVua2tjwWFuIiwiY2xpZW50X2lkIjoibmNlR01CcDNOUE1GeXVzODJXVDdyY1RUT1BPiiqxU2giLCJjb25uZWN0aW9uIjoiRGFtaWmsdiwicmVzdWx0VXJsIjoiIn0"
+ )
+ """
+ URL representing the ticket.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/auth0/management/user_attribute_profiles/__init__.py b/src/auth0/management/user_attribute_profiles/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/user_attribute_profiles/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/user_attribute_profiles/client.py b/src/auth0/management/user_attribute_profiles/client.py
new file mode 100644
index 00000000..250661e4
--- /dev/null
+++ b/src/auth0/management/user_attribute_profiles/client.py
@@ -0,0 +1,652 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.create_user_attribute_profile_response_content import CreateUserAttributeProfileResponseContent
+from ..types.get_user_attribute_profile_response_content import GetUserAttributeProfileResponseContent
+from ..types.get_user_attribute_profile_template_response_content import GetUserAttributeProfileTemplateResponseContent
+from ..types.list_user_attribute_profile_template_response_content import (
+ ListUserAttributeProfileTemplateResponseContent,
+)
+from ..types.list_user_attribute_profiles_paginated_response_content import (
+ ListUserAttributeProfilesPaginatedResponseContent,
+)
+from ..types.update_user_attribute_profile_response_content import UpdateUserAttributeProfileResponseContent
+from ..types.user_attribute_profile import UserAttributeProfile
+from ..types.user_attribute_profile_name import UserAttributeProfileName
+from ..types.user_attribute_profile_patch_user_id import UserAttributeProfilePatchUserId
+from ..types.user_attribute_profile_user_attributes import UserAttributeProfileUserAttributes
+from ..types.user_attribute_profile_user_id import UserAttributeProfileUserId
+from .raw_client import AsyncRawUserAttributeProfilesClient, RawUserAttributeProfilesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class UserAttributeProfilesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawUserAttributeProfilesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawUserAttributeProfilesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawUserAttributeProfilesClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[UserAttributeProfile, ListUserAttributeProfilesPaginatedResponseContent]:
+ """
+ Retrieve a list of User Attribute Profiles. This endpoint supports Checkpoint pagination.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 5.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[UserAttributeProfile, ListUserAttributeProfilesPaginatedResponseContent]
+ User Attribute Profiles successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.user_attribute_profiles.list(
+ from_="from",
+ take=1,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(from_=from_, take=take, request_options=request_options)
+
+ def create(
+ self,
+ *,
+ name: UserAttributeProfileName,
+ user_attributes: UserAttributeProfileUserAttributes,
+ user_id: typing.Optional[UserAttributeProfileUserId] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateUserAttributeProfileResponseContent:
+ """
+ Retrieve details about a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ name : UserAttributeProfileName
+
+ user_attributes : UserAttributeProfileUserAttributes
+
+ user_id : typing.Optional[UserAttributeProfileUserId]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateUserAttributeProfileResponseContent
+ User attribute successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0, UserAttributeProfileUserAttributeAdditionalProperties
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_attribute_profiles.create(
+ name="name",
+ user_attributes={
+ "key": UserAttributeProfileUserAttributeAdditionalProperties(
+ description="description",
+ label="label",
+ profile_required=True,
+ auth_0_mapping="auth0_mapping",
+ )
+ },
+ )
+ """
+ _response = self._raw_client.create(
+ name=name, user_attributes=user_attributes, user_id=user_id, request_options=request_options
+ )
+ return _response.data
+
+ def list_templates(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListUserAttributeProfileTemplateResponseContent:
+ """
+ Retrieve a list of User Attribute Profile Templates.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListUserAttributeProfileTemplateResponseContent
+ User Attribute Profile Templates successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_attribute_profiles.list_templates()
+ """
+ _response = self._raw_client.list_templates(request_options=request_options)
+ return _response.data
+
+ def get_template(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetUserAttributeProfileTemplateResponseContent:
+ """
+ Retrieve a User Attribute Profile Template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile-template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUserAttributeProfileTemplateResponseContent
+ User Attribute Profile Template successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_attribute_profiles.get_template(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get_template(id, request_options=request_options)
+ return _response.data
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetUserAttributeProfileResponseContent:
+ """
+ Retrieve details about a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUserAttributeProfileResponseContent
+ Record for existing user attribute profile.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_attribute_profiles.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_attribute_profiles.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[UserAttributeProfileName] = OMIT,
+ user_id: typing.Optional[UserAttributeProfilePatchUserId] = OMIT,
+ user_attributes: typing.Optional[UserAttributeProfileUserAttributes] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateUserAttributeProfileResponseContent:
+ """
+ Update the details of a specific User attribute profile, such as name, user_id and user_attributes.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user attribute profile to update.
+
+ name : typing.Optional[UserAttributeProfileName]
+
+ user_id : typing.Optional[UserAttributeProfilePatchUserId]
+
+ user_attributes : typing.Optional[UserAttributeProfileUserAttributes]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateUserAttributeProfileResponseContent
+ User attribute profile successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_attribute_profiles.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id, name=name, user_id=user_id, user_attributes=user_attributes, request_options=request_options
+ )
+ return _response.data
+
+
+class AsyncUserAttributeProfilesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawUserAttributeProfilesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawUserAttributeProfilesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawUserAttributeProfilesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[UserAttributeProfile, ListUserAttributeProfilesPaginatedResponseContent]:
+ """
+ Retrieve a list of User Attribute Profiles. This endpoint supports Checkpoint pagination.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 5.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[UserAttributeProfile, ListUserAttributeProfilesPaginatedResponseContent]
+ User Attribute Profiles successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.user_attribute_profiles.list(
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(from_=from_, take=take, request_options=request_options)
+
+ async def create(
+ self,
+ *,
+ name: UserAttributeProfileName,
+ user_attributes: UserAttributeProfileUserAttributes,
+ user_id: typing.Optional[UserAttributeProfileUserId] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateUserAttributeProfileResponseContent:
+ """
+ Retrieve details about a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ name : UserAttributeProfileName
+
+ user_attributes : UserAttributeProfileUserAttributes
+
+ user_id : typing.Optional[UserAttributeProfileUserId]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateUserAttributeProfileResponseContent
+ User attribute successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import (
+ AsyncAuth0,
+ UserAttributeProfileUserAttributeAdditionalProperties,
+ )
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_attribute_profiles.create(
+ name="name",
+ user_attributes={
+ "key": UserAttributeProfileUserAttributeAdditionalProperties(
+ description="description",
+ label="label",
+ profile_required=True,
+ auth_0_mapping="auth0_mapping",
+ )
+ },
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name, user_attributes=user_attributes, user_id=user_id, request_options=request_options
+ )
+ return _response.data
+
+ async def list_templates(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> ListUserAttributeProfileTemplateResponseContent:
+ """
+ Retrieve a list of User Attribute Profile Templates.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListUserAttributeProfileTemplateResponseContent
+ User Attribute Profile Templates successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_attribute_profiles.list_templates()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list_templates(request_options=request_options)
+ return _response.data
+
+ async def get_template(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetUserAttributeProfileTemplateResponseContent:
+ """
+ Retrieve a User Attribute Profile Template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile-template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUserAttributeProfileTemplateResponseContent
+ User Attribute Profile Template successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_attribute_profiles.get_template(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_template(id, request_options=request_options)
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetUserAttributeProfileResponseContent:
+ """
+ Retrieve details about a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUserAttributeProfileResponseContent
+ Record for existing user attribute profile.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_attribute_profiles.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_attribute_profiles.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[UserAttributeProfileName] = OMIT,
+ user_id: typing.Optional[UserAttributeProfilePatchUserId] = OMIT,
+ user_attributes: typing.Optional[UserAttributeProfileUserAttributes] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateUserAttributeProfileResponseContent:
+ """
+ Update the details of a specific User attribute profile, such as name, user_id and user_attributes.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user attribute profile to update.
+
+ name : typing.Optional[UserAttributeProfileName]
+
+ user_id : typing.Optional[UserAttributeProfilePatchUserId]
+
+ user_attributes : typing.Optional[UserAttributeProfileUserAttributes]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateUserAttributeProfileResponseContent
+ User attribute profile successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_attribute_profiles.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id, name=name, user_id=user_id, user_attributes=user_attributes, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/user_attribute_profiles/raw_client.py b/src/auth0/management/user_attribute_profiles/raw_client.py
new file mode 100644
index 00000000..e2d7c74e
--- /dev/null
+++ b/src/auth0/management/user_attribute_profiles/raw_client.py
@@ -0,0 +1,1296 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
+from ..errors.bad_request_error import BadRequestError
+from ..errors.conflict_error import ConflictError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.create_user_attribute_profile_response_content import CreateUserAttributeProfileResponseContent
+from ..types.get_user_attribute_profile_response_content import GetUserAttributeProfileResponseContent
+from ..types.get_user_attribute_profile_template_response_content import GetUserAttributeProfileTemplateResponseContent
+from ..types.list_user_attribute_profile_template_response_content import (
+ ListUserAttributeProfileTemplateResponseContent,
+)
+from ..types.list_user_attribute_profiles_paginated_response_content import (
+ ListUserAttributeProfilesPaginatedResponseContent,
+)
+from ..types.update_user_attribute_profile_response_content import UpdateUserAttributeProfileResponseContent
+from ..types.user_attribute_profile import UserAttributeProfile
+from ..types.user_attribute_profile_name import UserAttributeProfileName
+from ..types.user_attribute_profile_patch_user_id import UserAttributeProfilePatchUserId
+from ..types.user_attribute_profile_user_attributes import UserAttributeProfileUserAttributes
+from ..types.user_attribute_profile_user_id import UserAttributeProfileUserId
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawUserAttributeProfilesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[UserAttributeProfile, ListUserAttributeProfilesPaginatedResponseContent]:
+ """
+ Retrieve a list of User Attribute Profiles. This endpoint supports Checkpoint pagination.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 5.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[UserAttributeProfile, ListUserAttributeProfilesPaginatedResponseContent]
+ User Attribute Profiles successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "user-attribute-profiles",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserAttributeProfilesPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserAttributeProfilesPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.user_attribute_profiles
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: UserAttributeProfileName,
+ user_attributes: UserAttributeProfileUserAttributes,
+ user_id: typing.Optional[UserAttributeProfileUserId] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateUserAttributeProfileResponseContent]:
+ """
+ Retrieve details about a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ name : UserAttributeProfileName
+
+ user_attributes : UserAttributeProfileUserAttributes
+
+ user_id : typing.Optional[UserAttributeProfileUserId]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateUserAttributeProfileResponseContent]
+ User attribute successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "user-attribute-profiles",
+ method="POST",
+ json={
+ "name": name,
+ "user_id": convert_and_respect_annotation_metadata(
+ object_=user_id, annotation=UserAttributeProfileUserId, direction="write"
+ ),
+ "user_attributes": convert_and_respect_annotation_metadata(
+ object_=user_attributes, annotation=UserAttributeProfileUserAttributes, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateUserAttributeProfileResponseContent,
+ parse_obj_as(
+ type_=CreateUserAttributeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def list_templates(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[ListUserAttributeProfileTemplateResponseContent]:
+ """
+ Retrieve a list of User Attribute Profile Templates.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListUserAttributeProfileTemplateResponseContent]
+ User Attribute Profile Templates successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "user-attribute-profiles/templates",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListUserAttributeProfileTemplateResponseContent,
+ parse_obj_as(
+ type_=ListUserAttributeProfileTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get_template(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetUserAttributeProfileTemplateResponseContent]:
+ """
+ Retrieve a User Attribute Profile Template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile-template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetUserAttributeProfileTemplateResponseContent]
+ User Attribute Profile Template successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"user-attribute-profiles/templates/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUserAttributeProfileTemplateResponseContent,
+ parse_obj_as(
+ type_=GetUserAttributeProfileTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetUserAttributeProfileResponseContent]:
+ """
+ Retrieve details about a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetUserAttributeProfileResponseContent]
+ Record for existing user attribute profile.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"user-attribute-profiles/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUserAttributeProfileResponseContent,
+ parse_obj_as(
+ type_=GetUserAttributeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"user-attribute-profiles/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[UserAttributeProfileName] = OMIT,
+ user_id: typing.Optional[UserAttributeProfilePatchUserId] = OMIT,
+ user_attributes: typing.Optional[UserAttributeProfileUserAttributes] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateUserAttributeProfileResponseContent]:
+ """
+ Update the details of a specific User attribute profile, such as name, user_id and user_attributes.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user attribute profile to update.
+
+ name : typing.Optional[UserAttributeProfileName]
+
+ user_id : typing.Optional[UserAttributeProfilePatchUserId]
+
+ user_attributes : typing.Optional[UserAttributeProfileUserAttributes]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateUserAttributeProfileResponseContent]
+ User attribute profile successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"user-attribute-profiles/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "user_id": convert_and_respect_annotation_metadata(
+ object_=user_id, annotation=UserAttributeProfilePatchUserId, direction="write"
+ ),
+ "user_attributes": convert_and_respect_annotation_metadata(
+ object_=user_attributes, annotation=UserAttributeProfileUserAttributes, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateUserAttributeProfileResponseContent,
+ parse_obj_as(
+ type_=UpdateUserAttributeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawUserAttributeProfilesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[UserAttributeProfile, ListUserAttributeProfilesPaginatedResponseContent]:
+ """
+ Retrieve a list of User Attribute Profiles. This endpoint supports Checkpoint pagination.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 5.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[UserAttributeProfile, ListUserAttributeProfilesPaginatedResponseContent]
+ User Attribute Profiles successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "user-attribute-profiles",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserAttributeProfilesPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserAttributeProfilesPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.user_attribute_profiles
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: UserAttributeProfileName,
+ user_attributes: UserAttributeProfileUserAttributes,
+ user_id: typing.Optional[UserAttributeProfileUserId] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateUserAttributeProfileResponseContent]:
+ """
+ Retrieve details about a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ name : UserAttributeProfileName
+
+ user_attributes : UserAttributeProfileUserAttributes
+
+ user_id : typing.Optional[UserAttributeProfileUserId]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateUserAttributeProfileResponseContent]
+ User attribute successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "user-attribute-profiles",
+ method="POST",
+ json={
+ "name": name,
+ "user_id": convert_and_respect_annotation_metadata(
+ object_=user_id, annotation=UserAttributeProfileUserId, direction="write"
+ ),
+ "user_attributes": convert_and_respect_annotation_metadata(
+ object_=user_attributes, annotation=UserAttributeProfileUserAttributes, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateUserAttributeProfileResponseContent,
+ parse_obj_as(
+ type_=CreateUserAttributeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def list_templates(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[ListUserAttributeProfileTemplateResponseContent]:
+ """
+ Retrieve a list of User Attribute Profile Templates.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListUserAttributeProfileTemplateResponseContent]
+ User Attribute Profile Templates successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "user-attribute-profiles/templates",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListUserAttributeProfileTemplateResponseContent,
+ parse_obj_as(
+ type_=ListUserAttributeProfileTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get_template(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetUserAttributeProfileTemplateResponseContent]:
+ """
+ Retrieve a User Attribute Profile Template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile-template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetUserAttributeProfileTemplateResponseContent]
+ User Attribute Profile Template successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"user-attribute-profiles/templates/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUserAttributeProfileTemplateResponseContent,
+ parse_obj_as(
+ type_=GetUserAttributeProfileTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetUserAttributeProfileResponseContent]:
+ """
+ Retrieve details about a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetUserAttributeProfileResponseContent]
+ Record for existing user attribute profile.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"user-attribute-profiles/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUserAttributeProfileResponseContent,
+ parse_obj_as(
+ type_=GetUserAttributeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a single User Attribute Profile specified by ID.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user-attribute-profile to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"user-attribute-profiles/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[UserAttributeProfileName] = OMIT,
+ user_id: typing.Optional[UserAttributeProfilePatchUserId] = OMIT,
+ user_attributes: typing.Optional[UserAttributeProfileUserAttributes] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateUserAttributeProfileResponseContent]:
+ """
+ Update the details of a specific User attribute profile, such as name, user_id and user_attributes.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user attribute profile to update.
+
+ name : typing.Optional[UserAttributeProfileName]
+
+ user_id : typing.Optional[UserAttributeProfilePatchUserId]
+
+ user_attributes : typing.Optional[UserAttributeProfileUserAttributes]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateUserAttributeProfileResponseContent]
+ User attribute profile successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"user-attribute-profiles/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "user_id": convert_and_respect_annotation_metadata(
+ object_=user_id, annotation=UserAttributeProfilePatchUserId, direction="write"
+ ),
+ "user_attributes": convert_and_respect_annotation_metadata(
+ object_=user_attributes, annotation=UserAttributeProfileUserAttributes, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateUserAttributeProfileResponseContent,
+ parse_obj_as(
+ type_=UpdateUserAttributeProfileResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/user_blocks/__init__.py b/src/auth0/management/user_blocks/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/user_blocks/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/user_blocks/client.py b/src/auth0/management/user_blocks/client.py
new file mode 100644
index 00000000..4cf1f59a
--- /dev/null
+++ b/src/auth0/management/user_blocks/client.py
@@ -0,0 +1,391 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.request_options import RequestOptions
+from ..types.list_user_blocks_by_identifier_response_content import ListUserBlocksByIdentifierResponseContent
+from ..types.list_user_blocks_response_content import ListUserBlocksResponseContent
+from .raw_client import AsyncRawUserBlocksClient, RawUserBlocksClient
+
+
+class UserBlocksClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawUserBlocksClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawUserBlocksClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawUserBlocksClient
+ """
+ return self._raw_client
+
+ def list_by_identifier(
+ self,
+ *,
+ identifier: str,
+ consider_brute_force_enablement: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ListUserBlocksByIdentifierResponseContent:
+ """
+ Retrieve details of all Brute-force Protection blocks for a user with the given identifier (username, phone number, or email).
+
+ Parameters
+ ----------
+ identifier : str
+ Should be any of a username, phone number, or email.
+
+ consider_brute_force_enablement : typing.Optional[bool]
+
+ If true and Brute Force Protection is enabled and configured to block logins, will return a list of blocked IP addresses.
+ If true and Brute Force Protection is disabled, will return an empty list.
+
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListUserBlocksByIdentifierResponseContent
+ User successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_blocks.list_by_identifier(
+ identifier="identifier",
+ consider_brute_force_enablement=True,
+ )
+ """
+ _response = self._raw_client.list_by_identifier(
+ identifier=identifier,
+ consider_brute_force_enablement=consider_brute_force_enablement,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def delete_by_identifier(self, *, identifier: str, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Remove all Brute-force Protection blocks for the user with the given identifier (username, phone number, or email).
+
+ Note: This endpoint does not unblock users that were blocked by a tenant administrator.
+
+ Parameters
+ ----------
+ identifier : str
+ Should be any of a username, phone number, or email.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_blocks.delete_by_identifier(
+ identifier="identifier",
+ )
+ """
+ _response = self._raw_client.delete_by_identifier(identifier=identifier, request_options=request_options)
+ return _response.data
+
+ def list(
+ self,
+ id: str,
+ *,
+ consider_brute_force_enablement: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ListUserBlocksResponseContent:
+ """
+ Retrieve details of all Brute-force Protection blocks for the user with the given ID.
+
+ Parameters
+ ----------
+ id : str
+ user_id of the user blocks to retrieve.
+
+ consider_brute_force_enablement : typing.Optional[bool]
+
+ If true and Brute Force Protection is enabled and configured to block logins, will return a list of blocked IP addresses.
+ If true and Brute Force Protection is disabled, will return an empty list.
+
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListUserBlocksResponseContent
+ User block successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_blocks.list(
+ id="id",
+ consider_brute_force_enablement=True,
+ )
+ """
+ _response = self._raw_client.list(
+ id, consider_brute_force_enablement=consider_brute_force_enablement, request_options=request_options
+ )
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Remove all Brute-force Protection blocks for the user with the given ID.
+
+ Note: This endpoint does not unblock users that were blocked by a tenant administrator.
+
+ Parameters
+ ----------
+ id : str
+ The user_id of the user to update.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_blocks.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncUserBlocksClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawUserBlocksClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawUserBlocksClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawUserBlocksClient
+ """
+ return self._raw_client
+
+ async def list_by_identifier(
+ self,
+ *,
+ identifier: str,
+ consider_brute_force_enablement: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ListUserBlocksByIdentifierResponseContent:
+ """
+ Retrieve details of all Brute-force Protection blocks for a user with the given identifier (username, phone number, or email).
+
+ Parameters
+ ----------
+ identifier : str
+ Should be any of a username, phone number, or email.
+
+ consider_brute_force_enablement : typing.Optional[bool]
+
+ If true and Brute Force Protection is enabled and configured to block logins, will return a list of blocked IP addresses.
+ If true and Brute Force Protection is disabled, will return an empty list.
+
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListUserBlocksByIdentifierResponseContent
+ User successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_blocks.list_by_identifier(
+ identifier="identifier",
+ consider_brute_force_enablement=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list_by_identifier(
+ identifier=identifier,
+ consider_brute_force_enablement=consider_brute_force_enablement,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def delete_by_identifier(
+ self, *, identifier: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Remove all Brute-force Protection blocks for the user with the given identifier (username, phone number, or email).
+
+ Note: This endpoint does not unblock users that were blocked by a tenant administrator.
+
+ Parameters
+ ----------
+ identifier : str
+ Should be any of a username, phone number, or email.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_blocks.delete_by_identifier(
+ identifier="identifier",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete_by_identifier(identifier=identifier, request_options=request_options)
+ return _response.data
+
+ async def list(
+ self,
+ id: str,
+ *,
+ consider_brute_force_enablement: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ListUserBlocksResponseContent:
+ """
+ Retrieve details of all Brute-force Protection blocks for the user with the given ID.
+
+ Parameters
+ ----------
+ id : str
+ user_id of the user blocks to retrieve.
+
+ consider_brute_force_enablement : typing.Optional[bool]
+
+ If true and Brute Force Protection is enabled and configured to block logins, will return a list of blocked IP addresses.
+ If true and Brute Force Protection is disabled, will return an empty list.
+
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ListUserBlocksResponseContent
+ User block successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_blocks.list(
+ id="id",
+ consider_brute_force_enablement=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(
+ id, consider_brute_force_enablement=consider_brute_force_enablement, request_options=request_options
+ )
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Remove all Brute-force Protection blocks for the user with the given ID.
+
+ Note: This endpoint does not unblock users that were blocked by a tenant administrator.
+
+ Parameters
+ ----------
+ id : str
+ The user_id of the user to update.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_blocks.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/user_blocks/raw_client.py b/src/auth0/management/user_blocks/raw_client.py
new file mode 100644
index 00000000..f40da3ae
--- /dev/null
+++ b/src/auth0/management/user_blocks/raw_client.py
@@ -0,0 +1,770 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.bad_request_error import BadRequestError
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.not_found_error import NotFoundError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.list_user_blocks_by_identifier_response_content import ListUserBlocksByIdentifierResponseContent
+from ..types.list_user_blocks_response_content import ListUserBlocksResponseContent
+
+
+class RawUserBlocksClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list_by_identifier(
+ self,
+ *,
+ identifier: str,
+ consider_brute_force_enablement: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[ListUserBlocksByIdentifierResponseContent]:
+ """
+ Retrieve details of all Brute-force Protection blocks for a user with the given identifier (username, phone number, or email).
+
+ Parameters
+ ----------
+ identifier : str
+ Should be any of a username, phone number, or email.
+
+ consider_brute_force_enablement : typing.Optional[bool]
+
+ If true and Brute Force Protection is enabled and configured to block logins, will return a list of blocked IP addresses.
+ If true and Brute Force Protection is disabled, will return an empty list.
+
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListUserBlocksByIdentifierResponseContent]
+ User successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "user-blocks",
+ method="GET",
+ params={
+ "identifier": identifier,
+ "consider_brute_force_enablement": consider_brute_force_enablement,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListUserBlocksByIdentifierResponseContent,
+ parse_obj_as(
+ type_=ListUserBlocksByIdentifierResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete_by_identifier(
+ self, *, identifier: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Remove all Brute-force Protection blocks for the user with the given identifier (username, phone number, or email).
+
+ Note: This endpoint does not unblock users that were blocked by a tenant administrator.
+
+ Parameters
+ ----------
+ identifier : str
+ Should be any of a username, phone number, or email.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "user-blocks",
+ method="DELETE",
+ params={
+ "identifier": identifier,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def list(
+ self,
+ id: str,
+ *,
+ consider_brute_force_enablement: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[ListUserBlocksResponseContent]:
+ """
+ Retrieve details of all Brute-force Protection blocks for the user with the given ID.
+
+ Parameters
+ ----------
+ id : str
+ user_id of the user blocks to retrieve.
+
+ consider_brute_force_enablement : typing.Optional[bool]
+
+ If true and Brute Force Protection is enabled and configured to block logins, will return a list of blocked IP addresses.
+ If true and Brute Force Protection is disabled, will return an empty list.
+
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListUserBlocksResponseContent]
+ User block successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"user-blocks/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "consider_brute_force_enablement": consider_brute_force_enablement,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListUserBlocksResponseContent,
+ parse_obj_as(
+ type_=ListUserBlocksResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Remove all Brute-force Protection blocks for the user with the given ID.
+
+ Note: This endpoint does not unblock users that were blocked by a tenant administrator.
+
+ Parameters
+ ----------
+ id : str
+ The user_id of the user to update.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"user-blocks/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawUserBlocksClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list_by_identifier(
+ self,
+ *,
+ identifier: str,
+ consider_brute_force_enablement: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[ListUserBlocksByIdentifierResponseContent]:
+ """
+ Retrieve details of all Brute-force Protection blocks for a user with the given identifier (username, phone number, or email).
+
+ Parameters
+ ----------
+ identifier : str
+ Should be any of a username, phone number, or email.
+
+ consider_brute_force_enablement : typing.Optional[bool]
+
+ If true and Brute Force Protection is enabled and configured to block logins, will return a list of blocked IP addresses.
+ If true and Brute Force Protection is disabled, will return an empty list.
+
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListUserBlocksByIdentifierResponseContent]
+ User successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "user-blocks",
+ method="GET",
+ params={
+ "identifier": identifier,
+ "consider_brute_force_enablement": consider_brute_force_enablement,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListUserBlocksByIdentifierResponseContent,
+ parse_obj_as(
+ type_=ListUserBlocksByIdentifierResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete_by_identifier(
+ self, *, identifier: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Remove all Brute-force Protection blocks for the user with the given identifier (username, phone number, or email).
+
+ Note: This endpoint does not unblock users that were blocked by a tenant administrator.
+
+ Parameters
+ ----------
+ identifier : str
+ Should be any of a username, phone number, or email.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "user-blocks",
+ method="DELETE",
+ params={
+ "identifier": identifier,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def list(
+ self,
+ id: str,
+ *,
+ consider_brute_force_enablement: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[ListUserBlocksResponseContent]:
+ """
+ Retrieve details of all Brute-force Protection blocks for the user with the given ID.
+
+ Parameters
+ ----------
+ id : str
+ user_id of the user blocks to retrieve.
+
+ consider_brute_force_enablement : typing.Optional[bool]
+
+ If true and Brute Force Protection is enabled and configured to block logins, will return a list of blocked IP addresses.
+ If true and Brute Force Protection is disabled, will return an empty list.
+
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListUserBlocksResponseContent]
+ User block successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"user-blocks/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "consider_brute_force_enablement": consider_brute_force_enablement,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListUserBlocksResponseContent,
+ parse_obj_as(
+ type_=ListUserBlocksResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Remove all Brute-force Protection blocks for the user with the given ID.
+
+ Note: This endpoint does not unblock users that were blocked by a tenant administrator.
+
+ Parameters
+ ----------
+ id : str
+ The user_id of the user to update.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"user-blocks/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/user_grants/__init__.py b/src/auth0/management/user_grants/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/user_grants/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/user_grants/client.py b/src/auth0/management/user_grants/client.py
new file mode 100644
index 00000000..e9e09601
--- /dev/null
+++ b/src/auth0/management/user_grants/client.py
@@ -0,0 +1,333 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.list_user_grants_offset_paginated_response_content import ListUserGrantsOffsetPaginatedResponseContent
+from ..types.user_grant import UserGrant
+from .raw_client import AsyncRawUserGrantsClient, RawUserGrantsClient
+
+
+class UserGrantsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawUserGrantsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawUserGrantsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawUserGrantsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ per_page: typing.Optional[int] = 50,
+ page: typing.Optional[int] = 0,
+ include_totals: typing.Optional[bool] = True,
+ user_id: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ audience: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[UserGrant, ListUserGrantsOffsetPaginatedResponseContent]:
+ """
+ Retrieve the grants associated with your account.
+
+ Parameters
+ ----------
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ user_id : typing.Optional[str]
+ user_id of the grants to retrieve.
+
+ client_id : typing.Optional[str]
+ client_id of the grants to retrieve.
+
+ audience : typing.Optional[str]
+ audience of the grants to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[UserGrant, ListUserGrantsOffsetPaginatedResponseContent]
+ Grants successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.user_grants.list(
+ per_page=1,
+ page=1,
+ include_totals=True,
+ user_id="user_id",
+ client_id="client_id",
+ audience="audience",
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ per_page=per_page,
+ page=page,
+ include_totals=include_totals,
+ user_id=user_id,
+ client_id=client_id,
+ audience=audience,
+ request_options=request_options,
+ )
+
+ def delete_by_user_id(self, *, user_id: str, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a grant associated with your account.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of the grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_grants.delete_by_user_id(
+ user_id="user_id",
+ )
+ """
+ _response = self._raw_client.delete_by_user_id(user_id=user_id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a grant associated with your account.
+
+ Parameters
+ ----------
+ id : str
+ ID of the grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.user_grants.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncUserGrantsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawUserGrantsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawUserGrantsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawUserGrantsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ per_page: typing.Optional[int] = 50,
+ page: typing.Optional[int] = 0,
+ include_totals: typing.Optional[bool] = True,
+ user_id: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ audience: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[UserGrant, ListUserGrantsOffsetPaginatedResponseContent]:
+ """
+ Retrieve the grants associated with your account.
+
+ Parameters
+ ----------
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ user_id : typing.Optional[str]
+ user_id of the grants to retrieve.
+
+ client_id : typing.Optional[str]
+ client_id of the grants to retrieve.
+
+ audience : typing.Optional[str]
+ audience of the grants to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[UserGrant, ListUserGrantsOffsetPaginatedResponseContent]
+ Grants successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.user_grants.list(
+ per_page=1,
+ page=1,
+ include_totals=True,
+ user_id="user_id",
+ client_id="client_id",
+ audience="audience",
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ per_page=per_page,
+ page=page,
+ include_totals=include_totals,
+ user_id=user_id,
+ client_id=client_id,
+ audience=audience,
+ request_options=request_options,
+ )
+
+ async def delete_by_user_id(self, *, user_id: str, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a grant associated with your account.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of the grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_grants.delete_by_user_id(
+ user_id="user_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete_by_user_id(user_id=user_id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a grant associated with your account.
+
+ Parameters
+ ----------
+ id : str
+ ID of the grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.user_grants.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/user_grants/raw_client.py b/src/auth0/management/user_grants/raw_client.py
new file mode 100644
index 00000000..0de53c8d
--- /dev/null
+++ b/src/auth0/management/user_grants/raw_client.py
@@ -0,0 +1,522 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ..core.api_error import ApiError
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.http_response import AsyncHttpResponse, HttpResponse
+from ..core.jsonable_encoder import jsonable_encoder
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.pydantic_utilities import parse_obj_as
+from ..core.request_options import RequestOptions
+from ..errors.forbidden_error import ForbiddenError
+from ..errors.too_many_requests_error import TooManyRequestsError
+from ..errors.unauthorized_error import UnauthorizedError
+from ..types.list_user_grants_offset_paginated_response_content import ListUserGrantsOffsetPaginatedResponseContent
+from ..types.user_grant import UserGrant
+
+
+class RawUserGrantsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ per_page: typing.Optional[int] = 50,
+ page: typing.Optional[int] = 0,
+ include_totals: typing.Optional[bool] = True,
+ user_id: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ audience: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[UserGrant, ListUserGrantsOffsetPaginatedResponseContent]:
+ """
+ Retrieve the grants associated with your account.
+
+ Parameters
+ ----------
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ user_id : typing.Optional[str]
+ user_id of the grants to retrieve.
+
+ client_id : typing.Optional[str]
+ client_id of the grants to retrieve.
+
+ audience : typing.Optional[str]
+ audience of the grants to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[UserGrant, ListUserGrantsOffsetPaginatedResponseContent]
+ Grants successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "grants",
+ method="GET",
+ params={
+ "per_page": per_page,
+ "page": page,
+ "include_totals": include_totals,
+ "user_id": user_id,
+ "client_id": client_id,
+ "audience": audience,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserGrantsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserGrantsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.grants
+ _has_next = True
+ _get_next = lambda: self.list(
+ per_page=per_page,
+ page=page + len(_items or []),
+ include_totals=include_totals,
+ user_id=user_id,
+ client_id=client_id,
+ audience=audience,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete_by_user_id(
+ self, *, user_id: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Delete a grant associated with your account.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of the grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "grants",
+ method="DELETE",
+ params={
+ "user_id": user_id,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a grant associated with your account.
+
+ Parameters
+ ----------
+ id : str
+ ID of the grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"grants/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawUserGrantsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ per_page: typing.Optional[int] = 50,
+ page: typing.Optional[int] = 0,
+ include_totals: typing.Optional[bool] = True,
+ user_id: typing.Optional[str] = None,
+ client_id: typing.Optional[str] = None,
+ audience: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[UserGrant, ListUserGrantsOffsetPaginatedResponseContent]:
+ """
+ Retrieve the grants associated with your account.
+
+ Parameters
+ ----------
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ user_id : typing.Optional[str]
+ user_id of the grants to retrieve.
+
+ client_id : typing.Optional[str]
+ client_id of the grants to retrieve.
+
+ audience : typing.Optional[str]
+ audience of the grants to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[UserGrant, ListUserGrantsOffsetPaginatedResponseContent]
+ Grants successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "grants",
+ method="GET",
+ params={
+ "per_page": per_page,
+ "page": page,
+ "include_totals": include_totals,
+ "user_id": user_id,
+ "client_id": client_id,
+ "audience": audience,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserGrantsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserGrantsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.grants
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ per_page=per_page,
+ page=page + len(_items or []),
+ include_totals=include_totals,
+ user_id=user_id,
+ client_id=client_id,
+ audience=audience,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete_by_user_id(
+ self, *, user_id: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a grant associated with your account.
+
+ Parameters
+ ----------
+ user_id : str
+ user_id of the grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "grants",
+ method="DELETE",
+ params={
+ "user_id": user_id,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a grant associated with your account.
+
+ Parameters
+ ----------
+ id : str
+ ID of the grant to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"grants/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/__init__.py b/src/auth0/management/users/__init__.py
new file mode 100644
index 00000000..070ad464
--- /dev/null
+++ b/src/auth0/management/users/__init__.py
@@ -0,0 +1,79 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import (
+ authentication_methods,
+ authenticators,
+ connected_accounts,
+ enrollments,
+ federated_connections_tokensets,
+ identities,
+ logs,
+ multifactor,
+ organizations,
+ permissions,
+ refresh_token,
+ risk_assessments,
+ roles,
+ sessions,
+ )
+_dynamic_imports: typing.Dict[str, str] = {
+ "authentication_methods": ".authentication_methods",
+ "authenticators": ".authenticators",
+ "connected_accounts": ".connected_accounts",
+ "enrollments": ".enrollments",
+ "federated_connections_tokensets": ".federated_connections_tokensets",
+ "identities": ".identities",
+ "logs": ".logs",
+ "multifactor": ".multifactor",
+ "organizations": ".organizations",
+ "permissions": ".permissions",
+ "refresh_token": ".refresh_token",
+ "risk_assessments": ".risk_assessments",
+ "roles": ".roles",
+ "sessions": ".sessions",
+}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = [
+ "authentication_methods",
+ "authenticators",
+ "connected_accounts",
+ "enrollments",
+ "federated_connections_tokensets",
+ "identities",
+ "logs",
+ "multifactor",
+ "organizations",
+ "permissions",
+ "refresh_token",
+ "risk_assessments",
+ "roles",
+ "sessions",
+]
diff --git a/src/auth0/management/users/authentication_methods/__init__.py b/src/auth0/management/users/authentication_methods/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/authentication_methods/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/authentication_methods/client.py b/src/auth0/management/users/authentication_methods/client.py
new file mode 100644
index 00000000..564a1875
--- /dev/null
+++ b/src/auth0/management/users/authentication_methods/client.py
@@ -0,0 +1,793 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.create_user_authentication_method_response_content import CreateUserAuthenticationMethodResponseContent
+from ...types.created_user_authentication_method_type_enum import CreatedUserAuthenticationMethodTypeEnum
+from ...types.get_user_authentication_method_response_content import GetUserAuthenticationMethodResponseContent
+from ...types.list_user_authentication_methods_offset_paginated_response_content import (
+ ListUserAuthenticationMethodsOffsetPaginatedResponseContent,
+)
+from ...types.preferred_authentication_method_enum import PreferredAuthenticationMethodEnum
+from ...types.set_user_authentication_method_response_content import SetUserAuthenticationMethodResponseContent
+from ...types.set_user_authentication_methods_request_content import SetUserAuthenticationMethodsRequestContent
+from ...types.update_user_authentication_method_response_content import UpdateUserAuthenticationMethodResponseContent
+from ...types.user_authentication_method import UserAuthenticationMethod
+from .raw_client import AsyncRawAuthenticationMethodsClient, RawAuthenticationMethodsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class AuthenticationMethodsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawAuthenticationMethodsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawAuthenticationMethodsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawAuthenticationMethodsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[UserAuthenticationMethod, ListUserAuthenticationMethodsOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of authentication methods associated with a specified user.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0. Default is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Default is 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[UserAuthenticationMethod, ListUserAuthenticationMethodsOffsetPaginatedResponseContent]
+ The authentication methods for the user were retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.users.authentication_methods.list(
+ id="id",
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ id, page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ def create(
+ self,
+ id: str,
+ *,
+ type: CreatedUserAuthenticationMethodTypeEnum,
+ name: typing.Optional[str] = OMIT,
+ totp_secret: typing.Optional[str] = OMIT,
+ phone_number: typing.Optional[str] = OMIT,
+ email: typing.Optional[str] = OMIT,
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = OMIT,
+ key_id: typing.Optional[str] = OMIT,
+ public_key: typing.Optional[str] = OMIT,
+ relying_party_identifier: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateUserAuthenticationMethodResponseContent:
+ """
+ Create an authentication method. Authentication methods created via this endpoint will be auto confirmed and should already have verification completed.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user to whom the new authentication method will be assigned.
+
+ type : CreatedUserAuthenticationMethodTypeEnum
+
+ name : typing.Optional[str]
+ A human-readable label to identify the authentication method.
+
+ totp_secret : typing.Optional[str]
+ Base32 encoded secret for TOTP generation.
+
+ phone_number : typing.Optional[str]
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+
+ email : typing.Optional[str]
+ Applies to email authentication methods only. The email address used to send verification messages.
+
+ preferred_authentication_method : typing.Optional[PreferredAuthenticationMethodEnum]
+
+ key_id : typing.Optional[str]
+ Applies to webauthn authentication methods only. The id of the credential.
+
+ public_key : typing.Optional[str]
+ Applies to webauthn authentication methods only. The public key, which is encoded as base64.
+
+ relying_party_identifier : typing.Optional[str]
+ Applies to webauthn authentication methods only. The relying party identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateUserAuthenticationMethodResponseContent
+ Authentication method created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.authentication_methods.create(
+ id="id",
+ type="phone",
+ )
+ """
+ _response = self._raw_client.create(
+ id,
+ type=type,
+ name=name,
+ totp_secret=totp_secret,
+ phone_number=phone_number,
+ email=email,
+ preferred_authentication_method=preferred_authentication_method,
+ key_id=key_id,
+ public_key=public_key,
+ relying_party_identifier=relying_party_identifier,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def set(
+ self,
+ id: str,
+ *,
+ request: SetUserAuthenticationMethodsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> typing.List[SetUserAuthenticationMethodResponseContent]:
+ """
+ Replace the specified user authentication methods with supplied values.
+
+ Note: Authentication methods supplied through this action do not iterate on existing methods. Instead, any methods passed will overwrite the user’s existing settings.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ request : SetUserAuthenticationMethodsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[SetUserAuthenticationMethodResponseContent]
+ All authentication methods successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0, SetUserAuthenticationMethods
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.authentication_methods.set(
+ id="id",
+ request=[
+ SetUserAuthenticationMethods(
+ type="phone",
+ )
+ ],
+ )
+ """
+ _response = self._raw_client.set(id, request=request, request_options=request_options)
+ return _response.data
+
+ def delete_all(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Remove all authentication methods (i.e., enrolled MFA factors) from the specified user account. This action cannot be undone.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.authentication_methods.delete_all(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete_all(id, request_options=request_options)
+ return _response.data
+
+ def get(
+ self, id: str, authentication_method_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetUserAuthenticationMethodResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication methods in question.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUserAuthenticationMethodResponseContent
+ Authentication method retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.authentication_methods.get(
+ id="id",
+ authentication_method_id="authentication_method_id",
+ )
+ """
+ _response = self._raw_client.get(id, authentication_method_id, request_options=request_options)
+ return _response.data
+
+ def delete(
+ self, id: str, authentication_method_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Remove the authentication method with the given ID from the specified user. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication method to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.authentication_methods.delete(
+ id="id",
+ authentication_method_id="authentication_method_id",
+ )
+ """
+ _response = self._raw_client.delete(id, authentication_method_id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ authentication_method_id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateUserAuthenticationMethodResponseContent:
+ """
+ Modify the authentication method with the given ID from the specified user. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication method to update.
+
+ name : typing.Optional[str]
+ A human-readable label to identify the authentication method.
+
+ preferred_authentication_method : typing.Optional[PreferredAuthenticationMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateUserAuthenticationMethodResponseContent
+ Authentication method updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.authentication_methods.update(
+ id="id",
+ authentication_method_id="authentication_method_id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ authentication_method_id,
+ name=name,
+ preferred_authentication_method=preferred_authentication_method,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncAuthenticationMethodsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawAuthenticationMethodsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawAuthenticationMethodsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawAuthenticationMethodsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[UserAuthenticationMethod, ListUserAuthenticationMethodsOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of authentication methods associated with a specified user.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0. Default is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Default is 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[UserAuthenticationMethod, ListUserAuthenticationMethodsOffsetPaginatedResponseContent]
+ The authentication methods for the user were retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.users.authentication_methods.list(
+ id="id",
+ page=1,
+ per_page=1,
+ include_totals=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ id, page=page, per_page=per_page, include_totals=include_totals, request_options=request_options
+ )
+
+ async def create(
+ self,
+ id: str,
+ *,
+ type: CreatedUserAuthenticationMethodTypeEnum,
+ name: typing.Optional[str] = OMIT,
+ totp_secret: typing.Optional[str] = OMIT,
+ phone_number: typing.Optional[str] = OMIT,
+ email: typing.Optional[str] = OMIT,
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = OMIT,
+ key_id: typing.Optional[str] = OMIT,
+ public_key: typing.Optional[str] = OMIT,
+ relying_party_identifier: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateUserAuthenticationMethodResponseContent:
+ """
+ Create an authentication method. Authentication methods created via this endpoint will be auto confirmed and should already have verification completed.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user to whom the new authentication method will be assigned.
+
+ type : CreatedUserAuthenticationMethodTypeEnum
+
+ name : typing.Optional[str]
+ A human-readable label to identify the authentication method.
+
+ totp_secret : typing.Optional[str]
+ Base32 encoded secret for TOTP generation.
+
+ phone_number : typing.Optional[str]
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+
+ email : typing.Optional[str]
+ Applies to email authentication methods only. The email address used to send verification messages.
+
+ preferred_authentication_method : typing.Optional[PreferredAuthenticationMethodEnum]
+
+ key_id : typing.Optional[str]
+ Applies to webauthn authentication methods only. The id of the credential.
+
+ public_key : typing.Optional[str]
+ Applies to webauthn authentication methods only. The public key, which is encoded as base64.
+
+ relying_party_identifier : typing.Optional[str]
+ Applies to webauthn authentication methods only. The relying party identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateUserAuthenticationMethodResponseContent
+ Authentication method created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.authentication_methods.create(
+ id="id",
+ type="phone",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ id,
+ type=type,
+ name=name,
+ totp_secret=totp_secret,
+ phone_number=phone_number,
+ email=email,
+ preferred_authentication_method=preferred_authentication_method,
+ key_id=key_id,
+ public_key=public_key,
+ relying_party_identifier=relying_party_identifier,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def set(
+ self,
+ id: str,
+ *,
+ request: SetUserAuthenticationMethodsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> typing.List[SetUserAuthenticationMethodResponseContent]:
+ """
+ Replace the specified user authentication methods with supplied values.
+
+ Note: Authentication methods supplied through this action do not iterate on existing methods. Instead, any methods passed will overwrite the user’s existing settings.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ request : SetUserAuthenticationMethodsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[SetUserAuthenticationMethodResponseContent]
+ All authentication methods successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0, SetUserAuthenticationMethods
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.authentication_methods.set(
+ id="id",
+ request=[
+ SetUserAuthenticationMethods(
+ type="phone",
+ )
+ ],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.set(id, request=request, request_options=request_options)
+ return _response.data
+
+ async def delete_all(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Remove all authentication methods (i.e., enrolled MFA factors) from the specified user account. This action cannot be undone.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.authentication_methods.delete_all(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete_all(id, request_options=request_options)
+ return _response.data
+
+ async def get(
+ self, id: str, authentication_method_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetUserAuthenticationMethodResponseContent:
+ """
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication methods in question.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUserAuthenticationMethodResponseContent
+ Authentication method retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.authentication_methods.get(
+ id="id",
+ authentication_method_id="authentication_method_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, authentication_method_id, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self, id: str, authentication_method_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Remove the authentication method with the given ID from the specified user. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication method to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.authentication_methods.delete(
+ id="id",
+ authentication_method_id="authentication_method_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, authentication_method_id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ authentication_method_id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateUserAuthenticationMethodResponseContent:
+ """
+ Modify the authentication method with the given ID from the specified user. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication method to update.
+
+ name : typing.Optional[str]
+ A human-readable label to identify the authentication method.
+
+ preferred_authentication_method : typing.Optional[PreferredAuthenticationMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateUserAuthenticationMethodResponseContent
+ Authentication method updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.authentication_methods.update(
+ id="id",
+ authentication_method_id="authentication_method_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ authentication_method_id,
+ name=name,
+ preferred_authentication_method=preferred_authentication_method,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/users/authentication_methods/raw_client.py b/src/auth0/management/users/authentication_methods/raw_client.py
new file mode 100644
index 00000000..ce622dec
--- /dev/null
+++ b/src/auth0/management/users/authentication_methods/raw_client.py
@@ -0,0 +1,1576 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...core.serialization import convert_and_respect_annotation_metadata
+from ...errors.bad_request_error import BadRequestError
+from ...errors.conflict_error import ConflictError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.create_user_authentication_method_response_content import CreateUserAuthenticationMethodResponseContent
+from ...types.created_user_authentication_method_type_enum import CreatedUserAuthenticationMethodTypeEnum
+from ...types.get_user_authentication_method_response_content import GetUserAuthenticationMethodResponseContent
+from ...types.list_user_authentication_methods_offset_paginated_response_content import (
+ ListUserAuthenticationMethodsOffsetPaginatedResponseContent,
+)
+from ...types.preferred_authentication_method_enum import PreferredAuthenticationMethodEnum
+from ...types.set_user_authentication_method_response_content import SetUserAuthenticationMethodResponseContent
+from ...types.set_user_authentication_methods_request_content import SetUserAuthenticationMethodsRequestContent
+from ...types.update_user_authentication_method_response_content import UpdateUserAuthenticationMethodResponseContent
+from ...types.user_authentication_method import UserAuthenticationMethod
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawAuthenticationMethodsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[UserAuthenticationMethod, ListUserAuthenticationMethodsOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of authentication methods associated with a specified user.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0. Default is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Default is 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[UserAuthenticationMethod, ListUserAuthenticationMethodsOffsetPaginatedResponseContent]
+ The authentication methods for the user were retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserAuthenticationMethodsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserAuthenticationMethodsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.authenticators
+ _has_next = True
+ _get_next = lambda: self.list(
+ id,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ id: str,
+ *,
+ type: CreatedUserAuthenticationMethodTypeEnum,
+ name: typing.Optional[str] = OMIT,
+ totp_secret: typing.Optional[str] = OMIT,
+ phone_number: typing.Optional[str] = OMIT,
+ email: typing.Optional[str] = OMIT,
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = OMIT,
+ key_id: typing.Optional[str] = OMIT,
+ public_key: typing.Optional[str] = OMIT,
+ relying_party_identifier: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateUserAuthenticationMethodResponseContent]:
+ """
+ Create an authentication method. Authentication methods created via this endpoint will be auto confirmed and should already have verification completed.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user to whom the new authentication method will be assigned.
+
+ type : CreatedUserAuthenticationMethodTypeEnum
+
+ name : typing.Optional[str]
+ A human-readable label to identify the authentication method.
+
+ totp_secret : typing.Optional[str]
+ Base32 encoded secret for TOTP generation.
+
+ phone_number : typing.Optional[str]
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+
+ email : typing.Optional[str]
+ Applies to email authentication methods only. The email address used to send verification messages.
+
+ preferred_authentication_method : typing.Optional[PreferredAuthenticationMethodEnum]
+
+ key_id : typing.Optional[str]
+ Applies to webauthn authentication methods only. The id of the credential.
+
+ public_key : typing.Optional[str]
+ Applies to webauthn authentication methods only. The public key, which is encoded as base64.
+
+ relying_party_identifier : typing.Optional[str]
+ Applies to webauthn authentication methods only. The relying party identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateUserAuthenticationMethodResponseContent]
+ Authentication method created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods",
+ method="POST",
+ json={
+ "type": type,
+ "name": name,
+ "totp_secret": totp_secret,
+ "phone_number": phone_number,
+ "email": email,
+ "preferred_authentication_method": preferred_authentication_method,
+ "key_id": key_id,
+ "public_key": public_key,
+ "relying_party_identifier": relying_party_identifier,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateUserAuthenticationMethodResponseContent,
+ parse_obj_as(
+ type_=CreateUserAuthenticationMethodResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def set(
+ self,
+ id: str,
+ *,
+ request: SetUserAuthenticationMethodsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[typing.List[SetUserAuthenticationMethodResponseContent]]:
+ """
+ Replace the specified user authentication methods with supplied values.
+
+ Note: Authentication methods supplied through this action do not iterate on existing methods. Instead, any methods passed will overwrite the user’s existing settings.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ request : SetUserAuthenticationMethodsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[SetUserAuthenticationMethodResponseContent]]
+ All authentication methods successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods",
+ method="PUT",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=SetUserAuthenticationMethodsRequestContent, direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[SetUserAuthenticationMethodResponseContent],
+ parse_obj_as(
+ type_=typing.List[SetUserAuthenticationMethodResponseContent], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete_all(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Remove all authentication methods (i.e., enrolled MFA factors) from the specified user account. This action cannot be undone.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, authentication_method_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetUserAuthenticationMethodResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication methods in question.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetUserAuthenticationMethodResponseContent]
+ Authentication method retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods/{jsonable_encoder(authentication_method_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUserAuthenticationMethodResponseContent,
+ parse_obj_as(
+ type_=GetUserAuthenticationMethodResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, id: str, authentication_method_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Remove the authentication method with the given ID from the specified user. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication method to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods/{jsonable_encoder(authentication_method_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ authentication_method_id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateUserAuthenticationMethodResponseContent]:
+ """
+ Modify the authentication method with the given ID from the specified user. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication method to update.
+
+ name : typing.Optional[str]
+ A human-readable label to identify the authentication method.
+
+ preferred_authentication_method : typing.Optional[PreferredAuthenticationMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateUserAuthenticationMethodResponseContent]
+ Authentication method updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods/{jsonable_encoder(authentication_method_id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "preferred_authentication_method": preferred_authentication_method,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateUserAuthenticationMethodResponseContent,
+ parse_obj_as(
+ type_=UpdateUserAuthenticationMethodResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawAuthenticationMethodsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[UserAuthenticationMethod, ListUserAuthenticationMethodsOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of authentication methods associated with a specified user.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0. Default is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page. Default is 50.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[UserAuthenticationMethod, ListUserAuthenticationMethodsOffsetPaginatedResponseContent]
+ The authentication methods for the user were retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserAuthenticationMethodsOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserAuthenticationMethodsOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.authenticators
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ id,
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ id: str,
+ *,
+ type: CreatedUserAuthenticationMethodTypeEnum,
+ name: typing.Optional[str] = OMIT,
+ totp_secret: typing.Optional[str] = OMIT,
+ phone_number: typing.Optional[str] = OMIT,
+ email: typing.Optional[str] = OMIT,
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = OMIT,
+ key_id: typing.Optional[str] = OMIT,
+ public_key: typing.Optional[str] = OMIT,
+ relying_party_identifier: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateUserAuthenticationMethodResponseContent]:
+ """
+ Create an authentication method. Authentication methods created via this endpoint will be auto confirmed and should already have verification completed.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user to whom the new authentication method will be assigned.
+
+ type : CreatedUserAuthenticationMethodTypeEnum
+
+ name : typing.Optional[str]
+ A human-readable label to identify the authentication method.
+
+ totp_secret : typing.Optional[str]
+ Base32 encoded secret for TOTP generation.
+
+ phone_number : typing.Optional[str]
+ Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice.
+
+ email : typing.Optional[str]
+ Applies to email authentication methods only. The email address used to send verification messages.
+
+ preferred_authentication_method : typing.Optional[PreferredAuthenticationMethodEnum]
+
+ key_id : typing.Optional[str]
+ Applies to webauthn authentication methods only. The id of the credential.
+
+ public_key : typing.Optional[str]
+ Applies to webauthn authentication methods only. The public key, which is encoded as base64.
+
+ relying_party_identifier : typing.Optional[str]
+ Applies to webauthn authentication methods only. The relying party identifier.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateUserAuthenticationMethodResponseContent]
+ Authentication method created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods",
+ method="POST",
+ json={
+ "type": type,
+ "name": name,
+ "totp_secret": totp_secret,
+ "phone_number": phone_number,
+ "email": email,
+ "preferred_authentication_method": preferred_authentication_method,
+ "key_id": key_id,
+ "public_key": public_key,
+ "relying_party_identifier": relying_party_identifier,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateUserAuthenticationMethodResponseContent,
+ parse_obj_as(
+ type_=CreateUserAuthenticationMethodResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def set(
+ self,
+ id: str,
+ *,
+ request: SetUserAuthenticationMethodsRequestContent,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[typing.List[SetUserAuthenticationMethodResponseContent]]:
+ """
+ Replace the specified user authentication methods with supplied values.
+
+ Note: Authentication methods supplied through this action do not iterate on existing methods. Instead, any methods passed will overwrite the user’s existing settings.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ request : SetUserAuthenticationMethodsRequestContent
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[SetUserAuthenticationMethodResponseContent]]
+ All authentication methods successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods",
+ method="PUT",
+ json=convert_and_respect_annotation_metadata(
+ object_=request, annotation=SetUserAuthenticationMethodsRequestContent, direction="write"
+ ),
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[SetUserAuthenticationMethodResponseContent],
+ parse_obj_as(
+ type_=typing.List[SetUserAuthenticationMethodResponseContent], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete_all(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Remove all authentication methods (i.e., enrolled MFA factors) from the specified user account. This action cannot be undone.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, authentication_method_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetUserAuthenticationMethodResponseContent]:
+ """
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication methods in question.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetUserAuthenticationMethodResponseContent]
+ Authentication method retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods/{jsonable_encoder(authentication_method_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUserAuthenticationMethodResponseContent,
+ parse_obj_as(
+ type_=GetUserAuthenticationMethodResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, authentication_method_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Remove the authentication method with the given ID from the specified user. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication method to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods/{jsonable_encoder(authentication_method_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ authentication_method_id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ preferred_authentication_method: typing.Optional[PreferredAuthenticationMethodEnum] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateUserAuthenticationMethodResponseContent]:
+ """
+ Modify the authentication method with the given ID from the specified user. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ The ID of the user in question.
+
+ authentication_method_id : str
+ The ID of the authentication method to update.
+
+ name : typing.Optional[str]
+ A human-readable label to identify the authentication method.
+
+ preferred_authentication_method : typing.Optional[PreferredAuthenticationMethodEnum]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateUserAuthenticationMethodResponseContent]
+ Authentication method updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authentication-methods/{jsonable_encoder(authentication_method_id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "preferred_authentication_method": preferred_authentication_method,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateUserAuthenticationMethodResponseContent,
+ parse_obj_as(
+ type_=UpdateUserAuthenticationMethodResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/authenticators/__init__.py b/src/auth0/management/users/authenticators/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/authenticators/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/authenticators/client.py b/src/auth0/management/users/authenticators/client.py
new file mode 100644
index 00000000..c0999659
--- /dev/null
+++ b/src/auth0/management/users/authenticators/client.py
@@ -0,0 +1,107 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from .raw_client import AsyncRawAuthenticatorsClient, RawAuthenticatorsClient
+
+
+class AuthenticatorsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawAuthenticatorsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawAuthenticatorsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawAuthenticatorsClient
+ """
+ return self._raw_client
+
+ def delete_all(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Remove all authenticators registered to a given user ID, such as OTP, email, phone, and push-notification. This action cannot be undone. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.authenticators.delete_all(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete_all(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncAuthenticatorsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawAuthenticatorsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawAuthenticatorsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawAuthenticatorsClient
+ """
+ return self._raw_client
+
+ async def delete_all(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Remove all authenticators registered to a given user ID, such as OTP, email, phone, and push-notification. This action cannot be undone. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.authenticators.delete_all(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete_all(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/users/authenticators/raw_client.py b/src/auth0/management/users/authenticators/raw_client.py
new file mode 100644
index 00000000..2cfe6718
--- /dev/null
+++ b/src/auth0/management/users/authenticators/raw_client.py
@@ -0,0 +1,173 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+
+
+class RawAuthenticatorsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def delete_all(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Remove all authenticators registered to a given user ID, such as OTP, email, phone, and push-notification. This action cannot be undone. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authenticators",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawAuthenticatorsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def delete_all(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Remove all authenticators registered to a given user ID, such as OTP, email, phone, and push-notification. This action cannot be undone. For more information, review Manage Authentication Methods with Management API.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/authenticators",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/client.py b/src/auth0/management/users/client.py
new file mode 100644
index 00000000..49d464f3
--- /dev/null
+++ b/src/auth0/management/users/client.py
@@ -0,0 +1,1669 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.pagination import AsyncPager, SyncPager
+from ..core.request_options import RequestOptions
+from ..types.app_metadata import AppMetadata
+from ..types.create_user_response_content import CreateUserResponseContent
+from ..types.get_user_response_content import GetUserResponseContent
+from ..types.list_users_offset_paginated_response_content import ListUsersOffsetPaginatedResponseContent
+from ..types.regenerate_users_recovery_code_response_content import RegenerateUsersRecoveryCodeResponseContent
+from ..types.search_engine_versions_enum import SearchEngineVersionsEnum
+from ..types.update_user_response_content import UpdateUserResponseContent
+from ..types.user_metadata import UserMetadata
+from ..types.user_response_schema import UserResponseSchema
+from .raw_client import AsyncRawUsersClient, RawUsersClient
+
+if typing.TYPE_CHECKING:
+ from .authentication_methods.client import AsyncAuthenticationMethodsClient, AuthenticationMethodsClient
+ from .authenticators.client import AsyncAuthenticatorsClient, AuthenticatorsClient
+ from .connected_accounts.client import AsyncConnectedAccountsClient, ConnectedAccountsClient
+ from .enrollments.client import AsyncEnrollmentsClient, EnrollmentsClient
+ from .federated_connections_tokensets.client import (
+ AsyncFederatedConnectionsTokensetsClient,
+ FederatedConnectionsTokensetsClient,
+ )
+ from .identities.client import AsyncIdentitiesClient, IdentitiesClient
+ from .logs.client import AsyncLogsClient, LogsClient
+ from .multifactor.client import AsyncMultifactorClient, MultifactorClient
+ from .organizations.client import AsyncOrganizationsClient, OrganizationsClient
+ from .permissions.client import AsyncPermissionsClient, PermissionsClient
+ from .refresh_token.client import AsyncRefreshTokenClient, RefreshTokenClient
+ from .risk_assessments.client import AsyncRiskAssessmentsClient, RiskAssessmentsClient
+ from .roles.client import AsyncRolesClient, RolesClient
+ from .sessions.client import AsyncSessionsClient, SessionsClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class UsersClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawUsersClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._authentication_methods: typing.Optional[AuthenticationMethodsClient] = None
+ self._authenticators: typing.Optional[AuthenticatorsClient] = None
+ self._connected_accounts: typing.Optional[ConnectedAccountsClient] = None
+ self._enrollments: typing.Optional[EnrollmentsClient] = None
+ self._federated_connections_tokensets: typing.Optional[FederatedConnectionsTokensetsClient] = None
+ self._identities: typing.Optional[IdentitiesClient] = None
+ self._logs: typing.Optional[LogsClient] = None
+ self._multifactor: typing.Optional[MultifactorClient] = None
+ self._organizations: typing.Optional[OrganizationsClient] = None
+ self._permissions: typing.Optional[PermissionsClient] = None
+ self._risk_assessments: typing.Optional[RiskAssessmentsClient] = None
+ self._roles: typing.Optional[RolesClient] = None
+ self._refresh_token: typing.Optional[RefreshTokenClient] = None
+ self._sessions: typing.Optional[SessionsClient] = None
+
+ @property
+ def with_raw_response(self) -> RawUsersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawUsersClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ sort: typing.Optional[str] = None,
+ connection: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ q: typing.Optional[str] = None,
+ search_engine: typing.Optional[SearchEngineVersionsEnum] = None,
+ primary_order: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[UserResponseSchema, ListUsersOffsetPaginatedResponseContent]:
+ """
+ Retrieve details of users. It is possible to:
+
+ - Specify a search criteria for users
+ - Sort the users to be returned
+ - Select the fields to be returned
+ - Specify the number of users to retrieve per page and the page index
+
+ The q query parameter can be used to get users that match the specified criteria using query string syntax.
+
+ Learn more about searching for users.
+
+ Read about best practices when working with the API endpoints for retrieving users.
+
+ Auth0 limits the number of users you can return. If you exceed this threshold, please redefine your search, use the export job, or the User Import / Export extension.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1
+
+ connection : typing.Optional[str]
+ Connection filter. Only applies when using search_engine=v1. To filter by connection with search_engine=v2|v3, use q=identities.connection:"connection_name"
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ q : typing.Optional[str]
+ Query in Lucene query string syntax. Some query types cannot be used on metadata fields, for details see Searchable Fields.
+
+ search_engine : typing.Optional[SearchEngineVersionsEnum]
+ The version of the search engine
+
+ primary_order : typing.Optional[bool]
+ If true (default), results are returned in a deterministic order. If false, results may be returned in a non-deterministic order, which can enhance performance for complex queries targeting a small number of users. Set to false only when consistent ordering and pagination is not required.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[UserResponseSchema, ListUsersOffsetPaginatedResponseContent]
+ Users successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.users.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ sort="sort",
+ connection="connection",
+ fields="fields",
+ include_fields=True,
+ q="q",
+ search_engine="v1",
+ primary_order=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ sort=sort,
+ connection=connection,
+ fields=fields,
+ include_fields=include_fields,
+ q=q,
+ search_engine=search_engine,
+ primary_order=primary_order,
+ request_options=request_options,
+ )
+
+ def create(
+ self,
+ *,
+ connection: str = "Initial-Connection",
+ email: typing.Optional[str] = "john.doe@gmail.com",
+ phone_number: typing.Optional[str] = "+199999999999999",
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ blocked: typing.Optional[bool] = False,
+ email_verified: typing.Optional[bool] = False,
+ phone_verified: typing.Optional[bool] = False,
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ given_name: typing.Optional[str] = "John",
+ family_name: typing.Optional[str] = "Doe",
+ name: typing.Optional[str] = "John Doe",
+ nickname: typing.Optional[str] = "Johnny",
+ picture: typing.Optional[
+ str
+ ] = "https://secure.gravatar.com/avatar/15626c5e0c749cb912f9d1ad48dba440?s=480&r=pg&d=https%3A%2F%2Fssl.gstatic.com%2Fs2%2Fprofiles%2Fimages%2Fsilhouette80.png",
+ user_id: typing.Optional[str] = "abc",
+ password: typing.Optional[str] = "secret",
+ verify_email: typing.Optional[bool] = False,
+ username: typing.Optional[str] = "johndoe",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateUserResponseContent:
+ """
+ Create a new user for a given database or passwordless connection.
+
+ Note: connection is required but other parameters such as email and password are dependent upon the type of connection.
+
+ Parameters
+ ----------
+ connection : str
+ Name of the connection this user should be created in.
+
+ email : typing.Optional[str]
+ The user's email.
+
+ phone_number : typing.Optional[str]
+ The user's phone number (following the E.164 recommendation).
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ blocked : typing.Optional[bool]
+ Whether this user was blocked by an administrator (true) or not (false).
+
+ email_verified : typing.Optional[bool]
+ Whether this email address is verified (true) or unverified (false). User will receive a verification email after creation if `email_verified` is false or not specified
+
+ phone_verified : typing.Optional[bool]
+ Whether this phone number has been verified (true) or not (false).
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ given_name : typing.Optional[str]
+ The user's given name(s).
+
+ family_name : typing.Optional[str]
+ The user's family name(s).
+
+ name : typing.Optional[str]
+ The user's full name.
+
+ nickname : typing.Optional[str]
+ The user's nickname.
+
+ picture : typing.Optional[str]
+ A URI pointing to the user's picture.
+
+ user_id : typing.Optional[str]
+ The external user's id provided by the identity provider.
+
+ password : typing.Optional[str]
+ Initial password for this user. Only valid for auth0 connection strategy.
+
+ verify_email : typing.Optional[bool]
+ Whether the user will receive a verification email after creation (true) or no email (false). Overrides behavior of `email_verified` parameter.
+
+ username : typing.Optional[str]
+ The user's username. Only valid if the connection requires a username.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateUserResponseContent
+ User successfully created.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.create(
+ connection="connection",
+ )
+ """
+ _response = self._raw_client.create(
+ connection=connection,
+ email=email,
+ phone_number=phone_number,
+ user_metadata=user_metadata,
+ blocked=blocked,
+ email_verified=email_verified,
+ phone_verified=phone_verified,
+ app_metadata=app_metadata,
+ given_name=given_name,
+ family_name=family_name,
+ name=name,
+ nickname=nickname,
+ picture=picture,
+ user_id=user_id,
+ password=password,
+ verify_email=verify_email,
+ username=username,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def list_users_by_email(
+ self,
+ *,
+ email: str,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> typing.List[UserResponseSchema]:
+ """
+ Find users by email. If Auth0 is the identity provider (idP), the email address associated with a user is saved in lower case, regardless of how you initially provided it.
+
+ For example, if you register a user as JohnSmith@example.com, Auth0 saves the user's email as johnsmith@example.com.
+
+ Therefore, when using this endpoint, make sure that you are searching for users via email addresses using the correct case.
+
+ Parameters
+ ----------
+ email : str
+ Email address to search for (case-sensitive).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[UserResponseSchema]
+ Users successfully searched.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.list_users_by_email(
+ fields="fields",
+ include_fields=True,
+ email="email",
+ )
+ """
+ _response = self._raw_client.list_users_by_email(
+ email=email, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetUserResponseContent:
+ """
+ Retrieve user details. A list of fields to include or exclude may also be specified. For more information, see Retrieve Users with the Get Users Endpoint.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUserResponseContent
+ User successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.get(
+ id="id",
+ fields="fields",
+ include_fields=True,
+ )
+ """
+ _response = self._raw_client.get(
+ id, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a user by user ID. This action cannot be undone. For Auth0 Dashboard instructions, see Delete Users.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ blocked: typing.Optional[bool] = False,
+ email_verified: typing.Optional[bool] = False,
+ email: typing.Optional[str] = "john.doe@gmail.com",
+ phone_number: typing.Optional[str] = "+199999999999999",
+ phone_verified: typing.Optional[bool] = False,
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ given_name: typing.Optional[str] = "John",
+ family_name: typing.Optional[str] = "Doe",
+ name: typing.Optional[str] = "John Doe",
+ nickname: typing.Optional[str] = "Johnny",
+ picture: typing.Optional[
+ str
+ ] = "https://secure.gravatar.com/avatar/15626c5e0c749cb912f9d1ad48dba440?s=480&r=pg&d=https%3A%2F%2Fssl.gstatic.com%2Fs2%2Fprofiles%2Fimages%2Fsilhouette80.png",
+ verify_email: typing.Optional[bool] = False,
+ verify_phone_number: typing.Optional[bool] = False,
+ password: typing.Optional[str] = "secret",
+ connection: typing.Optional[str] = "Initial-Connection",
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ username: typing.Optional[str] = "johndoe",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateUserResponseContent:
+ """
+ Update a user.
+
+ These are the attributes that can be updated at the root level:
+
+ user_metadata and app_metadata). These properties are merged instead of being replaced but be careful, the merge only occurs on the first level.email, email_verified, phone_number, phone_verified, username or password of a secondary identity, you need to specify the connection property too.email or phone_number you can specify, optionally, the client_id property.email_verified is not supported for enterprise and passwordless sms connections.blocked to false does not affect the user's blocked state from an excessive amount of incorrectly provided credentials. Use the "Unblock a user" endpoint from the "User Blocks" API to change the user's state.null as the value.{ "email_verified": true }
+
+ user_metadata:
+ { "user_metadata" : { "profileCode": 1479 } }
+
+ To add the field addresses the body to send should be:
+ { "user_metadata" : { "addresses": {"work_address": "100 Industrial Way"} }}
+
+ The modified object ends up with the following user_metadata property:{
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": { "work_address": "100 Industrial Way" }
+ }
+ }
+
+ "home_address": "742 Evergreen Terrace" (using the addresses property) we should send the whole addresses object. Since this is a first-level object, the object will be merged in, but its own properties will not be. The body to send should be:
+ {
+ "user_metadata": {
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+ }
+
+ The modified object ends up with the following user_metadata property:
+ {
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+ }
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to update.
+
+ blocked : typing.Optional[bool]
+ Whether this user was blocked by an administrator (true) or not (false).
+
+ email_verified : typing.Optional[bool]
+ Whether this email address is verified (true) or unverified (false). If set to false the user will not receive a verification email unless `verify_email` is set to true.
+
+ email : typing.Optional[str]
+ Email address of this user.
+
+ phone_number : typing.Optional[str]
+ The user's phone number (following the E.164 recommendation).
+
+ phone_verified : typing.Optional[bool]
+ Whether this phone number has been verified (true) or not (false).
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ given_name : typing.Optional[str]
+ Given name/first name/forename of this user.
+
+ family_name : typing.Optional[str]
+ Family name/last name/surname of this user.
+
+ name : typing.Optional[str]
+ Name of this user.
+
+ nickname : typing.Optional[str]
+ Preferred nickname or alias of this user.
+
+ picture : typing.Optional[str]
+ URL to picture, photo, or avatar of this user.
+
+ verify_email : typing.Optional[bool]
+ Whether this user will receive a verification email after creation (true) or no email (false). Overrides behavior of `email_verified` parameter.
+
+ verify_phone_number : typing.Optional[bool]
+ Whether this user will receive a text after changing the phone number (true) or no text (false). Only valid when changing phone number for SMS connections.
+
+ password : typing.Optional[str]
+ New password for this user. Only valid for database connections.
+
+ connection : typing.Optional[str]
+ Name of the connection to target for this user update.
+
+ client_id : typing.Optional[str]
+ Auth0 client ID. Only valid when updating email address.
+
+ username : typing.Optional[str]
+ The user's username. Only valid if the connection requires a username.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateUserResponseContent
+ User successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ blocked=blocked,
+ email_verified=email_verified,
+ email=email,
+ phone_number=phone_number,
+ phone_verified=phone_verified,
+ user_metadata=user_metadata,
+ app_metadata=app_metadata,
+ given_name=given_name,
+ family_name=family_name,
+ name=name,
+ nickname=nickname,
+ picture=picture,
+ verify_email=verify_email,
+ verify_phone_number=verify_phone_number,
+ password=password,
+ connection=connection,
+ client_id=client_id,
+ username=username,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def regenerate_recovery_code(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RegenerateUsersRecoveryCodeResponseContent:
+ """
+ Remove an existing multi-factor authentication (MFA) recovery code and generate a new one. If a user cannot access the original device or account used for MFA enrollment, they can use a recovery code to authenticate.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to regenerate a multi-factor authentication recovery code for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RegenerateUsersRecoveryCodeResponseContent
+ New recovery code successfully generated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.regenerate_recovery_code(
+ id="id",
+ )
+ """
+ _response = self._raw_client.regenerate_recovery_code(id, request_options=request_options)
+ return _response.data
+
+ def revoke_access(
+ self,
+ id: str,
+ *,
+ session_id: typing.Optional[str] = OMIT,
+ preserve_refresh_tokens: typing.Optional[bool] = False,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Revokes selected resources related to a user (sessions, refresh tokens, ...).
+
+ Parameters
+ ----------
+ id : str
+ ID of the user.
+
+ session_id : typing.Optional[str]
+ ID of the session to revoke.
+
+ preserve_refresh_tokens : typing.Optional[bool]
+ Whether to preserve the refresh tokens associated with the session.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.revoke_access(
+ id="id",
+ )
+ """
+ _response = self._raw_client.revoke_access(
+ id, session_id=session_id, preserve_refresh_tokens=preserve_refresh_tokens, request_options=request_options
+ )
+ return _response.data
+
+ @property
+ def authentication_methods(self):
+ if self._authentication_methods is None:
+ from .authentication_methods.client import AuthenticationMethodsClient # noqa: E402
+
+ self._authentication_methods = AuthenticationMethodsClient(client_wrapper=self._client_wrapper)
+ return self._authentication_methods
+
+ @property
+ def authenticators(self):
+ if self._authenticators is None:
+ from .authenticators.client import AuthenticatorsClient # noqa: E402
+
+ self._authenticators = AuthenticatorsClient(client_wrapper=self._client_wrapper)
+ return self._authenticators
+
+ @property
+ def connected_accounts(self):
+ if self._connected_accounts is None:
+ from .connected_accounts.client import ConnectedAccountsClient # noqa: E402
+
+ self._connected_accounts = ConnectedAccountsClient(client_wrapper=self._client_wrapper)
+ return self._connected_accounts
+
+ @property
+ def enrollments(self):
+ if self._enrollments is None:
+ from .enrollments.client import EnrollmentsClient # noqa: E402
+
+ self._enrollments = EnrollmentsClient(client_wrapper=self._client_wrapper)
+ return self._enrollments
+
+ @property
+ def federated_connections_tokensets(self):
+ if self._federated_connections_tokensets is None:
+ from .federated_connections_tokensets.client import FederatedConnectionsTokensetsClient # noqa: E402
+
+ self._federated_connections_tokensets = FederatedConnectionsTokensetsClient(
+ client_wrapper=self._client_wrapper
+ )
+ return self._federated_connections_tokensets
+
+ @property
+ def identities(self):
+ if self._identities is None:
+ from .identities.client import IdentitiesClient # noqa: E402
+
+ self._identities = IdentitiesClient(client_wrapper=self._client_wrapper)
+ return self._identities
+
+ @property
+ def logs(self):
+ if self._logs is None:
+ from .logs.client import LogsClient # noqa: E402
+
+ self._logs = LogsClient(client_wrapper=self._client_wrapper)
+ return self._logs
+
+ @property
+ def multifactor(self):
+ if self._multifactor is None:
+ from .multifactor.client import MultifactorClient # noqa: E402
+
+ self._multifactor = MultifactorClient(client_wrapper=self._client_wrapper)
+ return self._multifactor
+
+ @property
+ def organizations(self):
+ if self._organizations is None:
+ from .organizations.client import OrganizationsClient # noqa: E402
+
+ self._organizations = OrganizationsClient(client_wrapper=self._client_wrapper)
+ return self._organizations
+
+ @property
+ def permissions(self):
+ if self._permissions is None:
+ from .permissions.client import PermissionsClient # noqa: E402
+
+ self._permissions = PermissionsClient(client_wrapper=self._client_wrapper)
+ return self._permissions
+
+ @property
+ def risk_assessments(self):
+ if self._risk_assessments is None:
+ from .risk_assessments.client import RiskAssessmentsClient # noqa: E402
+
+ self._risk_assessments = RiskAssessmentsClient(client_wrapper=self._client_wrapper)
+ return self._risk_assessments
+
+ @property
+ def roles(self):
+ if self._roles is None:
+ from .roles.client import RolesClient # noqa: E402
+
+ self._roles = RolesClient(client_wrapper=self._client_wrapper)
+ return self._roles
+
+ @property
+ def refresh_token(self):
+ if self._refresh_token is None:
+ from .refresh_token.client import RefreshTokenClient # noqa: E402
+
+ self._refresh_token = RefreshTokenClient(client_wrapper=self._client_wrapper)
+ return self._refresh_token
+
+ @property
+ def sessions(self):
+ if self._sessions is None:
+ from .sessions.client import SessionsClient # noqa: E402
+
+ self._sessions = SessionsClient(client_wrapper=self._client_wrapper)
+ return self._sessions
+
+
+class AsyncUsersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawUsersClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._authentication_methods: typing.Optional[AsyncAuthenticationMethodsClient] = None
+ self._authenticators: typing.Optional[AsyncAuthenticatorsClient] = None
+ self._connected_accounts: typing.Optional[AsyncConnectedAccountsClient] = None
+ self._enrollments: typing.Optional[AsyncEnrollmentsClient] = None
+ self._federated_connections_tokensets: typing.Optional[AsyncFederatedConnectionsTokensetsClient] = None
+ self._identities: typing.Optional[AsyncIdentitiesClient] = None
+ self._logs: typing.Optional[AsyncLogsClient] = None
+ self._multifactor: typing.Optional[AsyncMultifactorClient] = None
+ self._organizations: typing.Optional[AsyncOrganizationsClient] = None
+ self._permissions: typing.Optional[AsyncPermissionsClient] = None
+ self._risk_assessments: typing.Optional[AsyncRiskAssessmentsClient] = None
+ self._roles: typing.Optional[AsyncRolesClient] = None
+ self._refresh_token: typing.Optional[AsyncRefreshTokenClient] = None
+ self._sessions: typing.Optional[AsyncSessionsClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawUsersClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawUsersClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ sort: typing.Optional[str] = None,
+ connection: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ q: typing.Optional[str] = None,
+ search_engine: typing.Optional[SearchEngineVersionsEnum] = None,
+ primary_order: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[UserResponseSchema, ListUsersOffsetPaginatedResponseContent]:
+ """
+ Retrieve details of users. It is possible to:
+
+ - Specify a search criteria for users
+ - Sort the users to be returned
+ - Select the fields to be returned
+ - Specify the number of users to retrieve per page and the page index
+
+ The q query parameter can be used to get users that match the specified criteria using query string syntax.
+
+ Learn more about searching for users.
+
+ Read about best practices when working with the API endpoints for retrieving users.
+
+ Auth0 limits the number of users you can return. If you exceed this threshold, please redefine your search, use the export job, or the User Import / Export extension.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1
+
+ connection : typing.Optional[str]
+ Connection filter. Only applies when using search_engine=v1. To filter by connection with search_engine=v2|v3, use q=identities.connection:"connection_name"
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ q : typing.Optional[str]
+ Query in Lucene query string syntax. Some query types cannot be used on metadata fields, for details see Searchable Fields.
+
+ search_engine : typing.Optional[SearchEngineVersionsEnum]
+ The version of the search engine
+
+ primary_order : typing.Optional[bool]
+ If true (default), results are returned in a deterministic order. If false, results may be returned in a non-deterministic order, which can enhance performance for complex queries targeting a small number of users. Set to false only when consistent ordering and pagination is not required.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[UserResponseSchema, ListUsersOffsetPaginatedResponseContent]
+ Users successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.users.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ sort="sort",
+ connection="connection",
+ fields="fields",
+ include_fields=True,
+ q="q",
+ search_engine="v1",
+ primary_order=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ page=page,
+ per_page=per_page,
+ include_totals=include_totals,
+ sort=sort,
+ connection=connection,
+ fields=fields,
+ include_fields=include_fields,
+ q=q,
+ search_engine=search_engine,
+ primary_order=primary_order,
+ request_options=request_options,
+ )
+
+ async def create(
+ self,
+ *,
+ connection: str = "Initial-Connection",
+ email: typing.Optional[str] = "john.doe@gmail.com",
+ phone_number: typing.Optional[str] = "+199999999999999",
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ blocked: typing.Optional[bool] = False,
+ email_verified: typing.Optional[bool] = False,
+ phone_verified: typing.Optional[bool] = False,
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ given_name: typing.Optional[str] = "John",
+ family_name: typing.Optional[str] = "Doe",
+ name: typing.Optional[str] = "John Doe",
+ nickname: typing.Optional[str] = "Johnny",
+ picture: typing.Optional[
+ str
+ ] = "https://secure.gravatar.com/avatar/15626c5e0c749cb912f9d1ad48dba440?s=480&r=pg&d=https%3A%2F%2Fssl.gstatic.com%2Fs2%2Fprofiles%2Fimages%2Fsilhouette80.png",
+ user_id: typing.Optional[str] = "abc",
+ password: typing.Optional[str] = "secret",
+ verify_email: typing.Optional[bool] = False,
+ username: typing.Optional[str] = "johndoe",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateUserResponseContent:
+ """
+ Create a new user for a given database or passwordless connection.
+
+ Note: connection is required but other parameters such as email and password are dependent upon the type of connection.
+
+ Parameters
+ ----------
+ connection : str
+ Name of the connection this user should be created in.
+
+ email : typing.Optional[str]
+ The user's email.
+
+ phone_number : typing.Optional[str]
+ The user's phone number (following the E.164 recommendation).
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ blocked : typing.Optional[bool]
+ Whether this user was blocked by an administrator (true) or not (false).
+
+ email_verified : typing.Optional[bool]
+ Whether this email address is verified (true) or unverified (false). User will receive a verification email after creation if `email_verified` is false or not specified
+
+ phone_verified : typing.Optional[bool]
+ Whether this phone number has been verified (true) or not (false).
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ given_name : typing.Optional[str]
+ The user's given name(s).
+
+ family_name : typing.Optional[str]
+ The user's family name(s).
+
+ name : typing.Optional[str]
+ The user's full name.
+
+ nickname : typing.Optional[str]
+ The user's nickname.
+
+ picture : typing.Optional[str]
+ A URI pointing to the user's picture.
+
+ user_id : typing.Optional[str]
+ The external user's id provided by the identity provider.
+
+ password : typing.Optional[str]
+ Initial password for this user. Only valid for auth0 connection strategy.
+
+ verify_email : typing.Optional[bool]
+ Whether the user will receive a verification email after creation (true) or no email (false). Overrides behavior of `email_verified` parameter.
+
+ username : typing.Optional[str]
+ The user's username. Only valid if the connection requires a username.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateUserResponseContent
+ User successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.create(
+ connection="connection",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ connection=connection,
+ email=email,
+ phone_number=phone_number,
+ user_metadata=user_metadata,
+ blocked=blocked,
+ email_verified=email_verified,
+ phone_verified=phone_verified,
+ app_metadata=app_metadata,
+ given_name=given_name,
+ family_name=family_name,
+ name=name,
+ nickname=nickname,
+ picture=picture,
+ user_id=user_id,
+ password=password,
+ verify_email=verify_email,
+ username=username,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def list_users_by_email(
+ self,
+ *,
+ email: str,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> typing.List[UserResponseSchema]:
+ """
+ Find users by email. If Auth0 is the identity provider (idP), the email address associated with a user is saved in lower case, regardless of how you initially provided it.
+
+ For example, if you register a user as JohnSmith@example.com, Auth0 saves the user's email as johnsmith@example.com.
+
+ Therefore, when using this endpoint, make sure that you are searching for users via email addresses using the correct case.
+
+ Parameters
+ ----------
+ email : str
+ Email address to search for (case-sensitive).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[UserResponseSchema]
+ Users successfully searched.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.list_users_by_email(
+ fields="fields",
+ include_fields=True,
+ email="email",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list_users_by_email(
+ email=email, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ async def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetUserResponseContent:
+ """
+ Retrieve user details. A list of fields to include or exclude may also be specified. For more information, see Retrieve Users with the Get Users Endpoint.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetUserResponseContent
+ User successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.get(
+ id="id",
+ fields="fields",
+ include_fields=True,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(
+ id, fields=fields, include_fields=include_fields, request_options=request_options
+ )
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a user by user ID. This action cannot be undone. For Auth0 Dashboard instructions, see Delete Users.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ blocked: typing.Optional[bool] = False,
+ email_verified: typing.Optional[bool] = False,
+ email: typing.Optional[str] = "john.doe@gmail.com",
+ phone_number: typing.Optional[str] = "+199999999999999",
+ phone_verified: typing.Optional[bool] = False,
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ given_name: typing.Optional[str] = "John",
+ family_name: typing.Optional[str] = "Doe",
+ name: typing.Optional[str] = "John Doe",
+ nickname: typing.Optional[str] = "Johnny",
+ picture: typing.Optional[
+ str
+ ] = "https://secure.gravatar.com/avatar/15626c5e0c749cb912f9d1ad48dba440?s=480&r=pg&d=https%3A%2F%2Fssl.gstatic.com%2Fs2%2Fprofiles%2Fimages%2Fsilhouette80.png",
+ verify_email: typing.Optional[bool] = False,
+ verify_phone_number: typing.Optional[bool] = False,
+ password: typing.Optional[str] = "secret",
+ connection: typing.Optional[str] = "Initial-Connection",
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ username: typing.Optional[str] = "johndoe",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateUserResponseContent:
+ """
+ Update a user.
+
+ These are the attributes that can be updated at the root level:
+
+ user_metadata and app_metadata). These properties are merged instead of being replaced but be careful, the merge only occurs on the first level.email, email_verified, phone_number, phone_verified, username or password of a secondary identity, you need to specify the connection property too.email or phone_number you can specify, optionally, the client_id property.email_verified is not supported for enterprise and passwordless sms connections.blocked to false does not affect the user's blocked state from an excessive amount of incorrectly provided credentials. Use the "Unblock a user" endpoint from the "User Blocks" API to change the user's state.null as the value.{ "email_verified": true }
+
+ user_metadata:
+ { "user_metadata" : { "profileCode": 1479 } }
+
+ To add the field addresses the body to send should be:
+ { "user_metadata" : { "addresses": {"work_address": "100 Industrial Way"} }}
+
+ The modified object ends up with the following user_metadata property:{
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": { "work_address": "100 Industrial Way" }
+ }
+ }
+
+ "home_address": "742 Evergreen Terrace" (using the addresses property) we should send the whole addresses object. Since this is a first-level object, the object will be merged in, but its own properties will not be. The body to send should be:
+ {
+ "user_metadata": {
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+ }
+
+ The modified object ends up with the following user_metadata property:
+ {
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+ }
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to update.
+
+ blocked : typing.Optional[bool]
+ Whether this user was blocked by an administrator (true) or not (false).
+
+ email_verified : typing.Optional[bool]
+ Whether this email address is verified (true) or unverified (false). If set to false the user will not receive a verification email unless `verify_email` is set to true.
+
+ email : typing.Optional[str]
+ Email address of this user.
+
+ phone_number : typing.Optional[str]
+ The user's phone number (following the E.164 recommendation).
+
+ phone_verified : typing.Optional[bool]
+ Whether this phone number has been verified (true) or not (false).
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ given_name : typing.Optional[str]
+ Given name/first name/forename of this user.
+
+ family_name : typing.Optional[str]
+ Family name/last name/surname of this user.
+
+ name : typing.Optional[str]
+ Name of this user.
+
+ nickname : typing.Optional[str]
+ Preferred nickname or alias of this user.
+
+ picture : typing.Optional[str]
+ URL to picture, photo, or avatar of this user.
+
+ verify_email : typing.Optional[bool]
+ Whether this user will receive a verification email after creation (true) or no email (false). Overrides behavior of `email_verified` parameter.
+
+ verify_phone_number : typing.Optional[bool]
+ Whether this user will receive a text after changing the phone number (true) or no text (false). Only valid when changing phone number for SMS connections.
+
+ password : typing.Optional[str]
+ New password for this user. Only valid for database connections.
+
+ connection : typing.Optional[str]
+ Name of the connection to target for this user update.
+
+ client_id : typing.Optional[str]
+ Auth0 client ID. Only valid when updating email address.
+
+ username : typing.Optional[str]
+ The user's username. Only valid if the connection requires a username.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateUserResponseContent
+ User successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ blocked=blocked,
+ email_verified=email_verified,
+ email=email,
+ phone_number=phone_number,
+ phone_verified=phone_verified,
+ user_metadata=user_metadata,
+ app_metadata=app_metadata,
+ given_name=given_name,
+ family_name=family_name,
+ name=name,
+ nickname=nickname,
+ picture=picture,
+ verify_email=verify_email,
+ verify_phone_number=verify_phone_number,
+ password=password,
+ connection=connection,
+ client_id=client_id,
+ username=username,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def regenerate_recovery_code(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RegenerateUsersRecoveryCodeResponseContent:
+ """
+ Remove an existing multi-factor authentication (MFA) recovery code and generate a new one. If a user cannot access the original device or account used for MFA enrollment, they can use a recovery code to authenticate.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to regenerate a multi-factor authentication recovery code for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RegenerateUsersRecoveryCodeResponseContent
+ New recovery code successfully generated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.regenerate_recovery_code(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.regenerate_recovery_code(id, request_options=request_options)
+ return _response.data
+
+ async def revoke_access(
+ self,
+ id: str,
+ *,
+ session_id: typing.Optional[str] = OMIT,
+ preserve_refresh_tokens: typing.Optional[bool] = False,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Revokes selected resources related to a user (sessions, refresh tokens, ...).
+
+ Parameters
+ ----------
+ id : str
+ ID of the user.
+
+ session_id : typing.Optional[str]
+ ID of the session to revoke.
+
+ preserve_refresh_tokens : typing.Optional[bool]
+ Whether to preserve the refresh tokens associated with the session.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.revoke_access(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.revoke_access(
+ id, session_id=session_id, preserve_refresh_tokens=preserve_refresh_tokens, request_options=request_options
+ )
+ return _response.data
+
+ @property
+ def authentication_methods(self):
+ if self._authentication_methods is None:
+ from .authentication_methods.client import AsyncAuthenticationMethodsClient # noqa: E402
+
+ self._authentication_methods = AsyncAuthenticationMethodsClient(client_wrapper=self._client_wrapper)
+ return self._authentication_methods
+
+ @property
+ def authenticators(self):
+ if self._authenticators is None:
+ from .authenticators.client import AsyncAuthenticatorsClient # noqa: E402
+
+ self._authenticators = AsyncAuthenticatorsClient(client_wrapper=self._client_wrapper)
+ return self._authenticators
+
+ @property
+ def connected_accounts(self):
+ if self._connected_accounts is None:
+ from .connected_accounts.client import AsyncConnectedAccountsClient # noqa: E402
+
+ self._connected_accounts = AsyncConnectedAccountsClient(client_wrapper=self._client_wrapper)
+ return self._connected_accounts
+
+ @property
+ def enrollments(self):
+ if self._enrollments is None:
+ from .enrollments.client import AsyncEnrollmentsClient # noqa: E402
+
+ self._enrollments = AsyncEnrollmentsClient(client_wrapper=self._client_wrapper)
+ return self._enrollments
+
+ @property
+ def federated_connections_tokensets(self):
+ if self._federated_connections_tokensets is None:
+ from .federated_connections_tokensets.client import AsyncFederatedConnectionsTokensetsClient # noqa: E402
+
+ self._federated_connections_tokensets = AsyncFederatedConnectionsTokensetsClient(
+ client_wrapper=self._client_wrapper
+ )
+ return self._federated_connections_tokensets
+
+ @property
+ def identities(self):
+ if self._identities is None:
+ from .identities.client import AsyncIdentitiesClient # noqa: E402
+
+ self._identities = AsyncIdentitiesClient(client_wrapper=self._client_wrapper)
+ return self._identities
+
+ @property
+ def logs(self):
+ if self._logs is None:
+ from .logs.client import AsyncLogsClient # noqa: E402
+
+ self._logs = AsyncLogsClient(client_wrapper=self._client_wrapper)
+ return self._logs
+
+ @property
+ def multifactor(self):
+ if self._multifactor is None:
+ from .multifactor.client import AsyncMultifactorClient # noqa: E402
+
+ self._multifactor = AsyncMultifactorClient(client_wrapper=self._client_wrapper)
+ return self._multifactor
+
+ @property
+ def organizations(self):
+ if self._organizations is None:
+ from .organizations.client import AsyncOrganizationsClient # noqa: E402
+
+ self._organizations = AsyncOrganizationsClient(client_wrapper=self._client_wrapper)
+ return self._organizations
+
+ @property
+ def permissions(self):
+ if self._permissions is None:
+ from .permissions.client import AsyncPermissionsClient # noqa: E402
+
+ self._permissions = AsyncPermissionsClient(client_wrapper=self._client_wrapper)
+ return self._permissions
+
+ @property
+ def risk_assessments(self):
+ if self._risk_assessments is None:
+ from .risk_assessments.client import AsyncRiskAssessmentsClient # noqa: E402
+
+ self._risk_assessments = AsyncRiskAssessmentsClient(client_wrapper=self._client_wrapper)
+ return self._risk_assessments
+
+ @property
+ def roles(self):
+ if self._roles is None:
+ from .roles.client import AsyncRolesClient # noqa: E402
+
+ self._roles = AsyncRolesClient(client_wrapper=self._client_wrapper)
+ return self._roles
+
+ @property
+ def refresh_token(self):
+ if self._refresh_token is None:
+ from .refresh_token.client import AsyncRefreshTokenClient # noqa: E402
+
+ self._refresh_token = AsyncRefreshTokenClient(client_wrapper=self._client_wrapper)
+ return self._refresh_token
+
+ @property
+ def sessions(self):
+ if self._sessions is None:
+ from .sessions.client import AsyncSessionsClient # noqa: E402
+
+ self._sessions = AsyncSessionsClient(client_wrapper=self._client_wrapper)
+ return self._sessions
diff --git a/src/auth0/management/users/connected_accounts/__init__.py b/src/auth0/management/users/connected_accounts/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/connected_accounts/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/connected_accounts/client.py b/src/auth0/management/users/connected_accounts/client.py
new file mode 100644
index 00000000..c54eeed8
--- /dev/null
+++ b/src/auth0/management/users/connected_accounts/client.py
@@ -0,0 +1,151 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.connected_account import ConnectedAccount
+from ...types.list_user_connected_accounts_response_content import ListUserConnectedAccountsResponseContent
+from .raw_client import AsyncRawConnectedAccountsClient, RawConnectedAccountsClient
+
+
+class ConnectedAccountsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawConnectedAccountsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawConnectedAccountsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawConnectedAccountsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectedAccount, ListUserConnectedAccountsResponseContent]:
+ """
+ Retrieve all connected accounts associated with the user.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list connected accounts for.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results to return. Defaults to 10 with a maximum of 20
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectedAccount, ListUserConnectedAccountsResponseContent]
+ Connected accounts successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.users.connected_accounts.list(
+ id="id",
+ from_="from",
+ take=1,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(id, from_=from_, take=take, request_options=request_options)
+
+
+class AsyncConnectedAccountsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawConnectedAccountsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawConnectedAccountsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawConnectedAccountsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectedAccount, ListUserConnectedAccountsResponseContent]:
+ """
+ Retrieve all connected accounts associated with the user.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list connected accounts for.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results to return. Defaults to 10 with a maximum of 20
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectedAccount, ListUserConnectedAccountsResponseContent]
+ Connected accounts successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.users.connected_accounts.list(
+ id="id",
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(id, from_=from_, take=take, request_options=request_options)
diff --git a/src/auth0/management/users/connected_accounts/raw_client.py b/src/auth0/management/users/connected_accounts/raw_client.py
new file mode 100644
index 00000000..27342c19
--- /dev/null
+++ b/src/auth0/management/users/connected_accounts/raw_client.py
@@ -0,0 +1,244 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.connected_account import ConnectedAccount
+from ...types.list_user_connected_accounts_response_content import ListUserConnectedAccountsResponseContent
+
+
+class RawConnectedAccountsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[ConnectedAccount, ListUserConnectedAccountsResponseContent]:
+ """
+ Retrieve all connected accounts associated with the user.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list connected accounts for.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results to return. Defaults to 10 with a maximum of 20
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[ConnectedAccount, ListUserConnectedAccountsResponseContent]
+ Connected accounts successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/connected-accounts",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserConnectedAccountsResponseContent,
+ parse_obj_as(
+ type_=ListUserConnectedAccountsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.connected_accounts
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawConnectedAccountsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[ConnectedAccount, ListUserConnectedAccountsResponseContent]:
+ """
+ Retrieve all connected accounts associated with the user.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list connected accounts for.
+
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results to return. Defaults to 10 with a maximum of 20
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[ConnectedAccount, ListUserConnectedAccountsResponseContent]
+ Connected accounts successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/connected-accounts",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserConnectedAccountsResponseContent,
+ parse_obj_as(
+ type_=ListUserConnectedAccountsResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.connected_accounts
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/enrollments/__init__.py b/src/auth0/management/users/enrollments/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/enrollments/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/enrollments/client.py b/src/auth0/management/users/enrollments/client.py
new file mode 100644
index 00000000..3e83529a
--- /dev/null
+++ b/src/auth0/management/users/enrollments/client.py
@@ -0,0 +1,112 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.users_enrollment import UsersEnrollment
+from .raw_client import AsyncRawEnrollmentsClient, RawEnrollmentsClient
+
+
+class EnrollmentsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawEnrollmentsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawEnrollmentsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawEnrollmentsClient
+ """
+ return self._raw_client
+
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[UsersEnrollment]:
+ """
+ Retrieve the first multi-factor authentication enrollment that a specific user has confirmed.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list enrollments for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[UsersEnrollment]
+ Enrollments successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.enrollments.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+
+class AsyncEnrollmentsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawEnrollmentsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawEnrollmentsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawEnrollmentsClient
+ """
+ return self._raw_client
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[UsersEnrollment]:
+ """
+ Retrieve the first multi-factor authentication enrollment that a specific user has confirmed.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list enrollments for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[UsersEnrollment]
+ Enrollments successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.enrollments.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/users/enrollments/raw_client.py b/src/auth0/management/users/enrollments/raw_client.py
new file mode 100644
index 00000000..69f7a256
--- /dev/null
+++ b/src/auth0/management/users/enrollments/raw_client.py
@@ -0,0 +1,215 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.users_enrollment import UsersEnrollment
+
+
+class RawEnrollmentsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[typing.List[UsersEnrollment]]:
+ """
+ Retrieve the first multi-factor authentication enrollment that a specific user has confirmed.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list enrollments for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[UsersEnrollment]]
+ Enrollments successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/enrollments",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[UsersEnrollment],
+ parse_obj_as(
+ type_=typing.List[UsersEnrollment], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawEnrollmentsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[typing.List[UsersEnrollment]]:
+ """
+ Retrieve the first multi-factor authentication enrollment that a specific user has confirmed.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list enrollments for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[UsersEnrollment]]
+ Enrollments successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/enrollments",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[UsersEnrollment],
+ parse_obj_as(
+ type_=typing.List[UsersEnrollment], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/federated_connections_tokensets/__init__.py b/src/auth0/management/users/federated_connections_tokensets/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/federated_connections_tokensets/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/federated_connections_tokensets/client.py b/src/auth0/management/users/federated_connections_tokensets/client.py
new file mode 100644
index 00000000..613347ef
--- /dev/null
+++ b/src/auth0/management/users/federated_connections_tokensets/client.py
@@ -0,0 +1,188 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.federated_connection_token_set import FederatedConnectionTokenSet
+from .raw_client import AsyncRawFederatedConnectionsTokensetsClient, RawFederatedConnectionsTokensetsClient
+
+
+class FederatedConnectionsTokensetsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawFederatedConnectionsTokensetsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawFederatedConnectionsTokensetsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawFederatedConnectionsTokensetsClient
+ """
+ return self._raw_client
+
+ def list(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[FederatedConnectionTokenSet]:
+ """
+ List active federated connections tokensets for a provided user
+
+ Parameters
+ ----------
+ id : str
+ User identifier
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[FederatedConnectionTokenSet]
+ Flows successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.federated_connections_tokensets.list(
+ id="id",
+ )
+ """
+ _response = self._raw_client.list(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, tokenset_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+ Id of the user that owns the tokenset
+
+ tokenset_id : str
+ The tokenset id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.federated_connections_tokensets.delete(
+ id="id",
+ tokenset_id="tokenset_id",
+ )
+ """
+ _response = self._raw_client.delete(id, tokenset_id, request_options=request_options)
+ return _response.data
+
+
+class AsyncFederatedConnectionsTokensetsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawFederatedConnectionsTokensetsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawFederatedConnectionsTokensetsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawFederatedConnectionsTokensetsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[FederatedConnectionTokenSet]:
+ """
+ List active federated connections tokensets for a provided user
+
+ Parameters
+ ----------
+ id : str
+ User identifier
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[FederatedConnectionTokenSet]
+ Flows successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.federated_connections_tokensets.list(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(id, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self, id: str, tokenset_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Parameters
+ ----------
+ id : str
+ Id of the user that owns the tokenset
+
+ tokenset_id : str
+ The tokenset id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.federated_connections_tokensets.delete(
+ id="id",
+ tokenset_id="tokenset_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, tokenset_id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/users/federated_connections_tokensets/raw_client.py b/src/auth0/management/users/federated_connections_tokensets/raw_client.py
new file mode 100644
index 00000000..ed6765a5
--- /dev/null
+++ b/src/auth0/management/users/federated_connections_tokensets/raw_client.py
@@ -0,0 +1,345 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.federated_connection_token_set import FederatedConnectionTokenSet
+
+
+class RawFederatedConnectionsTokensetsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[typing.List[FederatedConnectionTokenSet]]:
+ """
+ List active federated connections tokensets for a provided user
+
+ Parameters
+ ----------
+ id : str
+ User identifier
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[FederatedConnectionTokenSet]]
+ Flows successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/federated-connections-tokensets",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[FederatedConnectionTokenSet],
+ parse_obj_as(
+ type_=typing.List[FederatedConnectionTokenSet], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, id: str, tokenset_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+ Id of the user that owns the tokenset
+
+ tokenset_id : str
+ The tokenset id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/federated-connections-tokensets/{jsonable_encoder(tokenset_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawFederatedConnectionsTokensetsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[typing.List[FederatedConnectionTokenSet]]:
+ """
+ List active federated connections tokensets for a provided user
+
+ Parameters
+ ----------
+ id : str
+ User identifier
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[FederatedConnectionTokenSet]]
+ Flows successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/federated-connections-tokensets",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[FederatedConnectionTokenSet],
+ parse_obj_as(
+ type_=typing.List[FederatedConnectionTokenSet], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, tokenset_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Parameters
+ ----------
+ id : str
+ Id of the user that owns the tokenset
+
+ tokenset_id : str
+ The tokenset id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/federated-connections-tokensets/{jsonable_encoder(tokenset_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/identities/__init__.py b/src/auth0/management/users/identities/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/identities/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/identities/client.py b/src/auth0/management/users/identities/client.py
new file mode 100644
index 00000000..11b91cea
--- /dev/null
+++ b/src/auth0/management/users/identities/client.py
@@ -0,0 +1,326 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.delete_user_identity_response_content import DeleteUserIdentityResponseContent
+from ...types.user_id import UserId
+from ...types.user_identity import UserIdentity
+from ...types.user_identity_provider_enum import UserIdentityProviderEnum
+from .raw_client import AsyncRawIdentitiesClient, RawIdentitiesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class IdentitiesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawIdentitiesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawIdentitiesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawIdentitiesClient
+ """
+ return self._raw_client
+
+ def link(
+ self,
+ id: str,
+ *,
+ provider: typing.Optional[UserIdentityProviderEnum] = OMIT,
+ connection_id: typing.Optional[str] = OMIT,
+ user_id: typing.Optional[UserId] = OMIT,
+ link_with: typing.Optional[str] = "{SECONDARY_ACCOUNT_JWT}",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> typing.List[UserIdentity]:
+ """
+ Link two user accounts together forming a primary and secondary relationship. On successful linking, the endpoint returns the new array of the primary account identities.
+
+ Note: There are two ways of invoking the endpoint:
+
+ update:current_user_identities scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer PRIMARY_ACCOUNT_JWT"
+ {
+ "link_with": "SECONDARY_ACCOUNT_JWT"
+ }
+
+ In this case, only the link_with param is required in the body, which also contains the JWT obtained upon the secondary account's authentication.
+ update:users scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer YOUR_API_V2_TOKEN"
+ {
+ "provider": "SECONDARY_ACCOUNT_PROVIDER",
+ "connection_id": "SECONDARY_ACCOUNT_CONNECTION_ID(OPTIONAL)",
+ "user_id": "SECONDARY_ACCOUNT_USER_ID"
+ }
+
+ In this case you need to send provider and user_id in the body. Optionally you can also send the connection_id param which is suitable for identifying a particular database connection for the 'auth0' provider.
+ update:current_user_identities scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer PRIMARY_ACCOUNT_JWT"
+ {
+ "link_with": "SECONDARY_ACCOUNT_JWT"
+ }
+
+ In this case, only the link_with param is required in the body, which also contains the JWT obtained upon the secondary account's authentication.
+ update:users scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer YOUR_API_V2_TOKEN"
+ {
+ "provider": "SECONDARY_ACCOUNT_PROVIDER",
+ "connection_id": "SECONDARY_ACCOUNT_CONNECTION_ID(OPTIONAL)",
+ "user_id": "SECONDARY_ACCOUNT_USER_ID"
+ }
+
+ In this case you need to send provider and user_id in the body. Optionally you can also send the connection_id param which is suitable for identifying a particular database connection for the 'auth0' provider.
+ update:current_user_identities scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer PRIMARY_ACCOUNT_JWT"
+ {
+ "link_with": "SECONDARY_ACCOUNT_JWT"
+ }
+
+ In this case, only the link_with param is required in the body, which also contains the JWT obtained upon the secondary account's authentication.
+ update:users scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer YOUR_API_V2_TOKEN"
+ {
+ "provider": "SECONDARY_ACCOUNT_PROVIDER",
+ "connection_id": "SECONDARY_ACCOUNT_CONNECTION_ID(OPTIONAL)",
+ "user_id": "SECONDARY_ACCOUNT_USER_ID"
+ }
+
+ In this case you need to send provider and user_id in the body. Optionally you can also send the connection_id param which is suitable for identifying a particular database connection for the 'auth0' provider.
+ update:current_user_identities scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer PRIMARY_ACCOUNT_JWT"
+ {
+ "link_with": "SECONDARY_ACCOUNT_JWT"
+ }
+
+ In this case, only the link_with param is required in the body, which also contains the JWT obtained upon the secondary account's authentication.
+ update:users scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer YOUR_API_V2_TOKEN"
+ {
+ "provider": "SECONDARY_ACCOUNT_PROVIDER",
+ "connection_id": "SECONDARY_ACCOUNT_CONNECTION_ID(OPTIONAL)",
+ "user_id": "SECONDARY_ACCOUNT_USER_ID"
+ }
+
+ In this case you need to send provider and user_id in the body. Optionally you can also send the connection_id param which is suitable for identifying a particular database connection for the 'auth0' provider.
+ q query parameter can be used to get users that match the specified criteria using query string syntax.
+
+ Learn more about searching for users.
+
+ Read about best practices when working with the API endpoints for retrieving users.
+
+ Auth0 limits the number of users you can return. If you exceed this threshold, please redefine your search, use the export job, or the User Import / Export extension.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1
+
+ connection : typing.Optional[str]
+ Connection filter. Only applies when using search_engine=v1. To filter by connection with search_engine=v2|v3, use q=identities.connection:"connection_name"
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ q : typing.Optional[str]
+ Query in Lucene query string syntax. Some query types cannot be used on metadata fields, for details see Searchable Fields.
+
+ search_engine : typing.Optional[SearchEngineVersionsEnum]
+ The version of the search engine
+
+ primary_order : typing.Optional[bool]
+ If true (default), results are returned in a deterministic order. If false, results may be returned in a non-deterministic order, which can enhance performance for complex queries targeting a small number of users. Set to false only when consistent ordering and pagination is not required.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[UserResponseSchema, ListUsersOffsetPaginatedResponseContent]
+ Users successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ "users",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "sort": sort,
+ "connection": connection,
+ "fields": fields,
+ "include_fields": include_fields,
+ "q": q,
+ "search_engine": search_engine,
+ "primary_order": primary_order,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUsersOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUsersOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.users
+ _has_next = True
+ _get_next = lambda: self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ sort=sort,
+ connection=connection,
+ fields=fields,
+ include_fields=include_fields,
+ q=q,
+ search_engine=search_engine,
+ primary_order=primary_order,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 503:
+ raise ServiceUnavailableError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ connection: str = "Initial-Connection",
+ email: typing.Optional[str] = "john.doe@gmail.com",
+ phone_number: typing.Optional[str] = "+199999999999999",
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ blocked: typing.Optional[bool] = False,
+ email_verified: typing.Optional[bool] = False,
+ phone_verified: typing.Optional[bool] = False,
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ given_name: typing.Optional[str] = "John",
+ family_name: typing.Optional[str] = "Doe",
+ name: typing.Optional[str] = "John Doe",
+ nickname: typing.Optional[str] = "Johnny",
+ picture: typing.Optional[
+ str
+ ] = "https://secure.gravatar.com/avatar/15626c5e0c749cb912f9d1ad48dba440?s=480&r=pg&d=https%3A%2F%2Fssl.gstatic.com%2Fs2%2Fprofiles%2Fimages%2Fsilhouette80.png",
+ user_id: typing.Optional[str] = "abc",
+ password: typing.Optional[str] = "secret",
+ verify_email: typing.Optional[bool] = False,
+ username: typing.Optional[str] = "johndoe",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateUserResponseContent]:
+ """
+ Create a new user for a given database or passwordless connection.
+
+ Note: connection is required but other parameters such as email and password are dependent upon the type of connection.
+
+ Parameters
+ ----------
+ connection : str
+ Name of the connection this user should be created in.
+
+ email : typing.Optional[str]
+ The user's email.
+
+ phone_number : typing.Optional[str]
+ The user's phone number (following the E.164 recommendation).
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ blocked : typing.Optional[bool]
+ Whether this user was blocked by an administrator (true) or not (false).
+
+ email_verified : typing.Optional[bool]
+ Whether this email address is verified (true) or unverified (false). User will receive a verification email after creation if `email_verified` is false or not specified
+
+ phone_verified : typing.Optional[bool]
+ Whether this phone number has been verified (true) or not (false).
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ given_name : typing.Optional[str]
+ The user's given name(s).
+
+ family_name : typing.Optional[str]
+ The user's family name(s).
+
+ name : typing.Optional[str]
+ The user's full name.
+
+ nickname : typing.Optional[str]
+ The user's nickname.
+
+ picture : typing.Optional[str]
+ A URI pointing to the user's picture.
+
+ user_id : typing.Optional[str]
+ The external user's id provided by the identity provider.
+
+ password : typing.Optional[str]
+ Initial password for this user. Only valid for auth0 connection strategy.
+
+ verify_email : typing.Optional[bool]
+ Whether the user will receive a verification email after creation (true) or no email (false). Overrides behavior of `email_verified` parameter.
+
+ username : typing.Optional[str]
+ The user's username. Only valid if the connection requires a username.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateUserResponseContent]
+ User successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "users",
+ method="POST",
+ json={
+ "email": email,
+ "phone_number": phone_number,
+ "user_metadata": user_metadata,
+ "blocked": blocked,
+ "email_verified": email_verified,
+ "phone_verified": phone_verified,
+ "app_metadata": app_metadata,
+ "given_name": given_name,
+ "family_name": family_name,
+ "name": name,
+ "nickname": nickname,
+ "picture": picture,
+ "user_id": user_id,
+ "connection": connection,
+ "password": password,
+ "verify_email": verify_email,
+ "username": username,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateUserResponseContent,
+ parse_obj_as(
+ type_=CreateUserResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def list_users_by_email(
+ self,
+ *,
+ email: str,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[typing.List[UserResponseSchema]]:
+ """
+ Find users by email. If Auth0 is the identity provider (idP), the email address associated with a user is saved in lower case, regardless of how you initially provided it.
+
+ For example, if you register a user as JohnSmith@example.com, Auth0 saves the user's email as johnsmith@example.com.
+
+ Therefore, when using this endpoint, make sure that you are searching for users via email addresses using the correct case.
+
+ Parameters
+ ----------
+ email : str
+ Email address to search for (case-sensitive).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[UserResponseSchema]]
+ Users successfully searched.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "users-by-email",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ "email": email,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[UserResponseSchema],
+ parse_obj_as(
+ type_=typing.List[UserResponseSchema], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[GetUserResponseContent]:
+ """
+ Retrieve user details. A list of fields to include or exclude may also be specified. For more information, see Retrieve Users with the Get Users Endpoint.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetUserResponseContent]
+ User successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUserResponseContent,
+ parse_obj_as(
+ type_=GetUserResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a user by user ID. This action cannot be undone. For Auth0 Dashboard instructions, see Delete Users.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ blocked: typing.Optional[bool] = False,
+ email_verified: typing.Optional[bool] = False,
+ email: typing.Optional[str] = "john.doe@gmail.com",
+ phone_number: typing.Optional[str] = "+199999999999999",
+ phone_verified: typing.Optional[bool] = False,
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ given_name: typing.Optional[str] = "John",
+ family_name: typing.Optional[str] = "Doe",
+ name: typing.Optional[str] = "John Doe",
+ nickname: typing.Optional[str] = "Johnny",
+ picture: typing.Optional[
+ str
+ ] = "https://secure.gravatar.com/avatar/15626c5e0c749cb912f9d1ad48dba440?s=480&r=pg&d=https%3A%2F%2Fssl.gstatic.com%2Fs2%2Fprofiles%2Fimages%2Fsilhouette80.png",
+ verify_email: typing.Optional[bool] = False,
+ verify_phone_number: typing.Optional[bool] = False,
+ password: typing.Optional[str] = "secret",
+ connection: typing.Optional[str] = "Initial-Connection",
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ username: typing.Optional[str] = "johndoe",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateUserResponseContent]:
+ """
+ Update a user.
+
+ These are the attributes that can be updated at the root level:
+
+ user_metadata and app_metadata). These properties are merged instead of being replaced but be careful, the merge only occurs on the first level.email, email_verified, phone_number, phone_verified, username or password of a secondary identity, you need to specify the connection property too.email or phone_number you can specify, optionally, the client_id property.email_verified is not supported for enterprise and passwordless sms connections.blocked to false does not affect the user's blocked state from an excessive amount of incorrectly provided credentials. Use the "Unblock a user" endpoint from the "User Blocks" API to change the user's state.null as the value.{ "email_verified": true }
+
+ user_metadata:
+ { "user_metadata" : { "profileCode": 1479 } }
+
+ To add the field addresses the body to send should be:
+ { "user_metadata" : { "addresses": {"work_address": "100 Industrial Way"} }}
+
+ The modified object ends up with the following user_metadata property:{
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": { "work_address": "100 Industrial Way" }
+ }
+ }
+
+ "home_address": "742 Evergreen Terrace" (using the addresses property) we should send the whole addresses object. Since this is a first-level object, the object will be merged in, but its own properties will not be. The body to send should be:
+ {
+ "user_metadata": {
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+ }
+
+ The modified object ends up with the following user_metadata property:
+ {
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+ }
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to update.
+
+ blocked : typing.Optional[bool]
+ Whether this user was blocked by an administrator (true) or not (false).
+
+ email_verified : typing.Optional[bool]
+ Whether this email address is verified (true) or unverified (false). If set to false the user will not receive a verification email unless `verify_email` is set to true.
+
+ email : typing.Optional[str]
+ Email address of this user.
+
+ phone_number : typing.Optional[str]
+ The user's phone number (following the E.164 recommendation).
+
+ phone_verified : typing.Optional[bool]
+ Whether this phone number has been verified (true) or not (false).
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ given_name : typing.Optional[str]
+ Given name/first name/forename of this user.
+
+ family_name : typing.Optional[str]
+ Family name/last name/surname of this user.
+
+ name : typing.Optional[str]
+ Name of this user.
+
+ nickname : typing.Optional[str]
+ Preferred nickname or alias of this user.
+
+ picture : typing.Optional[str]
+ URL to picture, photo, or avatar of this user.
+
+ verify_email : typing.Optional[bool]
+ Whether this user will receive a verification email after creation (true) or no email (false). Overrides behavior of `email_verified` parameter.
+
+ verify_phone_number : typing.Optional[bool]
+ Whether this user will receive a text after changing the phone number (true) or no text (false). Only valid when changing phone number for SMS connections.
+
+ password : typing.Optional[str]
+ New password for this user. Only valid for database connections.
+
+ connection : typing.Optional[str]
+ Name of the connection to target for this user update.
+
+ client_id : typing.Optional[str]
+ Auth0 client ID. Only valid when updating email address.
+
+ username : typing.Optional[str]
+ The user's username. Only valid if the connection requires a username.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateUserResponseContent]
+ User successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "blocked": blocked,
+ "email_verified": email_verified,
+ "email": email,
+ "phone_number": phone_number,
+ "phone_verified": phone_verified,
+ "user_metadata": user_metadata,
+ "app_metadata": app_metadata,
+ "given_name": given_name,
+ "family_name": family_name,
+ "name": name,
+ "nickname": nickname,
+ "picture": picture,
+ "verify_email": verify_email,
+ "verify_phone_number": verify_phone_number,
+ "password": password,
+ "connection": connection,
+ "client_id": client_id,
+ "username": username,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateUserResponseContent,
+ parse_obj_as(
+ type_=UpdateUserResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def regenerate_recovery_code(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[RegenerateUsersRecoveryCodeResponseContent]:
+ """
+ Remove an existing multi-factor authentication (MFA) recovery code and generate a new one. If a user cannot access the original device or account used for MFA enrollment, they can use a recovery code to authenticate.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to regenerate a multi-factor authentication recovery code for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[RegenerateUsersRecoveryCodeResponseContent]
+ New recovery code successfully generated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/recovery-code-regeneration",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RegenerateUsersRecoveryCodeResponseContent,
+ parse_obj_as(
+ type_=RegenerateUsersRecoveryCodeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def revoke_access(
+ self,
+ id: str,
+ *,
+ session_id: typing.Optional[str] = OMIT,
+ preserve_refresh_tokens: typing.Optional[bool] = False,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Revokes selected resources related to a user (sessions, refresh tokens, ...).
+
+ Parameters
+ ----------
+ id : str
+ ID of the user.
+
+ session_id : typing.Optional[str]
+ ID of the session to revoke.
+
+ preserve_refresh_tokens : typing.Optional[bool]
+ Whether to preserve the refresh tokens associated with the session.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/revoke-access",
+ method="POST",
+ json={
+ "session_id": session_id,
+ "preserve_refresh_tokens": preserve_refresh_tokens,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawUsersClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ page: typing.Optional[int] = 0,
+ per_page: typing.Optional[int] = 50,
+ include_totals: typing.Optional[bool] = True,
+ sort: typing.Optional[str] = None,
+ connection: typing.Optional[str] = None,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ q: typing.Optional[str] = None,
+ search_engine: typing.Optional[SearchEngineVersionsEnum] = None,
+ primary_order: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[UserResponseSchema, ListUsersOffsetPaginatedResponseContent]:
+ """
+ Retrieve details of users. It is possible to:
+
+ - Specify a search criteria for users
+ - Sort the users to be returned
+ - Select the fields to be returned
+ - Specify the number of users to retrieve per page and the page index
+
+ The q query parameter can be used to get users that match the specified criteria using query string syntax.
+
+ Learn more about searching for users.
+
+ Read about best practices when working with the API endpoints for retrieving users.
+
+ Auth0 limits the number of users you can return. If you exceed this threshold, please redefine your search, use the export job, or the User Import / Export extension.
+
+ Parameters
+ ----------
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ sort : typing.Optional[str]
+ Field to sort by. Use field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1
+
+ connection : typing.Optional[str]
+ Connection filter. Only applies when using search_engine=v1. To filter by connection with search_engine=v2|v3, use q=identities.connection:"connection_name"
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ q : typing.Optional[str]
+ Query in Lucene query string syntax. Some query types cannot be used on metadata fields, for details see Searchable Fields.
+
+ search_engine : typing.Optional[SearchEngineVersionsEnum]
+ The version of the search engine
+
+ primary_order : typing.Optional[bool]
+ If true (default), results are returned in a deterministic order. If false, results may be returned in a non-deterministic order, which can enhance performance for complex queries targeting a small number of users. Set to false only when consistent ordering and pagination is not required.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[UserResponseSchema, ListUsersOffsetPaginatedResponseContent]
+ Users successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ "users",
+ method="GET",
+ params={
+ "page": page,
+ "per_page": per_page,
+ "include_totals": include_totals,
+ "sort": sort,
+ "connection": connection,
+ "fields": fields,
+ "include_fields": include_fields,
+ "q": q,
+ "search_engine": search_engine,
+ "primary_order": primary_order,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUsersOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUsersOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.users
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ page=page + len(_items or []),
+ per_page=per_page,
+ include_totals=include_totals,
+ sort=sort,
+ connection=connection,
+ fields=fields,
+ include_fields=include_fields,
+ q=q,
+ search_engine=search_engine,
+ primary_order=primary_order,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 503:
+ raise ServiceUnavailableError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ connection: str = "Initial-Connection",
+ email: typing.Optional[str] = "john.doe@gmail.com",
+ phone_number: typing.Optional[str] = "+199999999999999",
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ blocked: typing.Optional[bool] = False,
+ email_verified: typing.Optional[bool] = False,
+ phone_verified: typing.Optional[bool] = False,
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ given_name: typing.Optional[str] = "John",
+ family_name: typing.Optional[str] = "Doe",
+ name: typing.Optional[str] = "John Doe",
+ nickname: typing.Optional[str] = "Johnny",
+ picture: typing.Optional[
+ str
+ ] = "https://secure.gravatar.com/avatar/15626c5e0c749cb912f9d1ad48dba440?s=480&r=pg&d=https%3A%2F%2Fssl.gstatic.com%2Fs2%2Fprofiles%2Fimages%2Fsilhouette80.png",
+ user_id: typing.Optional[str] = "abc",
+ password: typing.Optional[str] = "secret",
+ verify_email: typing.Optional[bool] = False,
+ username: typing.Optional[str] = "johndoe",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateUserResponseContent]:
+ """
+ Create a new user for a given database or passwordless connection.
+
+ Note: connection is required but other parameters such as email and password are dependent upon the type of connection.
+
+ Parameters
+ ----------
+ connection : str
+ Name of the connection this user should be created in.
+
+ email : typing.Optional[str]
+ The user's email.
+
+ phone_number : typing.Optional[str]
+ The user's phone number (following the E.164 recommendation).
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ blocked : typing.Optional[bool]
+ Whether this user was blocked by an administrator (true) or not (false).
+
+ email_verified : typing.Optional[bool]
+ Whether this email address is verified (true) or unverified (false). User will receive a verification email after creation if `email_verified` is false or not specified
+
+ phone_verified : typing.Optional[bool]
+ Whether this phone number has been verified (true) or not (false).
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ given_name : typing.Optional[str]
+ The user's given name(s).
+
+ family_name : typing.Optional[str]
+ The user's family name(s).
+
+ name : typing.Optional[str]
+ The user's full name.
+
+ nickname : typing.Optional[str]
+ The user's nickname.
+
+ picture : typing.Optional[str]
+ A URI pointing to the user's picture.
+
+ user_id : typing.Optional[str]
+ The external user's id provided by the identity provider.
+
+ password : typing.Optional[str]
+ Initial password for this user. Only valid for auth0 connection strategy.
+
+ verify_email : typing.Optional[bool]
+ Whether the user will receive a verification email after creation (true) or no email (false). Overrides behavior of `email_verified` parameter.
+
+ username : typing.Optional[str]
+ The user's username. Only valid if the connection requires a username.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateUserResponseContent]
+ User successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "users",
+ method="POST",
+ json={
+ "email": email,
+ "phone_number": phone_number,
+ "user_metadata": user_metadata,
+ "blocked": blocked,
+ "email_verified": email_verified,
+ "phone_verified": phone_verified,
+ "app_metadata": app_metadata,
+ "given_name": given_name,
+ "family_name": family_name,
+ "name": name,
+ "nickname": nickname,
+ "picture": picture,
+ "user_id": user_id,
+ "connection": connection,
+ "password": password,
+ "verify_email": verify_email,
+ "username": username,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateUserResponseContent,
+ parse_obj_as(
+ type_=CreateUserResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def list_users_by_email(
+ self,
+ *,
+ email: str,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[typing.List[UserResponseSchema]]:
+ """
+ Find users by email. If Auth0 is the identity provider (idP), the email address associated with a user is saved in lower case, regardless of how you initially provided it.
+
+ For example, if you register a user as JohnSmith@example.com, Auth0 saves the user's email as johnsmith@example.com.
+
+ Therefore, when using this endpoint, make sure that you are searching for users via email addresses using the correct case.
+
+ Parameters
+ ----------
+ email : str
+ Email address to search for (case-sensitive).
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false). Defaults to true.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[UserResponseSchema]]
+ Users successfully searched.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "users-by-email",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ "email": email,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[UserResponseSchema],
+ parse_obj_as(
+ type_=typing.List[UserResponseSchema], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self,
+ id: str,
+ *,
+ fields: typing.Optional[str] = None,
+ include_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[GetUserResponseContent]:
+ """
+ Retrieve user details. A list of fields to include or exclude may also be specified. For more information, see Retrieve Users with the Get Users Endpoint.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to retrieve.
+
+ fields : typing.Optional[str]
+ Comma-separated list of fields to include or exclude (based on value provided for include_fields) in the result. Leave empty to retrieve all fields.
+
+ include_fields : typing.Optional[bool]
+ Whether specified fields are to be included (true) or excluded (false).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetUserResponseContent]
+ User successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}",
+ method="GET",
+ params={
+ "fields": fields,
+ "include_fields": include_fields,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetUserResponseContent,
+ parse_obj_as(
+ type_=GetUserResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a user by user ID. This action cannot be undone. For Auth0 Dashboard instructions, see Delete Users.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to delete.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ blocked: typing.Optional[bool] = False,
+ email_verified: typing.Optional[bool] = False,
+ email: typing.Optional[str] = "john.doe@gmail.com",
+ phone_number: typing.Optional[str] = "+199999999999999",
+ phone_verified: typing.Optional[bool] = False,
+ user_metadata: typing.Optional[UserMetadata] = OMIT,
+ app_metadata: typing.Optional[AppMetadata] = OMIT,
+ given_name: typing.Optional[str] = "John",
+ family_name: typing.Optional[str] = "Doe",
+ name: typing.Optional[str] = "John Doe",
+ nickname: typing.Optional[str] = "Johnny",
+ picture: typing.Optional[
+ str
+ ] = "https://secure.gravatar.com/avatar/15626c5e0c749cb912f9d1ad48dba440?s=480&r=pg&d=https%3A%2F%2Fssl.gstatic.com%2Fs2%2Fprofiles%2Fimages%2Fsilhouette80.png",
+ verify_email: typing.Optional[bool] = False,
+ verify_phone_number: typing.Optional[bool] = False,
+ password: typing.Optional[str] = "secret",
+ connection: typing.Optional[str] = "Initial-Connection",
+ client_id: typing.Optional[str] = "DaM8bokEXBWrTUFCiJjWn50jei6ardyX",
+ username: typing.Optional[str] = "johndoe",
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateUserResponseContent]:
+ """
+ Update a user.
+
+ These are the attributes that can be updated at the root level:
+
+ user_metadata and app_metadata). These properties are merged instead of being replaced but be careful, the merge only occurs on the first level.email, email_verified, phone_number, phone_verified, username or password of a secondary identity, you need to specify the connection property too.email or phone_number you can specify, optionally, the client_id property.email_verified is not supported for enterprise and passwordless sms connections.blocked to false does not affect the user's blocked state from an excessive amount of incorrectly provided credentials. Use the "Unblock a user" endpoint from the "User Blocks" API to change the user's state.null as the value.{ "email_verified": true }
+
+ user_metadata:
+ { "user_metadata" : { "profileCode": 1479 } }
+
+ To add the field addresses the body to send should be:
+ { "user_metadata" : { "addresses": {"work_address": "100 Industrial Way"} }}
+
+ The modified object ends up with the following user_metadata property:{
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": { "work_address": "100 Industrial Way" }
+ }
+ }
+
+ "home_address": "742 Evergreen Terrace" (using the addresses property) we should send the whole addresses object. Since this is a first-level object, the object will be merged in, but its own properties will not be. The body to send should be:
+ {
+ "user_metadata": {
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+ }
+
+ The modified object ends up with the following user_metadata property:
+ {
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+ }
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to update.
+
+ blocked : typing.Optional[bool]
+ Whether this user was blocked by an administrator (true) or not (false).
+
+ email_verified : typing.Optional[bool]
+ Whether this email address is verified (true) or unverified (false). If set to false the user will not receive a verification email unless `verify_email` is set to true.
+
+ email : typing.Optional[str]
+ Email address of this user.
+
+ phone_number : typing.Optional[str]
+ The user's phone number (following the E.164 recommendation).
+
+ phone_verified : typing.Optional[bool]
+ Whether this phone number has been verified (true) or not (false).
+
+ user_metadata : typing.Optional[UserMetadata]
+
+ app_metadata : typing.Optional[AppMetadata]
+
+ given_name : typing.Optional[str]
+ Given name/first name/forename of this user.
+
+ family_name : typing.Optional[str]
+ Family name/last name/surname of this user.
+
+ name : typing.Optional[str]
+ Name of this user.
+
+ nickname : typing.Optional[str]
+ Preferred nickname or alias of this user.
+
+ picture : typing.Optional[str]
+ URL to picture, photo, or avatar of this user.
+
+ verify_email : typing.Optional[bool]
+ Whether this user will receive a verification email after creation (true) or no email (false). Overrides behavior of `email_verified` parameter.
+
+ verify_phone_number : typing.Optional[bool]
+ Whether this user will receive a text after changing the phone number (true) or no text (false). Only valid when changing phone number for SMS connections.
+
+ password : typing.Optional[str]
+ New password for this user. Only valid for database connections.
+
+ connection : typing.Optional[str]
+ Name of the connection to target for this user update.
+
+ client_id : typing.Optional[str]
+ Auth0 client ID. Only valid when updating email address.
+
+ username : typing.Optional[str]
+ The user's username. Only valid if the connection requires a username.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateUserResponseContent]
+ User successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "blocked": blocked,
+ "email_verified": email_verified,
+ "email": email,
+ "phone_number": phone_number,
+ "phone_verified": phone_verified,
+ "user_metadata": user_metadata,
+ "app_metadata": app_metadata,
+ "given_name": given_name,
+ "family_name": family_name,
+ "name": name,
+ "nickname": nickname,
+ "picture": picture,
+ "verify_email": verify_email,
+ "verify_phone_number": verify_phone_number,
+ "password": password,
+ "connection": connection,
+ "client_id": client_id,
+ "username": username,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateUserResponseContent,
+ parse_obj_as(
+ type_=UpdateUserResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def regenerate_recovery_code(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[RegenerateUsersRecoveryCodeResponseContent]:
+ """
+ Remove an existing multi-factor authentication (MFA) recovery code and generate a new one. If a user cannot access the original device or account used for MFA enrollment, they can use a recovery code to authenticate.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to regenerate a multi-factor authentication recovery code for.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[RegenerateUsersRecoveryCodeResponseContent]
+ New recovery code successfully generated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/recovery-code-regeneration",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RegenerateUsersRecoveryCodeResponseContent,
+ parse_obj_as(
+ type_=RegenerateUsersRecoveryCodeResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def revoke_access(
+ self,
+ id: str,
+ *,
+ session_id: typing.Optional[str] = OMIT,
+ preserve_refresh_tokens: typing.Optional[bool] = False,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Revokes selected resources related to a user (sessions, refresh tokens, ...).
+
+ Parameters
+ ----------
+ id : str
+ ID of the user.
+
+ session_id : typing.Optional[str]
+ ID of the session to revoke.
+
+ preserve_refresh_tokens : typing.Optional[bool]
+ Whether to preserve the refresh tokens associated with the session.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/revoke-access",
+ method="POST",
+ json={
+ "session_id": session_id,
+ "preserve_refresh_tokens": preserve_refresh_tokens,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/refresh_token/__init__.py b/src/auth0/management/users/refresh_token/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/refresh_token/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/refresh_token/client.py b/src/auth0/management/users/refresh_token/client.py
new file mode 100644
index 00000000..da8d19c4
--- /dev/null
+++ b/src/auth0/management/users/refresh_token/client.py
@@ -0,0 +1,219 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.list_refresh_tokens_paginated_response_content import ListRefreshTokensPaginatedResponseContent
+from ...types.refresh_token_response_content import RefreshTokenResponseContent
+from .raw_client import AsyncRawRefreshTokenClient, RawRefreshTokenClient
+
+
+class RefreshTokenClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawRefreshTokenClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawRefreshTokenClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawRefreshTokenClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ user_id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[RefreshTokenResponseContent, ListRefreshTokensPaginatedResponseContent]:
+ """
+ Retrieve details for a user's refresh tokens.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get refresh tokens for
+
+ from_ : typing.Optional[str]
+ An optional cursor from which to start the selection (exclusive).
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[RefreshTokenResponseContent, ListRefreshTokensPaginatedResponseContent]
+ The refresh tokens were retrieved
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.users.refresh_token.list(
+ user_id="user_id",
+ from_="from",
+ take=1,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(user_id, from_=from_, take=take, request_options=request_options)
+
+ def delete(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete all refresh tokens for a user.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get remove refresh tokens for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.refresh_token.delete(
+ user_id="user_id",
+ )
+ """
+ _response = self._raw_client.delete(user_id, request_options=request_options)
+ return _response.data
+
+
+class AsyncRefreshTokenClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawRefreshTokenClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawRefreshTokenClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawRefreshTokenClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ user_id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[RefreshTokenResponseContent, ListRefreshTokensPaginatedResponseContent]:
+ """
+ Retrieve details for a user's refresh tokens.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get refresh tokens for
+
+ from_ : typing.Optional[str]
+ An optional cursor from which to start the selection (exclusive).
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[RefreshTokenResponseContent, ListRefreshTokensPaginatedResponseContent]
+ The refresh tokens were retrieved
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.users.refresh_token.list(
+ user_id="user_id",
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(user_id, from_=from_, take=take, request_options=request_options)
+
+ async def delete(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete all refresh tokens for a user.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get remove refresh tokens for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.refresh_token.delete(
+ user_id="user_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(user_id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/users/refresh_token/raw_client.py b/src/auth0/management/users/refresh_token/raw_client.py
new file mode 100644
index 00000000..fd19edb5
--- /dev/null
+++ b/src/auth0/management/users/refresh_token/raw_client.py
@@ -0,0 +1,416 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.list_refresh_tokens_paginated_response_content import ListRefreshTokensPaginatedResponseContent
+from ...types.refresh_token_response_content import RefreshTokenResponseContent
+
+
+class RawRefreshTokenClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ user_id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[RefreshTokenResponseContent, ListRefreshTokensPaginatedResponseContent]:
+ """
+ Retrieve details for a user's refresh tokens.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get refresh tokens for
+
+ from_ : typing.Optional[str]
+ An optional cursor from which to start the selection (exclusive).
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[RefreshTokenResponseContent, ListRefreshTokensPaginatedResponseContent]
+ The refresh tokens were retrieved
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(user_id)}/refresh-tokens",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListRefreshTokensPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListRefreshTokensPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.tokens
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ user_id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete all refresh tokens for a user.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get remove refresh tokens for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(user_id)}/refresh-tokens",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawRefreshTokenClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ user_id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[RefreshTokenResponseContent, ListRefreshTokensPaginatedResponseContent]:
+ """
+ Retrieve details for a user's refresh tokens.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get refresh tokens for
+
+ from_ : typing.Optional[str]
+ An optional cursor from which to start the selection (exclusive).
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[RefreshTokenResponseContent, ListRefreshTokensPaginatedResponseContent]
+ The refresh tokens were retrieved
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(user_id)}/refresh-tokens",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListRefreshTokensPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListRefreshTokensPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.tokens
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ user_id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete all refresh tokens for a user.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get remove refresh tokens for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(user_id)}/refresh-tokens",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/risk_assessments/__init__.py b/src/auth0/management/users/risk_assessments/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/risk_assessments/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/risk_assessments/client.py b/src/auth0/management/users/risk_assessments/client.py
new file mode 100644
index 00000000..dec9b5a9
--- /dev/null
+++ b/src/auth0/management/users/risk_assessments/client.py
@@ -0,0 +1,145 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.request_options import RequestOptions
+from ...types.assessors_type_enum import AssessorsTypeEnum
+from .raw_client import AsyncRawRiskAssessmentsClient, RawRiskAssessmentsClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RiskAssessmentsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawRiskAssessmentsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawRiskAssessmentsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawRiskAssessmentsClient
+ """
+ return self._raw_client
+
+ def clear(
+ self,
+ id: str,
+ *,
+ connection: str,
+ assessors: typing.Sequence[AssessorsTypeEnum],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Clear risk assessment assessors for a specific user
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to clear assessors for.
+
+ connection : str
+ The name of the connection containing the user whose assessors should be cleared.
+
+ assessors : typing.Sequence[AssessorsTypeEnum]
+ List of assessors to clear.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.risk_assessments.clear(
+ id="id",
+ connection="connection",
+ assessors=[],
+ )
+ """
+ _response = self._raw_client.clear(
+ id, connection=connection, assessors=assessors, request_options=request_options
+ )
+ return _response.data
+
+
+class AsyncRiskAssessmentsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawRiskAssessmentsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawRiskAssessmentsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawRiskAssessmentsClient
+ """
+ return self._raw_client
+
+ async def clear(
+ self,
+ id: str,
+ *,
+ connection: str,
+ assessors: typing.Sequence[AssessorsTypeEnum],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
+ """
+ Clear risk assessment assessors for a specific user
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to clear assessors for.
+
+ connection : str
+ The name of the connection containing the user whose assessors should be cleared.
+
+ assessors : typing.Sequence[AssessorsTypeEnum]
+ List of assessors to clear.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.risk_assessments.clear(
+ id="id",
+ connection="connection",
+ assessors=[],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.clear(
+ id, connection=connection, assessors=assessors, request_options=request_options
+ )
+ return _response.data
diff --git a/src/auth0/management/users/risk_assessments/raw_client.py b/src/auth0/management/users/risk_assessments/raw_client.py
new file mode 100644
index 00000000..b05edfec
--- /dev/null
+++ b/src/auth0/management/users/risk_assessments/raw_client.py
@@ -0,0 +1,217 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.assessors_type_enum import AssessorsTypeEnum
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawRiskAssessmentsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def clear(
+ self,
+ id: str,
+ *,
+ connection: str,
+ assessors: typing.Sequence[AssessorsTypeEnum],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[None]:
+ """
+ Clear risk assessment assessors for a specific user
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to clear assessors for.
+
+ connection : str
+ The name of the connection containing the user whose assessors should be cleared.
+
+ assessors : typing.Sequence[AssessorsTypeEnum]
+ List of assessors to clear.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/risk-assessments/clear",
+ method="POST",
+ json={
+ "connection": connection,
+ "assessors": assessors,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawRiskAssessmentsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def clear(
+ self,
+ id: str,
+ *,
+ connection: str,
+ assessors: typing.Sequence[AssessorsTypeEnum],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[None]:
+ """
+ Clear risk assessment assessors for a specific user
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to clear assessors for.
+
+ connection : str
+ The name of the connection containing the user whose assessors should be cleared.
+
+ assessors : typing.Sequence[AssessorsTypeEnum]
+ List of assessors to clear.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/risk-assessments/clear",
+ method="POST",
+ json={
+ "connection": connection,
+ "assessors": assessors,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/roles/__init__.py b/src/auth0/management/users/roles/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/roles/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/roles/client.py b/src/auth0/management/users/roles/client.py
new file mode 100644
index 00000000..7b65ec3e
--- /dev/null
+++ b/src/auth0/management/users/roles/client.py
@@ -0,0 +1,340 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.list_user_roles_offset_paginated_response_content import ListUserRolesOffsetPaginatedResponseContent
+from ...types.role import Role
+from .raw_client import AsyncRawRolesClient, RawRolesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RolesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawRolesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawRolesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawRolesClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ id: str,
+ *,
+ per_page: typing.Optional[int] = 50,
+ page: typing.Optional[int] = 0,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Role, ListUserRolesOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of all user roles currently assigned to a user.
+
+ Note: This action retrieves all roles assigned to a user in the context of your whole tenant. To retrieve Organization-specific roles, use the following endpoint: Get user roles assigned to an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list roles for.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Role, ListUserRolesOffsetPaginatedResponseContent]
+ Roles successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.users.roles.list(
+ id="id",
+ per_page=1,
+ page=1,
+ include_totals=True,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(
+ id, per_page=per_page, page=page, include_totals=include_totals, request_options=request_options
+ )
+
+ def assign(
+ self, id: str, *, roles: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Assign one or more existing user roles to a user. For more information, review Role-Based Access Control.
+
+ Note: New roles cannot be created through this action. Additionally, this action is used to assign roles to a user in the context of your whole tenant. To assign roles in the context of a specific Organization, use the following endpoint: Assign user roles to an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to associate roles with.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to associated with the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.roles.assign(
+ id="id",
+ roles=["roles"],
+ )
+ """
+ _response = self._raw_client.assign(id, roles=roles, request_options=request_options)
+ return _response.data
+
+ def delete(
+ self, id: str, *, roles: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Remove one or more specified user roles assigned to a user.
+
+ Note: This action removes a role from a user in the context of your whole tenant. If you want to unassign a role from a user in the context of a specific Organization, use the following endpoint: Delete user roles from an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to remove roles from.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to remove from the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.roles.delete(
+ id="id",
+ roles=["roles"],
+ )
+ """
+ _response = self._raw_client.delete(id, roles=roles, request_options=request_options)
+ return _response.data
+
+
+class AsyncRolesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawRolesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawRolesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawRolesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ id: str,
+ *,
+ per_page: typing.Optional[int] = 50,
+ page: typing.Optional[int] = 0,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Role, ListUserRolesOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of all user roles currently assigned to a user.
+
+ Note: This action retrieves all roles assigned to a user in the context of your whole tenant. To retrieve Organization-specific roles, use the following endpoint: Get user roles assigned to an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list roles for.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Role, ListUserRolesOffsetPaginatedResponseContent]
+ Roles successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.users.roles.list(
+ id="id",
+ per_page=1,
+ page=1,
+ include_totals=True,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(
+ id, per_page=per_page, page=page, include_totals=include_totals, request_options=request_options
+ )
+
+ async def assign(
+ self, id: str, *, roles: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Assign one or more existing user roles to a user. For more information, review Role-Based Access Control.
+
+ Note: New roles cannot be created through this action. Additionally, this action is used to assign roles to a user in the context of your whole tenant. To assign roles in the context of a specific Organization, use the following endpoint: Assign user roles to an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to associate roles with.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to associated with the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.roles.assign(
+ id="id",
+ roles=["roles"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.assign(id, roles=roles, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self, id: str, *, roles: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Remove one or more specified user roles assigned to a user.
+
+ Note: This action removes a role from a user in the context of your whole tenant. If you want to unassign a role from a user in the context of a specific Organization, use the following endpoint: Delete user roles from an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to remove roles from.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to remove from the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.roles.delete(
+ id="id",
+ roles=["roles"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, roles=roles, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/users/roles/raw_client.py b/src/auth0/management/users/roles/raw_client.py
new file mode 100644
index 00000000..a696577d
--- /dev/null
+++ b/src/auth0/management/users/roles/raw_client.py
@@ -0,0 +1,570 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.list_user_roles_offset_paginated_response_content import ListUserRolesOffsetPaginatedResponseContent
+from ...types.role import Role
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawRolesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ id: str,
+ *,
+ per_page: typing.Optional[int] = 50,
+ page: typing.Optional[int] = 0,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[Role, ListUserRolesOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of all user roles currently assigned to a user.
+
+ Note: This action retrieves all roles assigned to a user in the context of your whole tenant. To retrieve Organization-specific roles, use the following endpoint: Get user roles assigned to an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list roles for.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[Role, ListUserRolesOffsetPaginatedResponseContent]
+ Roles successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/roles",
+ method="GET",
+ params={
+ "per_page": per_page,
+ "page": page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserRolesOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserRolesOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.roles
+ _has_next = True
+ _get_next = lambda: self.list(
+ id,
+ per_page=per_page,
+ page=page + len(_items or []),
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def assign(
+ self, id: str, *, roles: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Assign one or more existing user roles to a user. For more information, review Role-Based Access Control.
+
+ Note: New roles cannot be created through this action. Additionally, this action is used to assign roles to a user in the context of your whole tenant. To assign roles in the context of a specific Organization, use the following endpoint: Assign user roles to an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to associate roles with.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to associated with the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/roles",
+ method="POST",
+ json={
+ "roles": roles,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, id: str, *, roles: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Remove one or more specified user roles assigned to a user.
+
+ Note: This action removes a role from a user in the context of your whole tenant. If you want to unassign a role from a user in the context of a specific Organization, use the following endpoint: Delete user roles from an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to remove roles from.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to remove from the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/roles",
+ method="DELETE",
+ json={
+ "roles": roles,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawRolesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ id: str,
+ *,
+ per_page: typing.Optional[int] = 50,
+ page: typing.Optional[int] = 0,
+ include_totals: typing.Optional[bool] = True,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[Role, ListUserRolesOffsetPaginatedResponseContent]:
+ """
+ Retrieve detailed list of all user roles currently assigned to a user.
+
+ Note: This action retrieves all roles assigned to a user in the context of your whole tenant. To retrieve Organization-specific roles, use the following endpoint: Get user roles assigned to an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to list roles for.
+
+ per_page : typing.Optional[int]
+ Number of results per page.
+
+ page : typing.Optional[int]
+ Page index of the results to return. First page is 0.
+
+ include_totals : typing.Optional[bool]
+ Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[Role, ListUserRolesOffsetPaginatedResponseContent]
+ Roles successfully retrieved.
+ """
+ page = page if page is not None else 0
+
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/roles",
+ method="GET",
+ params={
+ "per_page": per_page,
+ "page": page,
+ "include_totals": include_totals,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserRolesOffsetPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserRolesOffsetPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.roles
+ _has_next = True
+
+ async def _get_next():
+ return await self.list(
+ id,
+ per_page=per_page,
+ page=page + len(_items or []),
+ include_totals=include_totals,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def assign(
+ self, id: str, *, roles: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Assign one or more existing user roles to a user. For more information, review Role-Based Access Control.
+
+ Note: New roles cannot be created through this action. Additionally, this action is used to assign roles to a user in the context of your whole tenant. To assign roles in the context of a specific Organization, use the following endpoint: Assign user roles to an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to associate roles with.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to associated with the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/roles",
+ method="POST",
+ json={
+ "roles": roles,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, roles: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Remove one or more specified user roles assigned to a user.
+
+ Note: This action removes a role from a user in the context of your whole tenant. If you want to unassign a role from a user in the context of a specific Organization, use the following endpoint: Delete user roles from an Organization member.
+
+ Parameters
+ ----------
+ id : str
+ ID of the user to remove roles from.
+
+ roles : typing.Sequence[str]
+ List of roles IDs to remove from the user.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(id)}/roles",
+ method="DELETE",
+ json={
+ "roles": roles,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/users/sessions/__init__.py b/src/auth0/management/users/sessions/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/users/sessions/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/users/sessions/client.py b/src/auth0/management/users/sessions/client.py
new file mode 100644
index 00000000..61511a5c
--- /dev/null
+++ b/src/auth0/management/users/sessions/client.py
@@ -0,0 +1,219 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.request_options import RequestOptions
+from ...types.list_user_sessions_paginated_response_content import ListUserSessionsPaginatedResponseContent
+from ...types.session_response_content import SessionResponseContent
+from .raw_client import AsyncRawSessionsClient, RawSessionsClient
+
+
+class SessionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawSessionsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawSessionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawSessionsClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ user_id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[SessionResponseContent, ListUserSessionsPaginatedResponseContent]:
+ """
+ Retrieve details for a user's sessions.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get sessions for
+
+ from_ : typing.Optional[str]
+ An optional cursor from which to start the selection (exclusive).
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[SessionResponseContent, ListUserSessionsPaginatedResponseContent]
+ The sessions were retrieved
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.users.sessions.list(
+ user_id="user_id",
+ from_="from",
+ take=1,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(user_id, from_=from_, take=take, request_options=request_options)
+
+ def delete(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete all sessions for a user.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get sessions for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.users.sessions.delete(
+ user_id="user_id",
+ )
+ """
+ _response = self._raw_client.delete(user_id, request_options=request_options)
+ return _response.data
+
+
+class AsyncSessionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawSessionsClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawSessionsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawSessionsClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ user_id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[SessionResponseContent, ListUserSessionsPaginatedResponseContent]:
+ """
+ Retrieve details for a user's sessions.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get sessions for
+
+ from_ : typing.Optional[str]
+ An optional cursor from which to start the selection (exclusive).
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[SessionResponseContent, ListUserSessionsPaginatedResponseContent]
+ The sessions were retrieved
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.users.sessions.list(
+ user_id="user_id",
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(user_id, from_=from_, take=take, request_options=request_options)
+
+ async def delete(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete all sessions for a user.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get sessions for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.users.sessions.delete(
+ user_id="user_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(user_id, request_options=request_options)
+ return _response.data
diff --git a/src/auth0/management/users/sessions/raw_client.py b/src/auth0/management/users/sessions/raw_client.py
new file mode 100644
index 00000000..f7313c48
--- /dev/null
+++ b/src/auth0/management/users/sessions/raw_client.py
@@ -0,0 +1,416 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ...core.api_error import ApiError
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ...core.http_response import AsyncHttpResponse, HttpResponse
+from ...core.jsonable_encoder import jsonable_encoder
+from ...core.pagination import AsyncPager, SyncPager
+from ...core.pydantic_utilities import parse_obj_as
+from ...core.request_options import RequestOptions
+from ...errors.bad_request_error import BadRequestError
+from ...errors.forbidden_error import ForbiddenError
+from ...errors.not_found_error import NotFoundError
+from ...errors.too_many_requests_error import TooManyRequestsError
+from ...errors.unauthorized_error import UnauthorizedError
+from ...types.list_user_sessions_paginated_response_content import ListUserSessionsPaginatedResponseContent
+from ...types.session_response_content import SessionResponseContent
+
+
+class RawSessionsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ user_id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[SessionResponseContent, ListUserSessionsPaginatedResponseContent]:
+ """
+ Retrieve details for a user's sessions.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get sessions for
+
+ from_ : typing.Optional[str]
+ An optional cursor from which to start the selection (exclusive).
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[SessionResponseContent, ListUserSessionsPaginatedResponseContent]
+ The sessions were retrieved
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(user_id)}/sessions",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserSessionsPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserSessionsPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.sessions
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ user_id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete all sessions for a user.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get sessions for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(user_id)}/sessions",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawSessionsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ user_id: str,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[SessionResponseContent, ListUserSessionsPaginatedResponseContent]:
+ """
+ Retrieve details for a user's sessions.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get sessions for
+
+ from_ : typing.Optional[str]
+ An optional cursor from which to start the selection (exclusive).
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[SessionResponseContent, ListUserSessionsPaginatedResponseContent]
+ The sessions were retrieved
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(user_id)}/sessions",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListUserSessionsPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListUserSessionsPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.sessions
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ user_id,
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete all sessions for a user.
+
+ Parameters
+ ----------
+ user_id : str
+ ID of the user to get sessions for
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"users/{jsonable_encoder(user_id)}/sessions",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/verifiable_credentials/__init__.py b/src/auth0/management/verifiable_credentials/__init__.py
new file mode 100644
index 00000000..6b6426c9
--- /dev/null
+++ b/src/auth0/management/verifiable_credentials/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import verification
+_dynamic_imports: typing.Dict[str, str] = {"verification": ".verification"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["verification"]
diff --git a/src/auth0/management/verifiable_credentials/client.py b/src/auth0/management/verifiable_credentials/client.py
new file mode 100644
index 00000000..c9ef315f
--- /dev/null
+++ b/src/auth0/management/verifiable_credentials/client.py
@@ -0,0 +1,63 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .raw_client import AsyncRawVerifiableCredentialsClient, RawVerifiableCredentialsClient
+
+if typing.TYPE_CHECKING:
+ from .verification.client import AsyncVerificationClient, VerificationClient
+
+
+class VerifiableCredentialsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawVerifiableCredentialsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._verification: typing.Optional[VerificationClient] = None
+
+ @property
+ def with_raw_response(self) -> RawVerifiableCredentialsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawVerifiableCredentialsClient
+ """
+ return self._raw_client
+
+ @property
+ def verification(self):
+ if self._verification is None:
+ from .verification.client import VerificationClient # noqa: E402
+
+ self._verification = VerificationClient(client_wrapper=self._client_wrapper)
+ return self._verification
+
+
+class AsyncVerifiableCredentialsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawVerifiableCredentialsClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._verification: typing.Optional[AsyncVerificationClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawVerifiableCredentialsClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawVerifiableCredentialsClient
+ """
+ return self._raw_client
+
+ @property
+ def verification(self):
+ if self._verification is None:
+ from .verification.client import AsyncVerificationClient # noqa: E402
+
+ self._verification = AsyncVerificationClient(client_wrapper=self._client_wrapper)
+ return self._verification
diff --git a/src/auth0/management/verifiable_credentials/raw_client.py b/src/auth0/management/verifiable_credentials/raw_client.py
new file mode 100644
index 00000000..a5013b9b
--- /dev/null
+++ b/src/auth0/management/verifiable_credentials/raw_client.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+
+
+class RawVerifiableCredentialsClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+
+class AsyncRawVerifiableCredentialsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
diff --git a/src/auth0/management/verifiable_credentials/verification/__init__.py b/src/auth0/management/verifiable_credentials/verification/__init__.py
new file mode 100644
index 00000000..bf052681
--- /dev/null
+++ b/src/auth0/management/verifiable_credentials/verification/__init__.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
+import typing
+from importlib import import_module
+
+if typing.TYPE_CHECKING:
+ from . import templates
+_dynamic_imports: typing.Dict[str, str] = {"templates": ".templates"}
+
+
+def __getattr__(attr_name: str) -> typing.Any:
+ module_name = _dynamic_imports.get(attr_name)
+ if module_name is None:
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
+ try:
+ module = import_module(module_name, __package__)
+ if module_name == f".{attr_name}":
+ return module
+ else:
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
+ except AttributeError as e:
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
+
+
+def __dir__():
+ lazy_attrs = list(_dynamic_imports.keys())
+ return sorted(lazy_attrs)
+
+
+__all__ = ["templates"]
diff --git a/src/auth0/management/verifiable_credentials/verification/client.py b/src/auth0/management/verifiable_credentials/verification/client.py
new file mode 100644
index 00000000..de486f4d
--- /dev/null
+++ b/src/auth0/management/verifiable_credentials/verification/client.py
@@ -0,0 +1,63 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .raw_client import AsyncRawVerificationClient, RawVerificationClient
+
+if typing.TYPE_CHECKING:
+ from .templates.client import AsyncTemplatesClient, TemplatesClient
+
+
+class VerificationClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawVerificationClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._templates: typing.Optional[TemplatesClient] = None
+
+ @property
+ def with_raw_response(self) -> RawVerificationClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawVerificationClient
+ """
+ return self._raw_client
+
+ @property
+ def templates(self):
+ if self._templates is None:
+ from .templates.client import TemplatesClient # noqa: E402
+
+ self._templates = TemplatesClient(client_wrapper=self._client_wrapper)
+ return self._templates
+
+
+class AsyncVerificationClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawVerificationClient(client_wrapper=client_wrapper)
+ self._client_wrapper = client_wrapper
+ self._templates: typing.Optional[AsyncTemplatesClient] = None
+
+ @property
+ def with_raw_response(self) -> AsyncRawVerificationClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawVerificationClient
+ """
+ return self._raw_client
+
+ @property
+ def templates(self):
+ if self._templates is None:
+ from .templates.client import AsyncTemplatesClient # noqa: E402
+
+ self._templates = AsyncTemplatesClient(client_wrapper=self._client_wrapper)
+ return self._templates
diff --git a/src/auth0/management/verifiable_credentials/verification/raw_client.py b/src/auth0/management/verifiable_credentials/verification/raw_client.py
new file mode 100644
index 00000000..eae3c5bc
--- /dev/null
+++ b/src/auth0/management/verifiable_credentials/verification/raw_client.py
@@ -0,0 +1,13 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+
+
+class RawVerificationClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+
+class AsyncRawVerificationClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
diff --git a/src/auth0/management/verifiable_credentials/verification/templates/__init__.py b/src/auth0/management/verifiable_credentials/verification/templates/__init__.py
new file mode 100644
index 00000000..5cde0202
--- /dev/null
+++ b/src/auth0/management/verifiable_credentials/verification/templates/__init__.py
@@ -0,0 +1,4 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# isort: skip_file
+
diff --git a/src/auth0/management/verifiable_credentials/verification/templates/client.py b/src/auth0/management/verifiable_credentials/verification/templates/client.py
new file mode 100644
index 00000000..f3205e75
--- /dev/null
+++ b/src/auth0/management/verifiable_credentials/verification/templates/client.py
@@ -0,0 +1,580 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.pagination import AsyncPager, SyncPager
+from ....core.request_options import RequestOptions
+from ....types.create_verifiable_credential_template_response_content import (
+ CreateVerifiableCredentialTemplateResponseContent,
+)
+from ....types.get_verifiable_credential_template_response_content import GetVerifiableCredentialTemplateResponseContent
+from ....types.list_verifiable_credential_templates_paginated_response_content import (
+ ListVerifiableCredentialTemplatesPaginatedResponseContent,
+)
+from ....types.mdl_presentation_request import MdlPresentationRequest
+from ....types.update_verifiable_credential_template_response_content import (
+ UpdateVerifiableCredentialTemplateResponseContent,
+)
+from ....types.verifiable_credential_template_response import VerifiableCredentialTemplateResponse
+from .raw_client import AsyncRawTemplatesClient, RawTemplatesClient
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class TemplatesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._raw_client = RawTemplatesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> RawTemplatesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawTemplatesClient
+ """
+ return self._raw_client
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[VerifiableCredentialTemplateResponse, ListVerifiableCredentialTemplatesPaginatedResponseContent]:
+ """
+ List a verifiable credential templates.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[VerifiableCredentialTemplateResponse, ListVerifiableCredentialTemplatesPaginatedResponseContent]
+ Templates successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ response = client.verifiable_credentials.verification.templates.list(
+ from_="from",
+ take=1,
+ )
+ for item in response:
+ yield item
+ # alternatively, you can paginate page-by-page
+ for page in response.iter_pages():
+ yield page
+ """
+ return self._raw_client.list(from_=from_, take=take, request_options=request_options)
+
+ def create(
+ self,
+ *,
+ name: str,
+ type: str,
+ dialect: str,
+ presentation: MdlPresentationRequest,
+ well_known_trusted_issuers: str,
+ custom_certificate_authority: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateVerifiableCredentialTemplateResponseContent:
+ """
+ Create a verifiable credential template.
+
+ Parameters
+ ----------
+ name : str
+
+ type : str
+
+ dialect : str
+
+ presentation : MdlPresentationRequest
+
+ well_known_trusted_issuers : str
+
+ custom_certificate_authority : typing.Optional[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateVerifiableCredentialTemplateResponseContent
+ Template successfully created.
+
+ Examples
+ --------
+ from auth0 import (
+ Auth0,
+ MdlPresentationProperties,
+ MdlPresentationRequest,
+ MdlPresentationRequestProperties,
+ )
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.verifiable_credentials.verification.templates.create(
+ name="name",
+ type="type",
+ dialect="dialect",
+ presentation=MdlPresentationRequest(
+ org_iso_18013_5_1_m_dl=MdlPresentationRequestProperties(
+ org_iso_18013_5_1=MdlPresentationProperties(),
+ ),
+ ),
+ well_known_trusted_issuers="well_known_trusted_issuers",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name,
+ type=type,
+ dialect=dialect,
+ presentation=presentation,
+ well_known_trusted_issuers=well_known_trusted_issuers,
+ custom_certificate_authority=custom_certificate_authority,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetVerifiableCredentialTemplateResponseContent:
+ """
+ Get a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetVerifiableCredentialTemplateResponseContent
+ Template successfully retrieved.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.verifiable_credentials.verification.templates.get(
+ id="id",
+ )
+ """
+ _response = self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.verifiable_credentials.verification.templates.delete(
+ id="id",
+ )
+ """
+ _response = self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ type: typing.Optional[str] = OMIT,
+ dialect: typing.Optional[str] = OMIT,
+ presentation: typing.Optional[MdlPresentationRequest] = OMIT,
+ well_known_trusted_issuers: typing.Optional[str] = OMIT,
+ version: typing.Optional[float] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateVerifiableCredentialTemplateResponseContent:
+ """
+ Update a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ name : typing.Optional[str]
+
+ type : typing.Optional[str]
+
+ dialect : typing.Optional[str]
+
+ presentation : typing.Optional[MdlPresentationRequest]
+
+ well_known_trusted_issuers : typing.Optional[str]
+
+ version : typing.Optional[float]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateVerifiableCredentialTemplateResponseContent
+ Template successfully updated.
+
+ Examples
+ --------
+ from auth0 import Auth0
+
+ client = Auth0(
+ token="YOUR_TOKEN",
+ )
+ client.verifiable_credentials.verification.templates.update(
+ id="id",
+ )
+ """
+ _response = self._raw_client.update(
+ id,
+ name=name,
+ type=type,
+ dialect=dialect,
+ presentation=presentation,
+ well_known_trusted_issuers=well_known_trusted_issuers,
+ version=version,
+ request_options=request_options,
+ )
+ return _response.data
+
+
+class AsyncTemplatesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._raw_client = AsyncRawTemplatesClient(client_wrapper=client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawTemplatesClient:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawTemplatesClient
+ """
+ return self._raw_client
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[VerifiableCredentialTemplateResponse, ListVerifiableCredentialTemplatesPaginatedResponseContent]:
+ """
+ List a verifiable credential templates.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[VerifiableCredentialTemplateResponse, ListVerifiableCredentialTemplatesPaginatedResponseContent]
+ Templates successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ response = await client.verifiable_credentials.verification.templates.list(
+ from_="from",
+ take=1,
+ )
+ async for item in response:
+ yield item
+
+ # alternatively, you can paginate page-by-page
+ async for page in response.iter_pages():
+ yield page
+
+
+ asyncio.run(main())
+ """
+ return await self._raw_client.list(from_=from_, take=take, request_options=request_options)
+
+ async def create(
+ self,
+ *,
+ name: str,
+ type: str,
+ dialect: str,
+ presentation: MdlPresentationRequest,
+ well_known_trusted_issuers: str,
+ custom_certificate_authority: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateVerifiableCredentialTemplateResponseContent:
+ """
+ Create a verifiable credential template.
+
+ Parameters
+ ----------
+ name : str
+
+ type : str
+
+ dialect : str
+
+ presentation : MdlPresentationRequest
+
+ well_known_trusted_issuers : str
+
+ custom_certificate_authority : typing.Optional[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateVerifiableCredentialTemplateResponseContent
+ Template successfully created.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import (
+ AsyncAuth0,
+ MdlPresentationProperties,
+ MdlPresentationRequest,
+ MdlPresentationRequestProperties,
+ )
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.verifiable_credentials.verification.templates.create(
+ name="name",
+ type="type",
+ dialect="dialect",
+ presentation=MdlPresentationRequest(
+ org_iso_18013_5_1_m_dl=MdlPresentationRequestProperties(
+ org_iso_18013_5_1=MdlPresentationProperties(),
+ ),
+ ),
+ well_known_trusted_issuers="well_known_trusted_issuers",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name,
+ type=type,
+ dialect=dialect,
+ presentation=presentation,
+ well_known_trusted_issuers=well_known_trusted_issuers,
+ custom_certificate_authority=custom_certificate_authority,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetVerifiableCredentialTemplateResponseContent:
+ """
+ Get a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetVerifiableCredentialTemplateResponseContent
+ Template successfully retrieved.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.verifiable_credentials.verification.templates.get(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get(id, request_options=request_options)
+ return _response.data
+
+ async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
+ """
+ Delete a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.verifiable_credentials.verification.templates.delete(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(id, request_options=request_options)
+ return _response.data
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ type: typing.Optional[str] = OMIT,
+ dialect: typing.Optional[str] = OMIT,
+ presentation: typing.Optional[MdlPresentationRequest] = OMIT,
+ well_known_trusted_issuers: typing.Optional[str] = OMIT,
+ version: typing.Optional[float] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateVerifiableCredentialTemplateResponseContent:
+ """
+ Update a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ name : typing.Optional[str]
+
+ type : typing.Optional[str]
+
+ dialect : typing.Optional[str]
+
+ presentation : typing.Optional[MdlPresentationRequest]
+
+ well_known_trusted_issuers : typing.Optional[str]
+
+ version : typing.Optional[float]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateVerifiableCredentialTemplateResponseContent
+ Template successfully updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from auth0 import AsyncAuth0
+
+ client = AsyncAuth0(
+ token="YOUR_TOKEN",
+ )
+
+
+ async def main() -> None:
+ await client.verifiable_credentials.verification.templates.update(
+ id="id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update(
+ id,
+ name=name,
+ type=type,
+ dialect=dialect,
+ presentation=presentation,
+ well_known_trusted_issuers=well_known_trusted_issuers,
+ version=version,
+ request_options=request_options,
+ )
+ return _response.data
diff --git a/src/auth0/management/verifiable_credentials/verification/templates/raw_client.py b/src/auth0/management/verifiable_credentials/verification/templates/raw_client.py
new file mode 100644
index 00000000..4f06a6eb
--- /dev/null
+++ b/src/auth0/management/verifiable_credentials/verification/templates/raw_client.py
@@ -0,0 +1,1095 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from ....core.api_error import ApiError
+from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ....core.http_response import AsyncHttpResponse, HttpResponse
+from ....core.jsonable_encoder import jsonable_encoder
+from ....core.pagination import AsyncPager, SyncPager
+from ....core.pydantic_utilities import parse_obj_as
+from ....core.request_options import RequestOptions
+from ....core.serialization import convert_and_respect_annotation_metadata
+from ....errors.bad_request_error import BadRequestError
+from ....errors.conflict_error import ConflictError
+from ....errors.forbidden_error import ForbiddenError
+from ....errors.not_found_error import NotFoundError
+from ....errors.too_many_requests_error import TooManyRequestsError
+from ....errors.unauthorized_error import UnauthorizedError
+from ....types.create_verifiable_credential_template_response_content import (
+ CreateVerifiableCredentialTemplateResponseContent,
+)
+from ....types.get_verifiable_credential_template_response_content import GetVerifiableCredentialTemplateResponseContent
+from ....types.list_verifiable_credential_templates_paginated_response_content import (
+ ListVerifiableCredentialTemplatesPaginatedResponseContent,
+)
+from ....types.mdl_presentation_request import MdlPresentationRequest
+from ....types.update_verifiable_credential_template_response_content import (
+ UpdateVerifiableCredentialTemplateResponseContent,
+)
+from ....types.verifiable_credential_template_response import VerifiableCredentialTemplateResponse
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawTemplatesClient:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> SyncPager[VerifiableCredentialTemplateResponse, ListVerifiableCredentialTemplatesPaginatedResponseContent]:
+ """
+ List a verifiable credential templates.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ SyncPager[VerifiableCredentialTemplateResponse, ListVerifiableCredentialTemplatesPaginatedResponseContent]
+ Templates successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "verifiable-credentials/verification/templates",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListVerifiableCredentialTemplatesPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListVerifiableCredentialTemplatesPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.templates
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+ _get_next = lambda: self.list(
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+ return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def create(
+ self,
+ *,
+ name: str,
+ type: str,
+ dialect: str,
+ presentation: MdlPresentationRequest,
+ well_known_trusted_issuers: str,
+ custom_certificate_authority: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateVerifiableCredentialTemplateResponseContent]:
+ """
+ Create a verifiable credential template.
+
+ Parameters
+ ----------
+ name : str
+
+ type : str
+
+ dialect : str
+
+ presentation : MdlPresentationRequest
+
+ well_known_trusted_issuers : str
+
+ custom_certificate_authority : typing.Optional[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateVerifiableCredentialTemplateResponseContent]
+ Template successfully created.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "verifiable-credentials/verification/templates",
+ method="POST",
+ json={
+ "name": name,
+ "type": type,
+ "dialect": dialect,
+ "presentation": convert_and_respect_annotation_metadata(
+ object_=presentation, annotation=MdlPresentationRequest, direction="write"
+ ),
+ "custom_certificate_authority": custom_certificate_authority,
+ "well_known_trusted_issuers": well_known_trusted_issuers,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateVerifiableCredentialTemplateResponseContent,
+ parse_obj_as(
+ type_=CreateVerifiableCredentialTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetVerifiableCredentialTemplateResponseContent]:
+ """
+ Get a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetVerifiableCredentialTemplateResponseContent]
+ Template successfully retrieved.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"verifiable-credentials/verification/templates/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetVerifiableCredentialTemplateResponseContent,
+ parse_obj_as(
+ type_=GetVerifiableCredentialTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
+ """
+ Delete a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"verifiable-credentials/verification/templates/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ type: typing.Optional[str] = OMIT,
+ dialect: typing.Optional[str] = OMIT,
+ presentation: typing.Optional[MdlPresentationRequest] = OMIT,
+ well_known_trusted_issuers: typing.Optional[str] = OMIT,
+ version: typing.Optional[float] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateVerifiableCredentialTemplateResponseContent]:
+ """
+ Update a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ name : typing.Optional[str]
+
+ type : typing.Optional[str]
+
+ dialect : typing.Optional[str]
+
+ presentation : typing.Optional[MdlPresentationRequest]
+
+ well_known_trusted_issuers : typing.Optional[str]
+
+ version : typing.Optional[float]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateVerifiableCredentialTemplateResponseContent]
+ Template successfully updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"verifiable-credentials/verification/templates/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "type": type,
+ "dialect": dialect,
+ "presentation": convert_and_respect_annotation_metadata(
+ object_=presentation, annotation=MdlPresentationRequest, direction="write"
+ ),
+ "well_known_trusted_issuers": well_known_trusted_issuers,
+ "version": version,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateVerifiableCredentialTemplateResponseContent,
+ parse_obj_as(
+ type_=UpdateVerifiableCredentialTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawTemplatesClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list(
+ self,
+ *,
+ from_: typing.Optional[str] = None,
+ take: typing.Optional[int] = 50,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncPager[VerifiableCredentialTemplateResponse, ListVerifiableCredentialTemplatesPaginatedResponseContent]:
+ """
+ List a verifiable credential templates.
+
+ Parameters
+ ----------
+ from_ : typing.Optional[str]
+ Optional Id from which to start selection.
+
+ take : typing.Optional[int]
+ Number of results per page. Defaults to 50.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncPager[VerifiableCredentialTemplateResponse, ListVerifiableCredentialTemplatesPaginatedResponseContent]
+ Templates successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "verifiable-credentials/verification/templates",
+ method="GET",
+ params={
+ "from": from_,
+ "take": take,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _parsed_response = typing.cast(
+ ListVerifiableCredentialTemplatesPaginatedResponseContent,
+ parse_obj_as(
+ type_=ListVerifiableCredentialTemplatesPaginatedResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ _items = _parsed_response.templates
+ _parsed_next = _parsed_response.next
+ _has_next = _parsed_next is not None and _parsed_next != ""
+
+ async def _get_next():
+ return await self.list(
+ from_=_parsed_next,
+ take=take,
+ request_options=request_options,
+ )
+
+ return AsyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def create(
+ self,
+ *,
+ name: str,
+ type: str,
+ dialect: str,
+ presentation: MdlPresentationRequest,
+ well_known_trusted_issuers: str,
+ custom_certificate_authority: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateVerifiableCredentialTemplateResponseContent]:
+ """
+ Create a verifiable credential template.
+
+ Parameters
+ ----------
+ name : str
+
+ type : str
+
+ dialect : str
+
+ presentation : MdlPresentationRequest
+
+ well_known_trusted_issuers : str
+
+ custom_certificate_authority : typing.Optional[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateVerifiableCredentialTemplateResponseContent]
+ Template successfully created.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "verifiable-credentials/verification/templates",
+ method="POST",
+ json={
+ "name": name,
+ "type": type,
+ "dialect": dialect,
+ "presentation": convert_and_respect_annotation_metadata(
+ object_=presentation, annotation=MdlPresentationRequest, direction="write"
+ ),
+ "custom_certificate_authority": custom_certificate_authority,
+ "well_known_trusted_issuers": well_known_trusted_issuers,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateVerifiableCredentialTemplateResponseContent,
+ parse_obj_as(
+ type_=CreateVerifiableCredentialTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def get(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetVerifiableCredentialTemplateResponseContent]:
+ """
+ Get a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetVerifiableCredentialTemplateResponseContent]
+ Template successfully retrieved.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"verifiable-credentials/verification/templates/{jsonable_encoder(id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetVerifiableCredentialTemplateResponseContent,
+ parse_obj_as(
+ type_=GetVerifiableCredentialTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Delete a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"verifiable-credentials/verification/templates/{jsonable_encoder(id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def update(
+ self,
+ id: str,
+ *,
+ name: typing.Optional[str] = OMIT,
+ type: typing.Optional[str] = OMIT,
+ dialect: typing.Optional[str] = OMIT,
+ presentation: typing.Optional[MdlPresentationRequest] = OMIT,
+ well_known_trusted_issuers: typing.Optional[str] = OMIT,
+ version: typing.Optional[float] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateVerifiableCredentialTemplateResponseContent]:
+ """
+ Update a verifiable credential template.
+
+ Parameters
+ ----------
+ id : str
+ ID of the template to retrieve.
+
+ name : typing.Optional[str]
+
+ type : typing.Optional[str]
+
+ dialect : typing.Optional[str]
+
+ presentation : typing.Optional[MdlPresentationRequest]
+
+ well_known_trusted_issuers : typing.Optional[str]
+
+ version : typing.Optional[float]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateVerifiableCredentialTemplateResponseContent]
+ Template successfully updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"verifiable-credentials/verification/templates/{jsonable_encoder(id)}",
+ method="PATCH",
+ json={
+ "name": name,
+ "type": type,
+ "dialect": dialect,
+ "presentation": convert_and_respect_annotation_metadata(
+ object_=presentation, annotation=MdlPresentationRequest, direction="write"
+ ),
+ "well_known_trusted_issuers": well_known_trusted_issuers,
+ "version": version,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateVerifiableCredentialTemplateResponseContent,
+ parse_obj_as(
+ type_=UpdateVerifiableCredentialTemplateResponseContent, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 409:
+ raise ConflictError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 429:
+ raise TooManyRequestsError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ parse_obj_as(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/auth0/management/version.py b/src/auth0/management/version.py
new file mode 100644
index 00000000..135078c2
--- /dev/null
+++ b/src/auth0/management/version.py
@@ -0,0 +1,3 @@
+from importlib import metadata
+
+__version__ = metadata.version("auth0-python")
diff --git a/auth0/test/authentication/__init__.py b/tests/authentication/__init__.py
similarity index 100%
rename from auth0/test/authentication/__init__.py
rename to tests/authentication/__init__.py
diff --git a/auth0/test/authentication/test_back_channel_login.py b/tests/authentication/test_back_channel_login.py
similarity index 93%
rename from auth0/test/authentication/test_back_channel_login.py
rename to tests/authentication/test_back_channel_login.py
index 2b8705a2..7a675966 100644
--- a/auth0/test/authentication/test_back_channel_login.py
+++ b/tests/authentication/test_back_channel_login.py
@@ -4,12 +4,12 @@
import json
import requests
-from ...exceptions import Auth0Error, RateLimitError
+from auth0.authentication.exceptions import Auth0Error, RateLimitError
-from ...authentication.back_channel_login import BackChannelLogin
+from auth0.authentication.back_channel_login import BackChannelLogin
class TestBackChannelLogin(unittest.TestCase):
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_ciba(self, mock_post):
g = BackChannelLogin("my.domain.com", "cid", client_secret="clsec")
@@ -50,7 +50,7 @@ def test_server_error(self, mock_requests_request):
self.assertEqual(context.exception.status_code, 400)
self.assertEqual(context.exception.message, 'foo')
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_should_require_binding_message(self, mock_post):
g = BackChannelLogin("my.domain.com", "cid", client_secret="clsec")
@@ -64,7 +64,7 @@ def test_should_require_binding_message(self, mock_post):
# Assert the error message is correct
self.assertIn("missing 1 required positional argument: \'binding_message\'", str(context.exception))
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_should_require_login_hint(self, mock_post):
g = BackChannelLogin("my.domain.com", "cid", client_secret="clsec")
@@ -78,7 +78,7 @@ def test_should_require_login_hint(self, mock_post):
# Assert the error message is correct
self.assertIn("missing 1 required positional argument: \'login_hint\'", str(context.exception))
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_should_require_scope(self, mock_post):
g = BackChannelLogin("my.domain.com", "cid", client_secret="clsec")
@@ -92,7 +92,7 @@ def test_should_require_scope(self, mock_post):
# Assert the error message is correct
self.assertIn("missing 1 required positional argument: \'scope\'", str(context.exception))
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_with_authorization_details(self, mock_post):
g = BackChannelLogin("my.domain.com", "cid", client_secret="clsec")
g.back_channel_login(
@@ -153,7 +153,7 @@ def test_with_authorization_details(self, mock_post):
"Request data does not match expected data after JSON serialization."
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_with_request_expiry(self, mock_post):
g = BackChannelLogin("my.domain.com", "cid", client_secret="clsec")
diff --git a/auth0/test/authentication/test_base.py b/tests/authentication/test_base.py
similarity index 98%
rename from auth0/test/authentication/test_base.py
rename to tests/authentication/test_base.py
index a4f52d83..c98dc00b 100644
--- a/auth0/test/authentication/test_base.py
+++ b/tests/authentication/test_base.py
@@ -6,8 +6,8 @@
import requests
-from ...authentication.base import AuthenticationBase
-from ...exceptions import Auth0Error, RateLimitError
+from auth0.authentication.base import AuthenticationBase
+from auth0.authentication.exceptions import Auth0Error, RateLimitError
class TestBase(unittest.TestCase):
diff --git a/auth0/test/authentication/test_database.py b/tests/authentication/test_database.py
similarity index 92%
rename from auth0/test/authentication/test_database.py
rename to tests/authentication/test_database.py
index 1572e1ae..6ba94f13 100644
--- a/auth0/test/authentication/test_database.py
+++ b/tests/authentication/test_database.py
@@ -1,11 +1,11 @@
import unittest
from unittest import mock
-from ...authentication.database import Database
+from auth0.authentication.database import Database
class TestDatabase(unittest.TestCase):
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_signup(self, mock_post):
d = Database("my.domain.com", "cid")
@@ -60,7 +60,7 @@ def test_signup(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_change_password(self, mock_post):
d = Database("my.domain.com", "cid")
@@ -79,7 +79,7 @@ def test_change_password(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_change_password_with_organization_param(self, mock_post):
d = Database("my.domain.com", "cid")
diff --git a/auth0/test/authentication/test_delegated.py b/tests/authentication/test_delegated.py
similarity index 97%
rename from auth0/test/authentication/test_delegated.py
rename to tests/authentication/test_delegated.py
index 0ad817f2..691cb41d 100644
--- a/auth0/test/authentication/test_delegated.py
+++ b/tests/authentication/test_delegated.py
@@ -1,7 +1,7 @@
import unittest
from unittest import mock
-from ...authentication.delegated import Delegated
+from auth0.authentication.delegated import Delegated
class TestDelegated(unittest.TestCase):
diff --git a/auth0/test/authentication/test_enterprise.py b/tests/authentication/test_enterprise.py
similarity index 93%
rename from auth0/test/authentication/test_enterprise.py
rename to tests/authentication/test_enterprise.py
index 0021f0ac..54a8d5c2 100644
--- a/auth0/test/authentication/test_enterprise.py
+++ b/tests/authentication/test_enterprise.py
@@ -1,7 +1,7 @@
import unittest
from unittest import mock
-from ...authentication.enterprise import Enterprise
+from auth0.authentication.enterprise import Enterprise
class TestEnterprise(unittest.TestCase):
diff --git a/auth0/test/authentication/test_get_token.py b/tests/authentication/test_get_token.py
similarity index 92%
rename from auth0/test/authentication/test_get_token.py
rename to tests/authentication/test_get_token.py
index 7c98d341..494e542f 100644
--- a/auth0/test/authentication/test_get_token.py
+++ b/tests/authentication/test_get_token.py
@@ -6,8 +6,8 @@
from cryptography.hazmat.primitives import asymmetric, serialization
-from ...exceptions import RateLimitError
-from ...authentication.get_token import GetToken
+from auth0.authentication.exceptions import RateLimitError
+from auth0.authentication.get_token import GetToken
def get_private_key():
@@ -23,7 +23,7 @@ def get_private_key():
class TestGetToken(unittest.TestCase):
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_authorization_code(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="clsec")
@@ -47,7 +47,7 @@ def test_authorization_code(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_authorization_code_with_client_assertion(self, mock_post):
g = GetToken(
"my.domain.com", "cid", client_assertion_signing_key=get_private_key()
@@ -72,7 +72,7 @@ def test_authorization_code_with_client_assertion(self, mock_post):
self.assertTrue(fnmatch(kwargs["data"]["client_assertion"], "*.*.*"))
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_authorization_code_pkce(self, mock_post):
g = GetToken("my.domain.com", "cid")
@@ -97,7 +97,7 @@ def test_authorization_code_pkce(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_client_credentials(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="clsec")
@@ -117,7 +117,7 @@ def test_client_credentials(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_client_credentials_with_client_assertion(self, mock_post):
g = GetToken(
"my.domain.com", "cid", client_assertion_signing_key=get_private_key()
@@ -142,7 +142,7 @@ def test_client_credentials_with_client_assertion(self, mock_post):
self.assertTrue(fnmatch(kwargs["data"]["client_assertion"], "*.*.*"))
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_client_credentials_with_organization(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="clsec")
@@ -162,7 +162,7 @@ def test_client_credentials_with_organization(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_login(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="clsec")
@@ -192,7 +192,7 @@ def test_login(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_login_simple(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="clsec")
@@ -218,7 +218,7 @@ def test_login_simple(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_login_with_forwarded_for(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="clsec")
@@ -234,7 +234,7 @@ def test_login_with_forwarded_for(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_refresh_token(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="clsec")
@@ -258,7 +258,7 @@ def test_refresh_token(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_passwordless_login_with_sms(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="csec")
@@ -287,7 +287,7 @@ def test_passwordless_login_with_sms(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_passwordless_login_with_email(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="csec")
@@ -316,7 +316,7 @@ def test_passwordless_login_with_email(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_backchannel_login(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="csec")
@@ -356,7 +356,7 @@ def test_backchannel_login_headers_on_slow_down(self, mock_requests_request):
self.assertEqual(context.exception.headers["Retry-After"], "100")
self.assertEqual(context.exception.status_code, 429)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_connection_login(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="csec")
@@ -386,7 +386,7 @@ def test_connection_login(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_connection_login_with_login_hint(self, mock_post):
g = GetToken("my.domain.com", "cid", client_secret="csec")
diff --git a/auth0/test/authentication/test_passwordless.py b/tests/authentication/test_passwordless.py
similarity index 88%
rename from auth0/test/authentication/test_passwordless.py
rename to tests/authentication/test_passwordless.py
index e726ecc9..71f57b71 100644
--- a/auth0/test/authentication/test_passwordless.py
+++ b/tests/authentication/test_passwordless.py
@@ -1,11 +1,11 @@
import unittest
from unittest import mock
-from ...authentication.passwordless import Passwordless
+from auth0.authentication.passwordless import Passwordless
class TestPasswordless(unittest.TestCase):
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_send_email(self, mock_post):
p = Passwordless("my.domain.com", "cid")
@@ -24,7 +24,7 @@ def test_send_email(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_send_email_with_auth_params(self, mock_post):
p = Passwordless("my.domain.com", "cid")
@@ -44,7 +44,7 @@ def test_send_email_with_auth_params(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_send_email_with_client_secret(self, mock_post):
p = Passwordless("my.domain.com", "cid", client_secret="csecret")
@@ -64,7 +64,7 @@ def test_send_email_with_client_secret(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_send_sms(self, mock_post):
p = Passwordless("my.domain.com", "cid")
@@ -82,7 +82,7 @@ def test_send_sms(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_send_sms_with_client_secret(self, mock_post):
p = Passwordless("my.domain.com", "cid", client_secret="csecret")
diff --git a/auth0/test/authentication/test_pushed_authorization_requests.py b/tests/authentication/test_pushed_authorization_requests.py
similarity index 90%
rename from auth0/test/authentication/test_pushed_authorization_requests.py
rename to tests/authentication/test_pushed_authorization_requests.py
index 6bcb3ca7..e062dabf 100644
--- a/auth0/test/authentication/test_pushed_authorization_requests.py
+++ b/tests/authentication/test_pushed_authorization_requests.py
@@ -2,11 +2,11 @@
import json
from unittest import mock
-from ...authentication.pushed_authorization_requests import PushedAuthorizationRequests
+from auth0.authentication.pushed_authorization_requests import PushedAuthorizationRequests
class TestRevokeToken(unittest.TestCase):
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_par(self, mock_post):
a = PushedAuthorizationRequests("my.domain.com", "cid", client_secret="sh!")
a.pushed_authorization_request(
@@ -26,7 +26,7 @@ def test_par(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_par_custom_params(self, mock_post):
a = PushedAuthorizationRequests("my.domain.com", "cid", client_secret="sh!")
a.pushed_authorization_request(
@@ -47,7 +47,7 @@ def test_par_custom_params(self, mock_post):
},
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_with_authorization_details(self, mock_post):
a = PushedAuthorizationRequests("my.domain.com", "cid", client_secret="sh!")
a.pushed_authorization_request(
@@ -75,7 +75,7 @@ def test_with_authorization_details(self, mock_post):
json.dumps(expected_data, sort_keys=True)
)
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_jar(self, mock_post):
a = PushedAuthorizationRequests("my.domain.com", "cid", client_secret="sh!")
a.pushed_authorization_request(
diff --git a/auth0/test/authentication/test_revoke_token.py b/tests/authentication/test_revoke_token.py
similarity index 87%
rename from auth0/test/authentication/test_revoke_token.py
rename to tests/authentication/test_revoke_token.py
index 2f46c899..e783c8e0 100644
--- a/auth0/test/authentication/test_revoke_token.py
+++ b/tests/authentication/test_revoke_token.py
@@ -1,11 +1,11 @@
import unittest
from unittest import mock
-from ...authentication.revoke_token import RevokeToken
+from auth0.authentication.revoke_token import RevokeToken
class TestRevokeToken(unittest.TestCase):
- @mock.patch("auth0.rest.RestClient.post")
+ @mock.patch("auth0.authentication.rest.RestClient.post")
def test_revoke_refresh_token(self, mock_post):
a = RevokeToken("my.domain.com", "cid")
diff --git a/auth0/test/authentication/test_social.py b/tests/authentication/test_social.py
similarity index 96%
rename from auth0/test/authentication/test_social.py
rename to tests/authentication/test_social.py
index 8e99fc3c..cbe0e62a 100644
--- a/auth0/test/authentication/test_social.py
+++ b/tests/authentication/test_social.py
@@ -1,7 +1,7 @@
import unittest
from unittest import mock
-from ...authentication.social import Social
+from auth0.authentication.social import Social
class TestSocial(unittest.TestCase):
diff --git a/auth0/test/authentication/test_token_verifier.py b/tests/authentication/test_token_verifier.py
similarity index 99%
rename from auth0/test/authentication/test_token_verifier.py
rename to tests/authentication/test_token_verifier.py
index 33dab693..783b248c 100644
--- a/auth0/test/authentication/test_token_verifier.py
+++ b/tests/authentication/test_token_verifier.py
@@ -5,14 +5,14 @@
import jwt
-from ...authentication.token_verifier import (
+from auth0.authentication.token_verifier import (
AsymmetricSignatureVerifier,
JwksFetcher,
SignatureVerifier,
SymmetricSignatureVerifier,
TokenVerifier,
)
-from ...exceptions import TokenValidationError
+from auth0.authentication.exceptions import TokenValidationError
RSA_PUB_KEY_1_PEM = b"""-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGbXWiK3dQTyCbX5xdE4\nyCuYp0AF2d15Qq1JSXT/lx8CEcXb9RbDddl8jGDv+spi5qPa8qEHiK7FwV2KpRE9\n83wGPnYsAm9BxLFb4YrLYcDFOIGULuk2FtrPS512Qea1bXASuvYXEpQNpGbnTGVs\nWXI9C+yjHztqyL2h8P6mlThPY9E9ue2fCqdgixfTFIF9Dm4SLHbphUS2iw7w1JgT\n69s7of9+I9l5lsJ9cozf1rxrXX4V1u/SotUuNB3Fp8oB4C1fLBEhSlMcUJirz1E8\nAziMCxS+VrRPDM+zfvpIJg3JljAh3PJHDiLu902v9w+Iplu1WyoB2aPfitxEhRN0\nYwIDAQAB\n-----END PUBLIC KEY-----\n"""
RSA_PUB_KEY_2_PEM = b"""-----BEGIN PUBLIC KEY-----\nMDowDQYJKoZIhvcNAQEBBQADKQAwJgIfAI7TBUCn8e1hj/fNpb5dqMf8Jj6Ja6qN\npqyeOGYEzAIDAQAB\n-----END PUBLIC KEY-----\n"""
diff --git a/auth0/test/authentication/test_users.py b/tests/authentication/test_users.py
similarity index 76%
rename from auth0/test/authentication/test_users.py
rename to tests/authentication/test_users.py
index 043595da..253acf9d 100644
--- a/auth0/test/authentication/test_users.py
+++ b/tests/authentication/test_users.py
@@ -1,11 +1,11 @@
import unittest
from unittest import mock
-from ...authentication.users import Users
+from auth0.authentication.users import Users
class TestUsers(unittest.TestCase):
- @mock.patch("auth0.rest.RestClient.get")
+ @mock.patch("auth0.authentication.rest.RestClient.get")
def test_userinfo(self, mock_get):
u = Users("my.domain.com")
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 00000000..2103b1be
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,99 @@
+"""
+Pytest plugin that manages the WireMock container lifecycle for wire tests.
+
+This plugin is loaded globally for the test suite and is responsible for
+starting and stopping the WireMock container exactly once per test run,
+including when running with pytest-xdist over the entire project.
+
+It lives under tests/ (as tests/conftest.py) and is discovered automatically
+by pytest's normal test collection rules.
+"""
+
+import os
+import subprocess
+
+import pytest
+
+_STARTED: bool = False
+
+
+def _compose_file() -> str:
+ """Returns the path to the docker-compose file for WireMock."""
+ # This file lives in tests/conftest.py, so the project root is the parent of tests.
+ tests_dir = os.path.dirname(__file__)
+ project_root = os.path.abspath(os.path.join(tests_dir, ".."))
+ wiremock_dir = os.path.join(project_root, "wiremock")
+ return os.path.join(wiremock_dir, "docker-compose.test.yml")
+
+
+def _start_wiremock() -> None:
+ """Starts the WireMock container using docker-compose."""
+ global _STARTED
+ if _STARTED:
+ return
+
+ compose_file = _compose_file()
+ print("\nStarting WireMock container...")
+ try:
+ subprocess.run(
+ ["docker", "compose", "-f", compose_file, "up", "-d", "--wait"],
+ check=True,
+ capture_output=True,
+ text=True,
+ )
+ print("WireMock container is ready")
+ _STARTED = True
+ except subprocess.CalledProcessError as e:
+ print(f"Failed to start WireMock: {e.stderr}")
+ raise
+
+
+def _stop_wiremock() -> None:
+ """Stops and removes the WireMock container."""
+ compose_file = _compose_file()
+ print("\nStopping WireMock container...")
+ subprocess.run(
+ ["docker", "compose", "-f", compose_file, "down", "-v"],
+ check=False,
+ capture_output=True,
+ )
+
+
+def _is_xdist_worker(config: pytest.Config) -> bool:
+ """
+ Determines if the current process is an xdist worker.
+
+ In pytest-xdist, worker processes have a 'workerinput' attribute
+ on the config object, while the controller process does not.
+ """
+ return hasattr(config, "workerinput")
+
+
+def pytest_configure(config: pytest.Config) -> None:
+ """
+ Pytest hook that runs during test session setup.
+
+ Starts WireMock container only from the controller process (xdist)
+ or the single process (non-xdist). This ensures only one container
+ is started regardless of the number of worker processes.
+ """
+ if _is_xdist_worker(config):
+ # Workers never manage the container lifecycle.
+ return
+
+ _start_wiremock()
+
+
+def pytest_unconfigure(config: pytest.Config) -> None:
+ """
+ Pytest hook that runs during test session teardown.
+
+ Stops WireMock container only from the controller process (xdist)
+ or the single process (non-xdist). This ensures the container is
+ cleaned up after all workers have finished.
+ """
+ if _is_xdist_worker(config):
+ # Workers never manage the container lifecycle.
+ return
+
+ _stop_wiremock()
diff --git a/tests/custom/test_client.py b/tests/custom/test_client.py
new file mode 100644
index 00000000..ab04ce63
--- /dev/null
+++ b/tests/custom/test_client.py
@@ -0,0 +1,7 @@
+import pytest
+
+
+# Get started with writing tests with pytest at https://docs.pytest.org
+@pytest.mark.skip(reason="Unimplemented")
+def test_client() -> None:
+ assert True
diff --git a/auth0/test/management/__init__.py b/tests/management/__init__.py
similarity index 100%
rename from auth0/test/management/__init__.py
rename to tests/management/__init__.py
diff --git a/tests/management/test_management_client.py b/tests/management/test_management_client.py
new file mode 100644
index 00000000..c09c9c58
--- /dev/null
+++ b/tests/management/test_management_client.py
@@ -0,0 +1,355 @@
+import time
+from unittest.mock import MagicMock, patch
+
+import pytest
+
+from auth0.management import AsyncManagementClient, AsyncTokenProvider, ManagementClient, TokenProvider
+
+
+class TestManagementClientInit:
+ """Tests for ManagementClient initialization."""
+
+ def test_init_with_token_string(self):
+ """Should initialize with a static token string."""
+ client = ManagementClient(
+ domain="test.auth0.com",
+ token="my-test-token",
+ )
+ assert client._api is not None
+
+ def test_init_with_token_callable(self):
+ """Should initialize with a token callable."""
+ token_fn = lambda: "dynamic-token"
+ client = ManagementClient(
+ domain="test.auth0.com",
+ token=token_fn,
+ )
+ assert client._api is not None
+
+ def test_init_with_client_credentials(self):
+ """Should initialize with client_id and client_secret."""
+ client = ManagementClient(
+ domain="test.auth0.com",
+ client_id="my-client-id",
+ client_secret="my-client-secret",
+ )
+ assert client._api is not None
+
+ def test_init_with_custom_audience(self):
+ """Should initialize with a custom audience."""
+ client = ManagementClient(
+ domain="test.auth0.com",
+ client_id="my-client-id",
+ client_secret="my-client-secret",
+ audience="https://custom-api.example.com/",
+ )
+ assert client._api is not None
+
+ def test_init_requires_auth(self):
+ """Should raise ValueError when no auth is provided."""
+ with pytest.raises(ValueError) as exc_info:
+ ManagementClient(domain="test.auth0.com")
+ assert "token" in str(exc_info.value)
+ assert "client_id" in str(exc_info.value)
+
+ def test_init_requires_both_credentials(self):
+ """Should raise ValueError when only client_id is provided."""
+ with pytest.raises(ValueError):
+ ManagementClient(
+ domain="test.auth0.com",
+ client_id="my-client-id",
+ )
+
+ def test_init_with_custom_timeout(self):
+ """Should initialize with custom timeout."""
+ client = ManagementClient(
+ domain="test.auth0.com",
+ token="my-token",
+ timeout=30.0,
+ )
+ assert client._api is not None
+
+ def test_init_with_custom_headers(self):
+ """Should initialize with custom headers."""
+ client = ManagementClient(
+ domain="test.auth0.com",
+ token="my-token",
+ headers={"X-Custom-Header": "custom-value"},
+ )
+ assert client._api is not None
+
+
+class TestManagementClientProperties:
+ """Tests for ManagementClient sub-client properties."""
+
+ @pytest.fixture
+ def client(self):
+ return ManagementClient(
+ domain="test.auth0.com",
+ token="test-token",
+ )
+
+ def test_has_users_property(self, client):
+ """Should have users property."""
+ assert hasattr(client, "users")
+
+ def test_has_organizations_property(self, client):
+ """Should have organizations property."""
+ assert hasattr(client, "organizations")
+
+ def test_has_actions_property(self, client):
+ """Should have actions property."""
+ assert hasattr(client, "actions")
+
+ def test_has_all_expected_properties(self, client):
+ """Should have all expected sub-client properties."""
+ expected_properties = [
+ "actions",
+ "anomaly",
+ "attack_protection",
+ "branding",
+ "client_grants",
+ "clients",
+ "connections",
+ "custom_domains",
+ "device_credentials",
+ "email_templates",
+ "emails",
+ "event_streams",
+ "flows",
+ "forms",
+ "guardian",
+ "hooks",
+ "jobs",
+ "keys",
+ "log_streams",
+ "logs",
+ "network_acls",
+ "organizations",
+ "prompts",
+ "refresh_tokens",
+ "resource_servers",
+ "roles",
+ "rules",
+ "rules_configs",
+ "self_service_profiles",
+ "sessions",
+ "stats",
+ "supplemental_signals",
+ "tenants",
+ "tickets",
+ "token_exchange_profiles",
+ "user_blocks",
+ "user_grants",
+ "users",
+ "verifiable_credentials",
+ ]
+ for prop in expected_properties:
+ assert hasattr(client, prop), f"Missing property: {prop}"
+
+
+class TestAsyncManagementClientInit:
+ """Tests for AsyncManagementClient initialization."""
+
+ def test_init_with_token_string(self):
+ """Should initialize with a static token string."""
+ client = AsyncManagementClient(
+ domain="test.auth0.com",
+ token="my-test-token",
+ )
+ assert client._api is not None
+
+ def test_init_with_client_credentials(self):
+ """Should initialize with client_id and client_secret."""
+ client = AsyncManagementClient(
+ domain="test.auth0.com",
+ client_id="my-client-id",
+ client_secret="my-client-secret",
+ )
+ assert client._api is not None
+
+ def test_init_requires_auth(self):
+ """Should raise ValueError when no auth is provided."""
+ with pytest.raises(ValueError):
+ AsyncManagementClient(domain="test.auth0.com")
+
+
+class TestTokenProvider:
+ """Tests for TokenProvider."""
+
+ def test_init_with_defaults(self):
+ """Should initialize with default audience."""
+ provider = TokenProvider(
+ domain="test.auth0.com",
+ client_id="client-id",
+ client_secret="client-secret",
+ )
+ assert provider._audience == "https://test.auth0.com/api/v2/"
+
+ def test_init_with_custom_audience(self):
+ """Should initialize with custom audience."""
+ provider = TokenProvider(
+ domain="test.auth0.com",
+ client_id="client-id",
+ client_secret="client-secret",
+ audience="https://custom.api.com/",
+ )
+ assert provider._audience == "https://custom.api.com/"
+
+ @patch("auth0.management.token_provider.httpx.Client")
+ def test_get_token_fetches_on_first_call(self, mock_client_class):
+ """Should fetch token on first call."""
+ mock_response = MagicMock()
+ mock_response.json.return_value = {
+ "access_token": "new-token",
+ "expires_in": 86400,
+ }
+ mock_client = MagicMock()
+ mock_client.__enter__ = MagicMock(return_value=mock_client)
+ mock_client.__exit__ = MagicMock(return_value=False)
+ mock_client.post.return_value = mock_response
+ mock_client_class.return_value = mock_client
+
+ provider = TokenProvider(
+ domain="test.auth0.com",
+ client_id="client-id",
+ client_secret="client-secret",
+ )
+ token = provider.get_token()
+
+ assert token == "new-token"
+ mock_client.post.assert_called_once()
+
+ @patch("auth0.management.token_provider.httpx.Client")
+ def test_get_token_returns_cached_token(self, mock_client_class):
+ """Should return cached token on subsequent calls."""
+ mock_response = MagicMock()
+ mock_response.json.return_value = {
+ "access_token": "cached-token",
+ "expires_in": 86400,
+ }
+ mock_client = MagicMock()
+ mock_client.__enter__ = MagicMock(return_value=mock_client)
+ mock_client.__exit__ = MagicMock(return_value=False)
+ mock_client.post.return_value = mock_response
+ mock_client_class.return_value = mock_client
+
+ provider = TokenProvider(
+ domain="test.auth0.com",
+ client_id="client-id",
+ client_secret="client-secret",
+ )
+
+ # First call fetches
+ token1 = provider.get_token()
+ # Second call returns cached
+ token2 = provider.get_token()
+
+ assert token1 == token2 == "cached-token"
+ # Should only fetch once
+ assert mock_client.post.call_count == 1
+
+ @patch("auth0.management.token_provider.httpx.Client")
+ def test_get_token_refreshes_expired_token(self, mock_client_class):
+ """Should refresh token when expired (with 10s leeway)."""
+ mock_response = MagicMock()
+ mock_response.json.return_value = {
+ "access_token": "refreshed-token",
+ "expires_in": 86400,
+ }
+ mock_client = MagicMock()
+ mock_client.__enter__ = MagicMock(return_value=mock_client)
+ mock_client.__exit__ = MagicMock(return_value=False)
+ mock_client.post.return_value = mock_response
+ mock_client_class.return_value = mock_client
+
+ provider = TokenProvider(
+ domain="test.auth0.com",
+ client_id="client-id",
+ client_secret="client-secret",
+ )
+
+ # First call
+ provider.get_token()
+
+ # Simulate token being close to expiration (within leeway)
+ provider._expires_at = time.time() + 5 # 5 seconds left, less than 10s leeway
+
+ # This should trigger a refresh
+ token = provider.get_token()
+
+ assert token == "refreshed-token"
+ assert mock_client.post.call_count == 2
+
+ @patch("auth0.management.token_provider.httpx.Client")
+ def test_token_request_payload(self, mock_client_class):
+ """Should send correct payload to token endpoint."""
+ mock_response = MagicMock()
+ mock_response.json.return_value = {
+ "access_token": "token",
+ "expires_in": 86400,
+ }
+ mock_client = MagicMock()
+ mock_client.__enter__ = MagicMock(return_value=mock_client)
+ mock_client.__exit__ = MagicMock(return_value=False)
+ mock_client.post.return_value = mock_response
+ mock_client_class.return_value = mock_client
+
+ provider = TokenProvider(
+ domain="test.auth0.com",
+ client_id="my-client",
+ client_secret="my-secret",
+ audience="https://api.example.com/",
+ )
+ provider.get_token()
+
+ mock_client.post.assert_called_once_with(
+ "https://test.auth0.com/oauth/token",
+ data={
+ "grant_type": "client_credentials",
+ "client_id": "my-client",
+ "client_secret": "my-secret",
+ "audience": "https://api.example.com/",
+ },
+ )
+
+
+class TestAsyncTokenProvider:
+ """Tests for AsyncTokenProvider."""
+
+ def test_init_with_defaults(self):
+ """Should initialize with default audience."""
+ provider = AsyncTokenProvider(
+ domain="test.auth0.com",
+ client_id="client-id",
+ client_secret="client-secret",
+ )
+ assert provider._audience == "https://test.auth0.com/api/v2/"
+
+ def test_init_with_custom_audience(self):
+ """Should initialize with custom audience."""
+ provider = AsyncTokenProvider(
+ domain="test.auth0.com",
+ client_id="client-id",
+ client_secret="client-secret",
+ audience="https://custom.api.com/",
+ )
+ assert provider._audience == "https://custom.api.com/"
+
+
+class TestImports:
+ """Tests for module imports."""
+
+ def test_import_from_management(self):
+ """Should be able to import from auth0.management."""
+ from auth0.management import (
+ AsyncManagementClient,
+ AsyncTokenProvider,
+ ManagementClient,
+ TokenProvider,
+ )
+
+ assert ManagementClient is not None
+ assert AsyncManagementClient is not None
+ assert TokenProvider is not None
+ assert AsyncTokenProvider is not None
diff --git a/tests/utils/__init__.py b/tests/utils/__init__.py
new file mode 100644
index 00000000..f3ea2659
--- /dev/null
+++ b/tests/utils/__init__.py
@@ -0,0 +1,2 @@
+# This file was auto-generated by Fern from our API Definition.
+
diff --git a/tests/utils/assets/models/__init__.py b/tests/utils/assets/models/__init__.py
new file mode 100644
index 00000000..2cf01263
--- /dev/null
+++ b/tests/utils/assets/models/__init__.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# This file was auto-generated by Fern from our API Definition.
+
+from .circle import CircleParams
+from .object_with_defaults import ObjectWithDefaultsParams
+from .object_with_optional_field import ObjectWithOptionalFieldParams
+from .shape import Shape_CircleParams, Shape_SquareParams, ShapeParams
+from .square import SquareParams
+from .undiscriminated_shape import UndiscriminatedShapeParams
+
+__all__ = [
+ "CircleParams",
+ "ObjectWithDefaultsParams",
+ "ObjectWithOptionalFieldParams",
+ "ShapeParams",
+ "Shape_CircleParams",
+ "Shape_SquareParams",
+ "SquareParams",
+ "UndiscriminatedShapeParams",
+]
diff --git a/tests/utils/assets/models/circle.py b/tests/utils/assets/models/circle.py
new file mode 100644
index 00000000..5c7652e5
--- /dev/null
+++ b/tests/utils/assets/models/circle.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# This file was auto-generated by Fern from our API Definition.
+
+import typing_extensions
+
+from auth0.management.core.serialization import FieldMetadata
+
+
+class CircleParams(typing_extensions.TypedDict):
+ radius_measurement: typing_extensions.Annotated[float, FieldMetadata(alias="radiusMeasurement")]
diff --git a/tests/utils/assets/models/color.py b/tests/utils/assets/models/color.py
new file mode 100644
index 00000000..2aa2c4c5
--- /dev/null
+++ b/tests/utils/assets/models/color.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+Color = typing.Union[typing.Literal["red", "blue"], typing.Any]
diff --git a/tests/utils/assets/models/object_with_defaults.py b/tests/utils/assets/models/object_with_defaults.py
new file mode 100644
index 00000000..a977b1d2
--- /dev/null
+++ b/tests/utils/assets/models/object_with_defaults.py
@@ -0,0 +1,15 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# This file was auto-generated by Fern from our API Definition.
+
+import typing_extensions
+
+
+class ObjectWithDefaultsParams(typing_extensions.TypedDict):
+ """
+ Defines properties with default values and validation rules.
+ """
+
+ decimal: typing_extensions.NotRequired[float]
+ string: typing_extensions.NotRequired[str]
+ required_string: str
diff --git a/tests/utils/assets/models/object_with_optional_field.py b/tests/utils/assets/models/object_with_optional_field.py
new file mode 100644
index 00000000..b68d4bb9
--- /dev/null
+++ b/tests/utils/assets/models/object_with_optional_field.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+import uuid
+
+import typing_extensions
+from .color import Color
+from .shape import ShapeParams
+from .undiscriminated_shape import UndiscriminatedShapeParams
+
+from auth0.management.core.serialization import FieldMetadata
+
+
+class ObjectWithOptionalFieldParams(typing_extensions.TypedDict):
+ literal: typing.Literal["lit_one"]
+ string: typing_extensions.NotRequired[str]
+ integer: typing_extensions.NotRequired[int]
+ long_: typing_extensions.NotRequired[typing_extensions.Annotated[int, FieldMetadata(alias="long")]]
+ double: typing_extensions.NotRequired[float]
+ bool_: typing_extensions.NotRequired[typing_extensions.Annotated[bool, FieldMetadata(alias="bool")]]
+ datetime: typing_extensions.NotRequired[dt.datetime]
+ date: typing_extensions.NotRequired[dt.date]
+ uuid_: typing_extensions.NotRequired[typing_extensions.Annotated[uuid.UUID, FieldMetadata(alias="uuid")]]
+ base_64: typing_extensions.NotRequired[typing_extensions.Annotated[str, FieldMetadata(alias="base64")]]
+ list_: typing_extensions.NotRequired[typing_extensions.Annotated[typing.Sequence[str], FieldMetadata(alias="list")]]
+ set_: typing_extensions.NotRequired[typing_extensions.Annotated[typing.Set[str], FieldMetadata(alias="set")]]
+ map_: typing_extensions.NotRequired[typing_extensions.Annotated[typing.Dict[int, str], FieldMetadata(alias="map")]]
+ enum: typing_extensions.NotRequired[Color]
+ union: typing_extensions.NotRequired[ShapeParams]
+ second_union: typing_extensions.NotRequired[ShapeParams]
+ undiscriminated_union: typing_extensions.NotRequired[UndiscriminatedShapeParams]
+ any: typing.Optional[typing.Any]
diff --git a/tests/utils/assets/models/shape.py b/tests/utils/assets/models/shape.py
new file mode 100644
index 00000000..e2db6434
--- /dev/null
+++ b/tests/utils/assets/models/shape.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# This file was auto-generated by Fern from our API Definition.
+
+from __future__ import annotations
+
+import typing
+
+import typing_extensions
+
+from auth0.management.core.serialization import FieldMetadata
+
+
+class Base(typing_extensions.TypedDict):
+ id: str
+
+
+class Shape_CircleParams(Base):
+ shape_type: typing_extensions.Annotated[typing.Literal["circle"], FieldMetadata(alias="shapeType")]
+ radius_measurement: typing_extensions.Annotated[float, FieldMetadata(alias="radiusMeasurement")]
+
+
+class Shape_SquareParams(Base):
+ shape_type: typing_extensions.Annotated[typing.Literal["square"], FieldMetadata(alias="shapeType")]
+ length_measurement: typing_extensions.Annotated[float, FieldMetadata(alias="lengthMeasurement")]
+
+
+ShapeParams = typing.Union[Shape_CircleParams, Shape_SquareParams]
diff --git a/tests/utils/assets/models/square.py b/tests/utils/assets/models/square.py
new file mode 100644
index 00000000..16251614
--- /dev/null
+++ b/tests/utils/assets/models/square.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# This file was auto-generated by Fern from our API Definition.
+
+import typing_extensions
+
+from auth0.management.core.serialization import FieldMetadata
+
+
+class SquareParams(typing_extensions.TypedDict):
+ length_measurement: typing_extensions.Annotated[float, FieldMetadata(alias="lengthMeasurement")]
diff --git a/tests/utils/assets/models/undiscriminated_shape.py b/tests/utils/assets/models/undiscriminated_shape.py
new file mode 100644
index 00000000..99f12b30
--- /dev/null
+++ b/tests/utils/assets/models/undiscriminated_shape.py
@@ -0,0 +1,10 @@
+# This file was auto-generated by Fern from our API Definition.
+
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .circle import CircleParams
+from .square import SquareParams
+
+UndiscriminatedShapeParams = typing.Union[CircleParams, SquareParams]
diff --git a/tests/utils/test_http_client.py b/tests/utils/test_http_client.py
new file mode 100644
index 00000000..f1e07ea6
--- /dev/null
+++ b/tests/utils/test_http_client.py
@@ -0,0 +1,253 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from typing import Any, Dict
+
+import pytest
+
+from auth0.management.core.http_client import AsyncHttpClient, HttpClient, get_request_body, remove_none_from_dict
+from auth0.management.core.request_options import RequestOptions
+
+
+# Stub clients for testing HttpClient and AsyncHttpClient
+class _DummySyncClient:
+ """A minimal stub for httpx.Client that records request arguments."""
+
+ def __init__(self) -> None:
+ self.last_request_kwargs: Dict[str, Any] = {}
+
+ def request(self, **kwargs: Any) -> "_DummyResponse":
+ self.last_request_kwargs = kwargs
+ return _DummyResponse()
+
+
+class _DummyAsyncClient:
+ """A minimal stub for httpx.AsyncClient that records request arguments."""
+
+ def __init__(self) -> None:
+ self.last_request_kwargs: Dict[str, Any] = {}
+
+ async def request(self, **kwargs: Any) -> "_DummyResponse":
+ self.last_request_kwargs = kwargs
+ return _DummyResponse()
+
+
+class _DummyResponse:
+ """A minimal stub for httpx.Response."""
+
+ status_code = 200
+ headers: Dict[str, str] = {}
+
+
+def get_request_options() -> RequestOptions:
+ return {"additional_body_parameters": {"see you": "later"}}
+
+
+def get_request_options_with_none() -> RequestOptions:
+ return {"additional_body_parameters": {"see you": "later", "optional": None}}
+
+
+def test_get_json_request_body() -> None:
+ json_body, data_body = get_request_body(json={"hello": "world"}, data=None, request_options=None, omit=None)
+ assert json_body == {"hello": "world"}
+ assert data_body is None
+
+ json_body_extras, data_body_extras = get_request_body(
+ json={"goodbye": "world"}, data=None, request_options=get_request_options(), omit=None
+ )
+
+ assert json_body_extras == {"goodbye": "world", "see you": "later"}
+ assert data_body_extras is None
+
+
+def test_get_files_request_body() -> None:
+ json_body, data_body = get_request_body(json=None, data={"hello": "world"}, request_options=None, omit=None)
+ assert data_body == {"hello": "world"}
+ assert json_body is None
+
+ json_body_extras, data_body_extras = get_request_body(
+ json=None, data={"goodbye": "world"}, request_options=get_request_options(), omit=None
+ )
+
+ assert data_body_extras == {"goodbye": "world", "see you": "later"}
+ assert json_body_extras is None
+
+
+def test_get_none_request_body() -> None:
+ json_body, data_body = get_request_body(json=None, data=None, request_options=None, omit=None)
+ assert data_body is None
+ assert json_body is None
+
+ json_body_extras, data_body_extras = get_request_body(
+ json=None, data=None, request_options=get_request_options(), omit=None
+ )
+
+ assert json_body_extras == {"see you": "later"}
+ assert data_body_extras is None
+
+
+def test_get_empty_json_request_body() -> None:
+ unrelated_request_options: RequestOptions = {"max_retries": 3}
+ json_body, data_body = get_request_body(json=None, data=None, request_options=unrelated_request_options, omit=None)
+ assert json_body is None
+ assert data_body is None
+
+ json_body_extras, data_body_extras = get_request_body(
+ json={}, data=None, request_options=unrelated_request_options, omit=None
+ )
+
+ assert json_body_extras is None
+ assert data_body_extras is None
+
+
+def test_json_body_preserves_none_values() -> None:
+ """Test that JSON bodies preserve None values (they become JSON null)."""
+ json_body, data_body = get_request_body(
+ json={"hello": "world", "optional": None}, data=None, request_options=None, omit=None
+ )
+ # JSON bodies should preserve None values
+ assert json_body == {"hello": "world", "optional": None}
+ assert data_body is None
+
+
+def test_data_body_preserves_none_values_without_multipart() -> None:
+ """Test that data bodies preserve None values when not using multipart.
+
+ The filtering of None values happens in HttpClient.request/stream methods,
+ not in get_request_body. This test verifies get_request_body doesn't filter None.
+ """
+ json_body, data_body = get_request_body(
+ json=None, data={"hello": "world", "optional": None}, request_options=None, omit=None
+ )
+ # get_request_body should preserve None values in data body
+ # The filtering happens later in HttpClient.request when multipart is detected
+ assert data_body == {"hello": "world", "optional": None}
+ assert json_body is None
+
+
+def test_remove_none_from_dict_filters_none_values() -> None:
+ """Test that remove_none_from_dict correctly filters out None values."""
+ original = {"hello": "world", "optional": None, "another": "value", "also_none": None}
+ filtered = remove_none_from_dict(original)
+ assert filtered == {"hello": "world", "another": "value"}
+ # Original should not be modified
+ assert original == {"hello": "world", "optional": None, "another": "value", "also_none": None}
+
+
+def test_remove_none_from_dict_empty_dict() -> None:
+ """Test that remove_none_from_dict handles empty dict."""
+ assert remove_none_from_dict({}) == {}
+
+
+def test_remove_none_from_dict_all_none() -> None:
+ """Test that remove_none_from_dict handles dict with all None values."""
+ assert remove_none_from_dict({"a": None, "b": None}) == {}
+
+
+def test_http_client_does_not_pass_empty_params_list() -> None:
+ """Test that HttpClient passes params=None when params are empty.
+
+ This prevents httpx from stripping existing query parameters from the URL,
+ which happens when params=[] or params={} is passed.
+ """
+ dummy_client = _DummySyncClient()
+ http_client = HttpClient(
+ httpx_client=dummy_client, # type: ignore[arg-type]
+ base_timeout=lambda: None,
+ base_headers=lambda: {},
+ base_url=lambda: "https://example.com",
+ )
+
+ # Use a path with query params (e.g., pagination cursor URL)
+ http_client.request(
+ path="resource?after=123",
+ method="GET",
+ params=None,
+ request_options=None,
+ )
+
+ # We care that httpx receives params=None, not [] or {}
+ assert "params" in dummy_client.last_request_kwargs
+ assert dummy_client.last_request_kwargs["params"] is None
+
+ # Verify the query string in the URL is preserved
+ url = str(dummy_client.last_request_kwargs["url"])
+ assert "after=123" in url, f"Expected query param 'after=123' in URL, got: {url}"
+
+
+def test_http_client_passes_encoded_params_when_present() -> None:
+ """Test that HttpClient passes encoded params when params are provided."""
+ dummy_client = _DummySyncClient()
+ http_client = HttpClient(
+ httpx_client=dummy_client, # type: ignore[arg-type]
+ base_timeout=lambda: None,
+ base_headers=lambda: {},
+ base_url=lambda: "https://example.com/resource",
+ )
+
+ http_client.request(
+ path="",
+ method="GET",
+ params={"after": "456"},
+ request_options=None,
+ )
+
+ params = dummy_client.last_request_kwargs["params"]
+ # For a simple dict, encode_query should give a single (key, value) tuple
+ assert params == [("after", "456")]
+
+
+@pytest.mark.asyncio
+async def test_async_http_client_does_not_pass_empty_params_list() -> None:
+ """Test that AsyncHttpClient passes params=None when params are empty.
+
+ This prevents httpx from stripping existing query parameters from the URL,
+ which happens when params=[] or params={} is passed.
+ """
+ dummy_client = _DummyAsyncClient()
+ http_client = AsyncHttpClient(
+ httpx_client=dummy_client, # type: ignore[arg-type]
+ base_timeout=lambda: None,
+ base_headers=lambda: {},
+ base_url=lambda: "https://example.com",
+ async_base_headers=None,
+ )
+
+ # Use a path with query params (e.g., pagination cursor URL)
+ await http_client.request(
+ path="resource?after=123",
+ method="GET",
+ params=None,
+ request_options=None,
+ )
+
+ # We care that httpx receives params=None, not [] or {}
+ assert "params" in dummy_client.last_request_kwargs
+ assert dummy_client.last_request_kwargs["params"] is None
+
+ # Verify the query string in the URL is preserved
+ url = str(dummy_client.last_request_kwargs["url"])
+ assert "after=123" in url, f"Expected query param 'after=123' in URL, got: {url}"
+
+
+@pytest.mark.asyncio
+async def test_async_http_client_passes_encoded_params_when_present() -> None:
+ """Test that AsyncHttpClient passes encoded params when params are provided."""
+ dummy_client = _DummyAsyncClient()
+ http_client = AsyncHttpClient(
+ httpx_client=dummy_client, # type: ignore[arg-type]
+ base_timeout=lambda: None,
+ base_headers=lambda: {},
+ base_url=lambda: "https://example.com/resource",
+ async_base_headers=None,
+ )
+
+ await http_client.request(
+ path="",
+ method="GET",
+ params={"after": "456"},
+ request_options=None,
+ )
+
+ params = dummy_client.last_request_kwargs["params"]
+ # For a simple dict, encode_query should give a single (key, value) tuple
+ assert params == [("after", "456")]
diff --git a/tests/utils/test_query_encoding.py b/tests/utils/test_query_encoding.py
new file mode 100644
index 00000000..a51989c4
--- /dev/null
+++ b/tests/utils/test_query_encoding.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from auth0.management.core.query_encoder import encode_query
+
+
+def test_query_encoding_deep_objects() -> None:
+ assert encode_query({"hello world": "hello world"}) == [("hello world", "hello world")]
+ assert encode_query({"hello_world": {"hello": "world"}}) == [("hello_world[hello]", "world")]
+ assert encode_query({"hello_world": {"hello": {"world": "today"}, "test": "this"}, "hi": "there"}) == [
+ ("hello_world[hello][world]", "today"),
+ ("hello_world[test]", "this"),
+ ("hi", "there"),
+ ]
+
+
+def test_query_encoding_deep_object_arrays() -> None:
+ assert encode_query({"objects": [{"key": "hello", "value": "world"}, {"key": "foo", "value": "bar"}]}) == [
+ ("objects[key]", "hello"),
+ ("objects[value]", "world"),
+ ("objects[key]", "foo"),
+ ("objects[value]", "bar"),
+ ]
+ assert encode_query(
+ {"users": [{"name": "string", "tags": ["string"]}, {"name": "string2", "tags": ["string2", "string3"]}]}
+ ) == [
+ ("users[name]", "string"),
+ ("users[tags]", "string"),
+ ("users[name]", "string2"),
+ ("users[tags]", "string2"),
+ ("users[tags]", "string3"),
+ ]
+
+
+def test_encode_query_with_none() -> None:
+ encoded = encode_query(None)
+ assert encoded is None
diff --git a/tests/utils/test_serialization.py b/tests/utils/test_serialization.py
new file mode 100644
index 00000000..4657c88d
--- /dev/null
+++ b/tests/utils/test_serialization.py
@@ -0,0 +1,72 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from typing import Any, List
+
+from .assets.models import ObjectWithOptionalFieldParams, ShapeParams
+
+from auth0.management.core.serialization import convert_and_respect_annotation_metadata
+
+UNION_TEST: ShapeParams = {"radius_measurement": 1.0, "shape_type": "circle", "id": "1"}
+UNION_TEST_CONVERTED = {"shapeType": "circle", "radiusMeasurement": 1.0, "id": "1"}
+
+
+def test_convert_and_respect_annotation_metadata() -> None:
+ data: ObjectWithOptionalFieldParams = {
+ "string": "string",
+ "long_": 12345,
+ "bool_": True,
+ "literal": "lit_one",
+ "any": "any",
+ }
+ converted = convert_and_respect_annotation_metadata(
+ object_=data, annotation=ObjectWithOptionalFieldParams, direction="write"
+ )
+ assert converted == {"string": "string", "long": 12345, "bool": True, "literal": "lit_one", "any": "any"}
+
+
+def test_convert_and_respect_annotation_metadata_in_list() -> None:
+ data: List[ObjectWithOptionalFieldParams] = [
+ {"string": "string", "long_": 12345, "bool_": True, "literal": "lit_one", "any": "any"},
+ {"string": "another string", "long_": 67890, "list_": [], "literal": "lit_one", "any": "any"},
+ ]
+ converted = convert_and_respect_annotation_metadata(
+ object_=data, annotation=List[ObjectWithOptionalFieldParams], direction="write"
+ )
+
+ assert converted == [
+ {"string": "string", "long": 12345, "bool": True, "literal": "lit_one", "any": "any"},
+ {"string": "another string", "long": 67890, "list": [], "literal": "lit_one", "any": "any"},
+ ]
+
+
+def test_convert_and_respect_annotation_metadata_in_nested_object() -> None:
+ data: ObjectWithOptionalFieldParams = {
+ "string": "string",
+ "long_": 12345,
+ "union": UNION_TEST,
+ "literal": "lit_one",
+ "any": "any",
+ }
+ converted = convert_and_respect_annotation_metadata(
+ object_=data, annotation=ObjectWithOptionalFieldParams, direction="write"
+ )
+
+ assert converted == {
+ "string": "string",
+ "long": 12345,
+ "union": UNION_TEST_CONVERTED,
+ "literal": "lit_one",
+ "any": "any",
+ }
+
+
+def test_convert_and_respect_annotation_metadata_in_union() -> None:
+ converted = convert_and_respect_annotation_metadata(object_=UNION_TEST, annotation=ShapeParams, direction="write")
+
+ assert converted == UNION_TEST_CONVERTED
+
+
+def test_convert_and_respect_annotation_metadata_with_empty_object() -> None:
+ data: Any = {}
+ converted = convert_and_respect_annotation_metadata(object_=data, annotation=ShapeParams, direction="write")
+ assert converted == data
diff --git a/auth0/test_async/__init__.py b/tests/wire/__init__.py
similarity index 100%
rename from auth0/test_async/__init__.py
rename to tests/wire/__init__.py
diff --git a/tests/wire/conftest.py b/tests/wire/conftest.py
new file mode 100644
index 00000000..fa87264e
--- /dev/null
+++ b/tests/wire/conftest.py
@@ -0,0 +1,57 @@
+"""
+Pytest configuration for wire tests.
+
+This module provides helpers for creating a configured client that talks to
+WireMock and for verifying requests in WireMock.
+
+The WireMock container lifecycle itself is managed by a top-level pytest
+plugin (wiremock_pytest_plugin.py) so that the container is started exactly
+once per test run, even when using pytest-xdist.
+"""
+
+from typing import Any, Dict, Optional
+
+import requests
+
+from auth0.management.client import Auth0
+
+
+def get_client(test_id: str) -> Auth0:
+ """
+ Creates a configured client instance for wire tests.
+
+ Args:
+ test_id: Unique identifier for the test, used for request tracking.
+
+ Returns:
+ A configured client instance with all required auth parameters.
+ """
+ return Auth0(
+ base_url="http://localhost:8080",
+ headers={"X-Test-Id": test_id},
+ token="test_token",
+ )
+
+
+def verify_request_count(
+ test_id: str,
+ method: str,
+ url_path: str,
+ query_params: Optional[Dict[str, str]],
+ expected: int,
+) -> None:
+ """Verifies the number of requests made to WireMock filtered by test ID for concurrency safety"""
+ wiremock_admin_url = "http://localhost:8080/__admin"
+ request_body: Dict[str, Any] = {
+ "method": method,
+ "urlPath": url_path,
+ "headers": {"X-Test-Id": {"equalTo": test_id}},
+ }
+ if query_params:
+ query_parameters = {k: {"equalTo": v} for k, v in query_params.items()}
+ request_body["queryParameters"] = query_parameters
+ response = requests.post(f"{wiremock_admin_url}/requests/find", json=request_body)
+ assert response.status_code == 200, "Failed to query WireMock requests"
+ result = response.json()
+ requests_found = len(result.get("requests", []))
+ assert requests_found == expected, f"Expected {expected} requests, found {requests_found}"
diff --git a/tests/wire/test_actions.py b/tests/wire/test_actions.py
new file mode 100644
index 00000000..efdd72a7
--- /dev/null
+++ b/tests/wire/test_actions.py
@@ -0,0 +1,72 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_actions_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "actions.list_.0"
+ client = get_client(test_id)
+ client.actions.list(
+ trigger_id="triggerId", action_name="actionName", deployed=True, page=1, per_page=1, installed=True
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/actions/actions",
+ {
+ "triggerId": "triggerId",
+ "actionName": "actionName",
+ "deployed": "true",
+ "page": "1",
+ "per_page": "1",
+ "installed": "true",
+ },
+ 1,
+ )
+
+
+def test_actions_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "actions.create.0"
+ client = get_client(test_id)
+ client.actions.create(name="name", supported_triggers=[{"id": "id"}])
+ verify_request_count(test_id, "POST", "/actions/actions", None, 1)
+
+
+def test_actions_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "actions.get.0"
+ client = get_client(test_id)
+ client.actions.get(id="id")
+ verify_request_count(test_id, "GET", "/actions/actions/id", None, 1)
+
+
+def test_actions_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "actions.delete.0"
+ client = get_client(test_id)
+ client.actions.delete(id="id", force=True)
+ verify_request_count(test_id, "DELETE", "/actions/actions/id", {"force": "true"}, 1)
+
+
+def test_actions_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "actions.update.0"
+ client = get_client(test_id)
+ client.actions.update(id="id")
+ verify_request_count(test_id, "PATCH", "/actions/actions/id", None, 1)
+
+
+def test_actions_deploy() -> None:
+ """Test deploy endpoint with WireMock"""
+ test_id = "actions.deploy.0"
+ client = get_client(test_id)
+ client.actions.deploy(id="id")
+ verify_request_count(test_id, "POST", "/actions/actions/id/deploy", None, 1)
+
+
+def test_actions_test() -> None:
+ """Test test endpoint with WireMock"""
+ test_id = "actions.test.0"
+ client = get_client(test_id)
+ client.actions.test(id="id", payload={"key": "value"})
+ verify_request_count(test_id, "POST", "/actions/actions/id/test", None, 1)
diff --git a/tests/wire/test_actions_executions.py b/tests/wire/test_actions_executions.py
new file mode 100644
index 00000000..01a59518
--- /dev/null
+++ b/tests/wire/test_actions_executions.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_actions_executions_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "actions.executions.get.0"
+ client = get_client(test_id)
+ client.actions.executions.get(id="id")
+ verify_request_count(test_id, "GET", "/actions/executions/id", None, 1)
diff --git a/tests/wire/test_actions_triggers.py b/tests/wire/test_actions_triggers.py
new file mode 100644
index 00000000..1b0a6c68
--- /dev/null
+++ b/tests/wire/test_actions_triggers.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_actions_triggers_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "actions.triggers.list_.0"
+ client = get_client(test_id)
+ client.actions.triggers.list()
+ verify_request_count(test_id, "GET", "/actions/triggers", None, 1)
diff --git a/tests/wire/test_actions_triggers_bindings.py b/tests/wire/test_actions_triggers_bindings.py
new file mode 100644
index 00000000..2be58b8a
--- /dev/null
+++ b/tests/wire/test_actions_triggers_bindings.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_actions_triggers_bindings_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "actions.triggers.bindings.list_.0"
+ client = get_client(test_id)
+ client.actions.triggers.bindings.list(trigger_id="triggerId", page=1, per_page=1)
+ verify_request_count(test_id, "GET", "/actions/triggers/triggerId/bindings", {"page": "1", "per_page": "1"}, 1)
+
+
+def test_actions_triggers_bindings_update_many() -> None:
+ """Test updateMany endpoint with WireMock"""
+ test_id = "actions.triggers.bindings.update_many.0"
+ client = get_client(test_id)
+ client.actions.triggers.bindings.update_many(trigger_id="triggerId")
+ verify_request_count(test_id, "PATCH", "/actions/triggers/triggerId/bindings", None, 1)
diff --git a/tests/wire/test_actions_versions.py b/tests/wire/test_actions_versions.py
new file mode 100644
index 00000000..38c68b2c
--- /dev/null
+++ b/tests/wire/test_actions_versions.py
@@ -0,0 +1,25 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_actions_versions_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "actions.versions.list_.0"
+ client = get_client(test_id)
+ client.actions.versions.list(action_id="actionId", page=1, per_page=1)
+ verify_request_count(test_id, "GET", "/actions/actions/actionId/versions", {"page": "1", "per_page": "1"}, 1)
+
+
+def test_actions_versions_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "actions.versions.get.0"
+ client = get_client(test_id)
+ client.actions.versions.get(action_id="actionId", id="id")
+ verify_request_count(test_id, "GET", "/actions/actions/actionId/versions/id", None, 1)
+
+
+def test_actions_versions_deploy() -> None:
+ """Test deploy endpoint with WireMock"""
+ test_id = "actions.versions.deploy.0"
+ client = get_client(test_id)
+ client.actions.versions.deploy(action_id="actionId", id="id", request={})
+ verify_request_count(test_id, "POST", "/actions/actions/actionId/versions/id/deploy", None, 1)
diff --git a/tests/wire/test_anomaly_blocks.py b/tests/wire/test_anomaly_blocks.py
new file mode 100644
index 00000000..e636a0d4
--- /dev/null
+++ b/tests/wire/test_anomaly_blocks.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_anomaly_blocks_check_ip() -> None:
+ """Test checkIp endpoint with WireMock"""
+ test_id = "anomaly.blocks.check_ip.0"
+ client = get_client(test_id)
+ client.anomaly.blocks.check_ip(id="id")
+ verify_request_count(test_id, "GET", "/anomaly/blocks/ips/id", None, 1)
+
+
+def test_anomaly_blocks_unblock_ip() -> None:
+ """Test unblockIp endpoint with WireMock"""
+ test_id = "anomaly.blocks.unblock_ip.0"
+ client = get_client(test_id)
+ client.anomaly.blocks.unblock_ip(id="id")
+ verify_request_count(test_id, "DELETE", "/anomaly/blocks/ips/id", None, 1)
diff --git a/tests/wire/test_attackProtection_botDetection.py b/tests/wire/test_attackProtection_botDetection.py
new file mode 100644
index 00000000..82518e20
--- /dev/null
+++ b/tests/wire/test_attackProtection_botDetection.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_attackProtection_botDetection_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "attack_protection.bot_detection.get.0"
+ client = get_client(test_id)
+ client.attack_protection.bot_detection.get()
+ verify_request_count(test_id, "GET", "/attack-protection/bot-detection", None, 1)
+
+
+def test_attackProtection_botDetection_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "attack_protection.bot_detection.update.0"
+ client = get_client(test_id)
+ client.attack_protection.bot_detection.update()
+ verify_request_count(test_id, "PATCH", "/attack-protection/bot-detection", None, 1)
diff --git a/tests/wire/test_attackProtection_breachedPasswordDetection.py b/tests/wire/test_attackProtection_breachedPasswordDetection.py
new file mode 100644
index 00000000..c1fe47bb
--- /dev/null
+++ b/tests/wire/test_attackProtection_breachedPasswordDetection.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_attackProtection_breachedPasswordDetection_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "attack_protection.breached_password_detection.get.0"
+ client = get_client(test_id)
+ client.attack_protection.breached_password_detection.get()
+ verify_request_count(test_id, "GET", "/attack-protection/breached-password-detection", None, 1)
+
+
+def test_attackProtection_breachedPasswordDetection_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "attack_protection.breached_password_detection.update.0"
+ client = get_client(test_id)
+ client.attack_protection.breached_password_detection.update()
+ verify_request_count(test_id, "PATCH", "/attack-protection/breached-password-detection", None, 1)
diff --git a/tests/wire/test_attackProtection_bruteForceProtection.py b/tests/wire/test_attackProtection_bruteForceProtection.py
new file mode 100644
index 00000000..41badaf1
--- /dev/null
+++ b/tests/wire/test_attackProtection_bruteForceProtection.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_attackProtection_bruteForceProtection_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "attack_protection.brute_force_protection.get.0"
+ client = get_client(test_id)
+ client.attack_protection.brute_force_protection.get()
+ verify_request_count(test_id, "GET", "/attack-protection/brute-force-protection", None, 1)
+
+
+def test_attackProtection_bruteForceProtection_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "attack_protection.brute_force_protection.update.0"
+ client = get_client(test_id)
+ client.attack_protection.brute_force_protection.update()
+ verify_request_count(test_id, "PATCH", "/attack-protection/brute-force-protection", None, 1)
diff --git a/tests/wire/test_attackProtection_captcha.py b/tests/wire/test_attackProtection_captcha.py
new file mode 100644
index 00000000..1555293c
--- /dev/null
+++ b/tests/wire/test_attackProtection_captcha.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_attackProtection_captcha_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "attack_protection.captcha.get.0"
+ client = get_client(test_id)
+ client.attack_protection.captcha.get()
+ verify_request_count(test_id, "GET", "/attack-protection/captcha", None, 1)
+
+
+def test_attackProtection_captcha_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "attack_protection.captcha.update.0"
+ client = get_client(test_id)
+ client.attack_protection.captcha.update()
+ verify_request_count(test_id, "PATCH", "/attack-protection/captcha", None, 1)
diff --git a/tests/wire/test_attackProtection_suspiciousIpThrottling.py b/tests/wire/test_attackProtection_suspiciousIpThrottling.py
new file mode 100644
index 00000000..19be468b
--- /dev/null
+++ b/tests/wire/test_attackProtection_suspiciousIpThrottling.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_attackProtection_suspiciousIpThrottling_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "attack_protection.suspicious_ip_throttling.get.0"
+ client = get_client(test_id)
+ client.attack_protection.suspicious_ip_throttling.get()
+ verify_request_count(test_id, "GET", "/attack-protection/suspicious-ip-throttling", None, 1)
+
+
+def test_attackProtection_suspiciousIpThrottling_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "attack_protection.suspicious_ip_throttling.update.0"
+ client = get_client(test_id)
+ client.attack_protection.suspicious_ip_throttling.update()
+ verify_request_count(test_id, "PATCH", "/attack-protection/suspicious-ip-throttling", None, 1)
diff --git a/tests/wire/test_branding.py b/tests/wire/test_branding.py
new file mode 100644
index 00000000..37b91728
--- /dev/null
+++ b/tests/wire/test_branding.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_branding_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "branding.get.0"
+ client = get_client(test_id)
+ client.branding.get()
+ verify_request_count(test_id, "GET", "/branding", None, 1)
+
+
+def test_branding_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "branding.update.0"
+ client = get_client(test_id)
+ client.branding.update()
+ verify_request_count(test_id, "PATCH", "/branding", None, 1)
diff --git a/tests/wire/test_branding_phone_providers.py b/tests/wire/test_branding_phone_providers.py
new file mode 100644
index 00000000..b15ae130
--- /dev/null
+++ b/tests/wire/test_branding_phone_providers.py
@@ -0,0 +1,49 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_branding_phone_providers_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "branding.phone.providers.list_.0"
+ client = get_client(test_id)
+ client.branding.phone.providers.list(disabled=True)
+ verify_request_count(test_id, "GET", "/branding/phone/providers", {"disabled": "true"}, 1)
+
+
+def test_branding_phone_providers_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "branding.phone.providers.create.0"
+ client = get_client(test_id)
+ client.branding.phone.providers.create(name="twilio", credentials={"auth_token": "auth_token"})
+ verify_request_count(test_id, "POST", "/branding/phone/providers", None, 1)
+
+
+def test_branding_phone_providers_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "branding.phone.providers.get.0"
+ client = get_client(test_id)
+ client.branding.phone.providers.get(id="id")
+ verify_request_count(test_id, "GET", "/branding/phone/providers/id", None, 1)
+
+
+def test_branding_phone_providers_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "branding.phone.providers.delete.0"
+ client = get_client(test_id)
+ client.branding.phone.providers.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/branding/phone/providers/id", None, 1)
+
+
+def test_branding_phone_providers_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "branding.phone.providers.update.0"
+ client = get_client(test_id)
+ client.branding.phone.providers.update(id="id")
+ verify_request_count(test_id, "PATCH", "/branding/phone/providers/id", None, 1)
+
+
+def test_branding_phone_providers_test() -> None:
+ """Test test endpoint with WireMock"""
+ test_id = "branding.phone.providers.test.0"
+ client = get_client(test_id)
+ client.branding.phone.providers.test(id="id", to="to")
+ verify_request_count(test_id, "POST", "/branding/phone/providers/id/try", None, 1)
diff --git a/tests/wire/test_branding_phone_templates.py b/tests/wire/test_branding_phone_templates.py
new file mode 100644
index 00000000..e868a0fe
--- /dev/null
+++ b/tests/wire/test_branding_phone_templates.py
@@ -0,0 +1,62 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_branding_phone_templates_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "branding.phone.templates.list_.0"
+ client = get_client(test_id)
+ client.branding.phone.templates.list(disabled=True)
+ verify_request_count(test_id, "GET", "/branding/phone/templates", {"disabled": "true"}, 1)
+
+
+def test_branding_phone_templates_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "branding.phone.templates.create.0"
+ client = get_client(test_id)
+ client.branding.phone.templates.create()
+ verify_request_count(test_id, "POST", "/branding/phone/templates", None, 1)
+
+
+def test_branding_phone_templates_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "branding.phone.templates.get.0"
+ client = get_client(test_id)
+ client.branding.phone.templates.get(id="id")
+ verify_request_count(test_id, "GET", "/branding/phone/templates/id", None, 1)
+
+
+def test_branding_phone_templates_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "branding.phone.templates.delete.0"
+ client = get_client(test_id)
+ client.branding.phone.templates.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/branding/phone/templates/id", None, 1)
+
+
+def test_branding_phone_templates_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "branding.phone.templates.update.0"
+ client = get_client(test_id)
+ client.branding.phone.templates.update(id="id")
+ verify_request_count(test_id, "PATCH", "/branding/phone/templates/id", None, 1)
+
+
+def test_branding_phone_templates_reset() -> None:
+ """Test reset endpoint with WireMock"""
+ test_id = "branding.phone.templates.reset.0"
+ client = get_client(test_id)
+ client.branding.phone.templates.reset(
+ id="id",
+ request={
+ "key": "value",
+ },
+ )
+ verify_request_count(test_id, "PATCH", "/branding/phone/templates/id/reset", None, 1)
+
+
+def test_branding_phone_templates_test() -> None:
+ """Test test endpoint with WireMock"""
+ test_id = "branding.phone.templates.test.0"
+ client = get_client(test_id)
+ client.branding.phone.templates.test(id="id", to="to")
+ verify_request_count(test_id, "POST", "/branding/phone/templates/id/try", None, 1)
diff --git a/tests/wire/test_branding_templates.py b/tests/wire/test_branding_templates.py
new file mode 100644
index 00000000..23df4428
--- /dev/null
+++ b/tests/wire/test_branding_templates.py
@@ -0,0 +1,25 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_branding_templates_get_universal_login() -> None:
+ """Test getUniversalLogin endpoint with WireMock"""
+ test_id = "branding.templates.get_universal_login.0"
+ client = get_client(test_id)
+ client.branding.templates.get_universal_login()
+ verify_request_count(test_id, "GET", "/branding/templates/universal-login", None, 1)
+
+
+def test_branding_templates_update_universal_login() -> None:
+ """Test updateUniversalLogin endpoint with WireMock"""
+ test_id = "branding.templates.update_universal_login.0"
+ client = get_client(test_id)
+ client.branding.templates.update_universal_login(request="string")
+ verify_request_count(test_id, "PUT", "/branding/templates/universal-login", None, 1)
+
+
+def test_branding_templates_delete_universal_login() -> None:
+ """Test deleteUniversalLogin endpoint with WireMock"""
+ test_id = "branding.templates.delete_universal_login.0"
+ client = get_client(test_id)
+ client.branding.templates.delete_universal_login()
+ verify_request_count(test_id, "DELETE", "/branding/templates/universal-login", None, 1)
diff --git a/tests/wire/test_branding_themes.py b/tests/wire/test_branding_themes.py
new file mode 100644
index 00000000..8a336e45
--- /dev/null
+++ b/tests/wire/test_branding_themes.py
@@ -0,0 +1,148 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_branding_themes_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "branding.themes.create.0"
+ client = get_client(test_id)
+ client.branding.themes.create(
+ borders={
+ "button_border_radius": 1.1,
+ "button_border_weight": 1.1,
+ "buttons_style": "pill",
+ "input_border_radius": 1.1,
+ "input_border_weight": 1.1,
+ "inputs_style": "pill",
+ "show_widget_shadow": True,
+ "widget_border_weight": 1.1,
+ "widget_corner_radius": 1.1,
+ },
+ colors={
+ "body_text": "body_text",
+ "error": "error",
+ "header": "header",
+ "icons": "icons",
+ "input_background": "input_background",
+ "input_border": "input_border",
+ "input_filled_text": "input_filled_text",
+ "input_labels_placeholders": "input_labels_placeholders",
+ "links_focused_components": "links_focused_components",
+ "primary_button": "primary_button",
+ "primary_button_label": "primary_button_label",
+ "secondary_button_border": "secondary_button_border",
+ "secondary_button_label": "secondary_button_label",
+ "success": "success",
+ "widget_background": "widget_background",
+ "widget_border": "widget_border",
+ },
+ fonts={
+ "body_text": {"bold": True, "size": 1.1},
+ "buttons_text": {"bold": True, "size": 1.1},
+ "font_url": "font_url",
+ "input_labels": {"bold": True, "size": 1.1},
+ "links": {"bold": True, "size": 1.1},
+ "links_style": "normal",
+ "reference_text_size": 1.1,
+ "subtitle": {"bold": True, "size": 1.1},
+ "title": {"bold": True, "size": 1.1},
+ },
+ page_background={
+ "background_color": "background_color",
+ "background_image_url": "background_image_url",
+ "page_layout": "center",
+ },
+ widget={
+ "header_text_alignment": "center",
+ "logo_height": 1.1,
+ "logo_position": "center",
+ "logo_url": "logo_url",
+ "social_buttons_layout": "bottom",
+ },
+ )
+ verify_request_count(test_id, "POST", "/branding/themes", None, 1)
+
+
+def test_branding_themes_get_default() -> None:
+ """Test getDefault endpoint with WireMock"""
+ test_id = "branding.themes.get_default.0"
+ client = get_client(test_id)
+ client.branding.themes.get_default()
+ verify_request_count(test_id, "GET", "/branding/themes/default", None, 1)
+
+
+def test_branding_themes_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "branding.themes.get.0"
+ client = get_client(test_id)
+ client.branding.themes.get(theme_id="themeId")
+ verify_request_count(test_id, "GET", "/branding/themes/themeId", None, 1)
+
+
+def test_branding_themes_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "branding.themes.delete.0"
+ client = get_client(test_id)
+ client.branding.themes.delete(theme_id="themeId")
+ verify_request_count(test_id, "DELETE", "/branding/themes/themeId", None, 1)
+
+
+def test_branding_themes_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "branding.themes.update.0"
+ client = get_client(test_id)
+ client.branding.themes.update(
+ theme_id="themeId",
+ borders={
+ "button_border_radius": 1.1,
+ "button_border_weight": 1.1,
+ "buttons_style": "pill",
+ "input_border_radius": 1.1,
+ "input_border_weight": 1.1,
+ "inputs_style": "pill",
+ "show_widget_shadow": True,
+ "widget_border_weight": 1.1,
+ "widget_corner_radius": 1.1,
+ },
+ colors={
+ "body_text": "body_text",
+ "error": "error",
+ "header": "header",
+ "icons": "icons",
+ "input_background": "input_background",
+ "input_border": "input_border",
+ "input_filled_text": "input_filled_text",
+ "input_labels_placeholders": "input_labels_placeholders",
+ "links_focused_components": "links_focused_components",
+ "primary_button": "primary_button",
+ "primary_button_label": "primary_button_label",
+ "secondary_button_border": "secondary_button_border",
+ "secondary_button_label": "secondary_button_label",
+ "success": "success",
+ "widget_background": "widget_background",
+ "widget_border": "widget_border",
+ },
+ fonts={
+ "body_text": {"bold": True, "size": 1.1},
+ "buttons_text": {"bold": True, "size": 1.1},
+ "font_url": "font_url",
+ "input_labels": {"bold": True, "size": 1.1},
+ "links": {"bold": True, "size": 1.1},
+ "links_style": "normal",
+ "reference_text_size": 1.1,
+ "subtitle": {"bold": True, "size": 1.1},
+ "title": {"bold": True, "size": 1.1},
+ },
+ page_background={
+ "background_color": "background_color",
+ "background_image_url": "background_image_url",
+ "page_layout": "center",
+ },
+ widget={
+ "header_text_alignment": "center",
+ "logo_height": 1.1,
+ "logo_position": "center",
+ "logo_url": "logo_url",
+ "social_buttons_layout": "bottom",
+ },
+ )
+ verify_request_count(test_id, "PATCH", "/branding/themes/themeId", None, 1)
diff --git a/tests/wire/test_clientGrants.py b/tests/wire/test_clientGrants.py
new file mode 100644
index 00000000..b5945eaa
--- /dev/null
+++ b/tests/wire/test_clientGrants.py
@@ -0,0 +1,53 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_clientGrants_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "client_grants.list_.0"
+ client = get_client(test_id)
+ client.client_grants.list(
+ from_="from",
+ take=1,
+ audience="audience",
+ client_id="client_id",
+ allow_any_organization=True,
+ subject_type="client",
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/client-grants",
+ {
+ "from": "from",
+ "take": "1",
+ "audience": "audience",
+ "client_id": "client_id",
+ "allow_any_organization": "true",
+ "subject_type": "client",
+ },
+ 1,
+ )
+
+
+def test_clientGrants_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "client_grants.create.0"
+ client = get_client(test_id)
+ client.client_grants.create(client_id="client_id", audience="audience")
+ verify_request_count(test_id, "POST", "/client-grants", None, 1)
+
+
+def test_clientGrants_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "client_grants.delete.0"
+ client = get_client(test_id)
+ client.client_grants.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/client-grants/id", None, 1)
+
+
+def test_clientGrants_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "client_grants.update.0"
+ client = get_client(test_id)
+ client.client_grants.update(id="id")
+ verify_request_count(test_id, "PATCH", "/client-grants/id", None, 1)
diff --git a/tests/wire/test_clientGrants_organizations.py b/tests/wire/test_clientGrants_organizations.py
new file mode 100644
index 00000000..f8db8595
--- /dev/null
+++ b/tests/wire/test_clientGrants_organizations.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_clientGrants_organizations_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "client_grants.organizations.list_.0"
+ client = get_client(test_id)
+ client.client_grants.organizations.list(id="id", from_="from", take=1)
+ verify_request_count(test_id, "GET", "/client-grants/id/organizations", {"from": "from", "take": "1"}, 1)
diff --git a/tests/wire/test_clients.py b/tests/wire/test_clients.py
new file mode 100644
index 00000000..fff4a9a7
--- /dev/null
+++ b/tests/wire/test_clients.py
@@ -0,0 +1,75 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_clients_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "clients.list_.0"
+ client = get_client(test_id)
+ client.clients.list(
+ fields="fields",
+ include_fields=True,
+ page=1,
+ per_page=1,
+ include_totals=True,
+ is_global=True,
+ is_first_party=True,
+ app_type="app_type",
+ q="q",
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/clients",
+ {
+ "fields": "fields",
+ "include_fields": "true",
+ "page": "1",
+ "per_page": "1",
+ "include_totals": "true",
+ "is_global": "true",
+ "is_first_party": "true",
+ "app_type": "app_type",
+ "q": "q",
+ },
+ 1,
+ )
+
+
+def test_clients_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "clients.create.0"
+ client = get_client(test_id)
+ client.clients.create(name="name")
+ verify_request_count(test_id, "POST", "/clients", None, 1)
+
+
+def test_clients_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "clients.get.0"
+ client = get_client(test_id)
+ client.clients.get(id="id", fields="fields", include_fields=True)
+ verify_request_count(test_id, "GET", "/clients/id", {"fields": "fields", "include_fields": "true"}, 1)
+
+
+def test_clients_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "clients.delete.0"
+ client = get_client(test_id)
+ client.clients.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/clients/id", None, 1)
+
+
+def test_clients_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "clients.update.0"
+ client = get_client(test_id)
+ client.clients.update(id="id")
+ verify_request_count(test_id, "PATCH", "/clients/id", None, 1)
+
+
+def test_clients_rotate_secret() -> None:
+ """Test rotateSecret endpoint with WireMock"""
+ test_id = "clients.rotate_secret.0"
+ client = get_client(test_id)
+ client.clients.rotate_secret(id="id")
+ verify_request_count(test_id, "POST", "/clients/id/rotate-secret", None, 1)
diff --git a/tests/wire/test_clients_connections.py b/tests/wire/test_clients_connections.py
new file mode 100644
index 00000000..949a47a9
--- /dev/null
+++ b/tests/wire/test_clients_connections.py
@@ -0,0 +1,15 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_clients_connections_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "clients.connections.get.0"
+ client = get_client(test_id)
+ client.clients.connections.get(id="id", from_="from", take=1, fields="fields", include_fields=True)
+ verify_request_count(
+ test_id,
+ "GET",
+ "/clients/id/connections",
+ {"from": "from", "take": "1", "fields": "fields", "include_fields": "true"},
+ 1,
+ )
diff --git a/tests/wire/test_clients_credentials.py b/tests/wire/test_clients_credentials.py
new file mode 100644
index 00000000..de673006
--- /dev/null
+++ b/tests/wire/test_clients_credentials.py
@@ -0,0 +1,41 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_clients_credentials_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "clients.credentials.list_.0"
+ client = get_client(test_id)
+ client.clients.credentials.list(client_id="client_id")
+ verify_request_count(test_id, "GET", "/clients/client_id/credentials", None, 1)
+
+
+def test_clients_credentials_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "clients.credentials.create.0"
+ client = get_client(test_id)
+ client.clients.credentials.create(client_id="client_id", credential_type="public_key")
+ verify_request_count(test_id, "POST", "/clients/client_id/credentials", None, 1)
+
+
+def test_clients_credentials_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "clients.credentials.get.0"
+ client = get_client(test_id)
+ client.clients.credentials.get(client_id="client_id", credential_id="credential_id")
+ verify_request_count(test_id, "GET", "/clients/client_id/credentials/credential_id", None, 1)
+
+
+def test_clients_credentials_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "clients.credentials.delete.0"
+ client = get_client(test_id)
+ client.clients.credentials.delete(client_id="client_id", credential_id="credential_id")
+ verify_request_count(test_id, "DELETE", "/clients/client_id/credentials/credential_id", None, 1)
+
+
+def test_clients_credentials_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "clients.credentials.update.0"
+ client = get_client(test_id)
+ client.clients.credentials.update(client_id="client_id", credential_id="credential_id")
+ verify_request_count(test_id, "PATCH", "/clients/client_id/credentials/credential_id", None, 1)
diff --git a/tests/wire/test_connectionProfiles.py b/tests/wire/test_connectionProfiles.py
new file mode 100644
index 00000000..e6dfde55
--- /dev/null
+++ b/tests/wire/test_connectionProfiles.py
@@ -0,0 +1,57 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_connectionProfiles_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "connection_profiles.list_.0"
+ client = get_client(test_id)
+ client.connection_profiles.list(from_="from", take=1)
+ verify_request_count(test_id, "GET", "/connection-profiles", {"from": "from", "take": "1"}, 1)
+
+
+def test_connectionProfiles_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "connection_profiles.create.0"
+ client = get_client(test_id)
+ client.connection_profiles.create(name="name")
+ verify_request_count(test_id, "POST", "/connection-profiles", None, 1)
+
+
+def test_connectionProfiles_list_templates() -> None:
+ """Test listTemplates endpoint with WireMock"""
+ test_id = "connection_profiles.list_templates.0"
+ client = get_client(test_id)
+ client.connection_profiles.list_templates()
+ verify_request_count(test_id, "GET", "/connection-profiles/templates", None, 1)
+
+
+def test_connectionProfiles_get_template() -> None:
+ """Test getTemplate endpoint with WireMock"""
+ test_id = "connection_profiles.get_template.0"
+ client = get_client(test_id)
+ client.connection_profiles.get_template(id="id")
+ verify_request_count(test_id, "GET", "/connection-profiles/templates/id", None, 1)
+
+
+def test_connectionProfiles_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "connection_profiles.get.0"
+ client = get_client(test_id)
+ client.connection_profiles.get(id="id")
+ verify_request_count(test_id, "GET", "/connection-profiles/id", None, 1)
+
+
+def test_connectionProfiles_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "connection_profiles.delete.0"
+ client = get_client(test_id)
+ client.connection_profiles.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/connection-profiles/id", None, 1)
+
+
+def test_connectionProfiles_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "connection_profiles.update.0"
+ client = get_client(test_id)
+ client.connection_profiles.update(id="id")
+ verify_request_count(test_id, "PATCH", "/connection-profiles/id", None, 1)
diff --git a/tests/wire/test_connections.py b/tests/wire/test_connections.py
new file mode 100644
index 00000000..5da55d5f
--- /dev/null
+++ b/tests/wire/test_connections.py
@@ -0,0 +1,55 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_connections_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "connections.list_.0"
+ client = get_client(test_id)
+ client.connections.list(from_="from", take=1, name="name", fields="fields", include_fields=True)
+ verify_request_count(
+ test_id,
+ "GET",
+ "/connections",
+ {"from": "from", "take": "1", "name": "name", "fields": "fields", "include_fields": "true"},
+ 1,
+ )
+
+
+def test_connections_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "connections.create.0"
+ client = get_client(test_id)
+ client.connections.create(name="name", strategy="ad")
+ verify_request_count(test_id, "POST", "/connections", None, 1)
+
+
+def test_connections_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "connections.get.0"
+ client = get_client(test_id)
+ client.connections.get(id="id", fields="fields", include_fields=True)
+ verify_request_count(test_id, "GET", "/connections/id", {"fields": "fields", "include_fields": "true"}, 1)
+
+
+def test_connections_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "connections.delete.0"
+ client = get_client(test_id)
+ client.connections.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/connections/id", None, 1)
+
+
+def test_connections_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "connections.update.0"
+ client = get_client(test_id)
+ client.connections.update(id="id")
+ verify_request_count(test_id, "PATCH", "/connections/id", None, 1)
+
+
+def test_connections_check_status() -> None:
+ """Test checkStatus endpoint with WireMock"""
+ test_id = "connections.check_status.0"
+ client = get_client(test_id)
+ client.connections.check_status(id="id")
+ verify_request_count(test_id, "GET", "/connections/id/status", None, 1)
diff --git a/tests/wire/test_connections_clients.py b/tests/wire/test_connections_clients.py
new file mode 100644
index 00000000..39369eee
--- /dev/null
+++ b/tests/wire/test_connections_clients.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_connections_clients_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "connections.clients.get.0"
+ client = get_client(test_id)
+ client.connections.clients.get(id="id", take=1, from_="from")
+ verify_request_count(test_id, "GET", "/connections/id/clients", {"take": "1", "from": "from"}, 1)
+
+
+def test_connections_clients_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "connections.clients.update.0"
+ client = get_client(test_id)
+ client.connections.clients.update(id="id", request=[{"client_id": "client_id", "status": True}])
+ verify_request_count(test_id, "PATCH", "/connections/id/clients", None, 1)
diff --git a/tests/wire/test_connections_directoryProvisioning.py b/tests/wire/test_connections_directoryProvisioning.py
new file mode 100644
index 00000000..f35d0a47
--- /dev/null
+++ b/tests/wire/test_connections_directoryProvisioning.py
@@ -0,0 +1,41 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_connections_directoryProvisioning_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "connections.directory_provisioning.get.0"
+ client = get_client(test_id)
+ client.connections.directory_provisioning.get(id="id")
+ verify_request_count(test_id, "GET", "/connections/id/directory-provisioning", None, 1)
+
+
+def test_connections_directoryProvisioning_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "connections.directory_provisioning.create.0"
+ client = get_client(test_id)
+ client.connections.directory_provisioning.create(id="id", request={})
+ verify_request_count(test_id, "POST", "/connections/id/directory-provisioning", None, 1)
+
+
+def test_connections_directoryProvisioning_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "connections.directory_provisioning.delete.0"
+ client = get_client(test_id)
+ client.connections.directory_provisioning.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/connections/id/directory-provisioning", None, 1)
+
+
+def test_connections_directoryProvisioning_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "connections.directory_provisioning.update.0"
+ client = get_client(test_id)
+ client.connections.directory_provisioning.update(id="id", request={})
+ verify_request_count(test_id, "PATCH", "/connections/id/directory-provisioning", None, 1)
+
+
+def test_connections_directoryProvisioning_get_default_mapping() -> None:
+ """Test getDefaultMapping endpoint with WireMock"""
+ test_id = "connections.directory_provisioning.get_default_mapping.0"
+ client = get_client(test_id)
+ client.connections.directory_provisioning.get_default_mapping(id="id")
+ verify_request_count(test_id, "GET", "/connections/id/directory-provisioning/default-mapping", None, 1)
diff --git a/tests/wire/test_connections_directoryProvisioning_synchronizations.py b/tests/wire/test_connections_directoryProvisioning_synchronizations.py
new file mode 100644
index 00000000..5468dc10
--- /dev/null
+++ b/tests/wire/test_connections_directoryProvisioning_synchronizations.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_connections_directoryProvisioning_synchronizations_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "connections.directory_provisioning.synchronizations.create.0"
+ client = get_client(test_id)
+ client.connections.directory_provisioning.synchronizations.create(id="id")
+ verify_request_count(test_id, "POST", "/connections/id/directory-provisioning/synchronizations", None, 1)
diff --git a/tests/wire/test_connections_keys.py b/tests/wire/test_connections_keys.py
new file mode 100644
index 00000000..3b5b4c13
--- /dev/null
+++ b/tests/wire/test_connections_keys.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_connections_keys_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "connections.keys.get.0"
+ client = get_client(test_id)
+ client.connections.keys.get(id="id")
+ verify_request_count(test_id, "GET", "/connections/id/keys", None, 1)
+
+
+def test_connections_keys_rotate() -> None:
+ """Test rotate endpoint with WireMock"""
+ test_id = "connections.keys.rotate.0"
+ client = get_client(test_id)
+ client.connections.keys.rotate(id="id", request={})
+ verify_request_count(test_id, "POST", "/connections/id/keys/rotate", None, 1)
diff --git a/tests/wire/test_connections_scimConfiguration.py b/tests/wire/test_connections_scimConfiguration.py
new file mode 100644
index 00000000..4db84d74
--- /dev/null
+++ b/tests/wire/test_connections_scimConfiguration.py
@@ -0,0 +1,41 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_connections_scimConfiguration_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "connections.scim_configuration.get.0"
+ client = get_client(test_id)
+ client.connections.scim_configuration.get(id="id")
+ verify_request_count(test_id, "GET", "/connections/id/scim-configuration", None, 1)
+
+
+def test_connections_scimConfiguration_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "connections.scim_configuration.create.0"
+ client = get_client(test_id)
+ client.connections.scim_configuration.create(id="id", request={})
+ verify_request_count(test_id, "POST", "/connections/id/scim-configuration", None, 1)
+
+
+def test_connections_scimConfiguration_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "connections.scim_configuration.delete.0"
+ client = get_client(test_id)
+ client.connections.scim_configuration.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/connections/id/scim-configuration", None, 1)
+
+
+def test_connections_scimConfiguration_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "connections.scim_configuration.update.0"
+ client = get_client(test_id)
+ client.connections.scim_configuration.update(id="id", user_id_attribute="user_id_attribute", mapping=[{}])
+ verify_request_count(test_id, "PATCH", "/connections/id/scim-configuration", None, 1)
+
+
+def test_connections_scimConfiguration_get_default_mapping() -> None:
+ """Test getDefaultMapping endpoint with WireMock"""
+ test_id = "connections.scim_configuration.get_default_mapping.0"
+ client = get_client(test_id)
+ client.connections.scim_configuration.get_default_mapping(id="id")
+ verify_request_count(test_id, "GET", "/connections/id/scim-configuration/default-mapping", None, 1)
diff --git a/tests/wire/test_connections_scimConfiguration_tokens.py b/tests/wire/test_connections_scimConfiguration_tokens.py
new file mode 100644
index 00000000..1c02b680
--- /dev/null
+++ b/tests/wire/test_connections_scimConfiguration_tokens.py
@@ -0,0 +1,25 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_connections_scimConfiguration_tokens_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "connections.scim_configuration.tokens.get.0"
+ client = get_client(test_id)
+ client.connections.scim_configuration.tokens.get(id="id")
+ verify_request_count(test_id, "GET", "/connections/id/scim-configuration/tokens", None, 1)
+
+
+def test_connections_scimConfiguration_tokens_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "connections.scim_configuration.tokens.create.0"
+ client = get_client(test_id)
+ client.connections.scim_configuration.tokens.create(id="id")
+ verify_request_count(test_id, "POST", "/connections/id/scim-configuration/tokens", None, 1)
+
+
+def test_connections_scimConfiguration_tokens_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "connections.scim_configuration.tokens.delete.0"
+ client = get_client(test_id)
+ client.connections.scim_configuration.tokens.delete(id="id", token_id="tokenId")
+ verify_request_count(test_id, "DELETE", "/connections/id/scim-configuration/tokens/tokenId", None, 1)
diff --git a/tests/wire/test_connections_users.py b/tests/wire/test_connections_users.py
new file mode 100644
index 00000000..e169451a
--- /dev/null
+++ b/tests/wire/test_connections_users.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_connections_users_delete_by_email() -> None:
+ """Test deleteByEmail endpoint with WireMock"""
+ test_id = "connections.users.delete_by_email.0"
+ client = get_client(test_id)
+ client.connections.users.delete_by_email(id="id", email="email")
+ verify_request_count(test_id, "DELETE", "/connections/id/users", {"email": "email"}, 1)
diff --git a/tests/wire/test_customDomains.py b/tests/wire/test_customDomains.py
new file mode 100644
index 00000000..8d5cb023
--- /dev/null
+++ b/tests/wire/test_customDomains.py
@@ -0,0 +1,63 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_customDomains_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "custom_domains.list_.0"
+ client = get_client(test_id)
+ client.custom_domains.list(take=1, from_="from", q="q", fields="fields", include_fields=True, sort="sort")
+ verify_request_count(
+ test_id,
+ "GET",
+ "/custom-domains",
+ {"take": "1", "from": "from", "q": "q", "fields": "fields", "include_fields": "true", "sort": "sort"},
+ 1,
+ )
+
+
+def test_customDomains_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "custom_domains.create.0"
+ client = get_client(test_id)
+ client.custom_domains.create(domain="domain", type="auth0_managed_certs")
+ verify_request_count(test_id, "POST", "/custom-domains", None, 1)
+
+
+def test_customDomains_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "custom_domains.get.0"
+ client = get_client(test_id)
+ client.custom_domains.get(id="id")
+ verify_request_count(test_id, "GET", "/custom-domains/id", None, 1)
+
+
+def test_customDomains_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "custom_domains.delete.0"
+ client = get_client(test_id)
+ client.custom_domains.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/custom-domains/id", None, 1)
+
+
+def test_customDomains_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "custom_domains.update.0"
+ client = get_client(test_id)
+ client.custom_domains.update(id="id")
+ verify_request_count(test_id, "PATCH", "/custom-domains/id", None, 1)
+
+
+def test_customDomains_test() -> None:
+ """Test test endpoint with WireMock"""
+ test_id = "custom_domains.test.0"
+ client = get_client(test_id)
+ client.custom_domains.test(id="id")
+ verify_request_count(test_id, "POST", "/custom-domains/id/test", None, 1)
+
+
+def test_customDomains_verify() -> None:
+ """Test verify endpoint with WireMock"""
+ test_id = "custom_domains.verify.0"
+ client = get_client(test_id)
+ client.custom_domains.verify(id="id")
+ verify_request_count(test_id, "POST", "/custom-domains/id/verify", None, 1)
diff --git a/tests/wire/test_deviceCredentials.py b/tests/wire/test_deviceCredentials.py
new file mode 100644
index 00000000..b2c3b174
--- /dev/null
+++ b/tests/wire/test_deviceCredentials.py
@@ -0,0 +1,49 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_deviceCredentials_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "device_credentials.list_.0"
+ client = get_client(test_id)
+ client.device_credentials.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ fields="fields",
+ include_fields=True,
+ user_id="user_id",
+ client_id="client_id",
+ type="public_key",
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/device-credentials",
+ {
+ "page": "1",
+ "per_page": "1",
+ "include_totals": "true",
+ "fields": "fields",
+ "include_fields": "true",
+ "user_id": "user_id",
+ "client_id": "client_id",
+ "type": "public_key",
+ },
+ 1,
+ )
+
+
+def test_deviceCredentials_create_public_key() -> None:
+ """Test createPublicKey endpoint with WireMock"""
+ test_id = "device_credentials.create_public_key.0"
+ client = get_client(test_id)
+ client.device_credentials.create_public_key(device_name="device_name", value="value", device_id="device_id")
+ verify_request_count(test_id, "POST", "/device-credentials", None, 1)
+
+
+def test_deviceCredentials_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "device_credentials.delete.0"
+ client = get_client(test_id)
+ client.device_credentials.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/device-credentials/id", None, 1)
diff --git a/tests/wire/test_emailTemplates.py b/tests/wire/test_emailTemplates.py
new file mode 100644
index 00000000..efc4b55c
--- /dev/null
+++ b/tests/wire/test_emailTemplates.py
@@ -0,0 +1,33 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_emailTemplates_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "email_templates.create.0"
+ client = get_client(test_id)
+ client.email_templates.create(template="verify_email")
+ verify_request_count(test_id, "POST", "/email-templates", None, 1)
+
+
+def test_emailTemplates_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "email_templates.get.0"
+ client = get_client(test_id)
+ client.email_templates.get(template_name="verify_email")
+ verify_request_count(test_id, "GET", "/email-templates/verify_email", None, 1)
+
+
+def test_emailTemplates_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "email_templates.set_.0"
+ client = get_client(test_id)
+ client.email_templates.set(template_name="verify_email", template="verify_email")
+ verify_request_count(test_id, "PUT", "/email-templates/verify_email", None, 1)
+
+
+def test_emailTemplates_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "email_templates.update.0"
+ client = get_client(test_id)
+ client.email_templates.update(template_name="verify_email")
+ verify_request_count(test_id, "PATCH", "/email-templates/verify_email", None, 1)
diff --git a/tests/wire/test_emails_provider.py b/tests/wire/test_emails_provider.py
new file mode 100644
index 00000000..fddd81e7
--- /dev/null
+++ b/tests/wire/test_emails_provider.py
@@ -0,0 +1,33 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_emails_provider_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "emails.provider.get.0"
+ client = get_client(test_id)
+ client.emails.provider.get(fields="fields", include_fields=True)
+ verify_request_count(test_id, "GET", "/emails/provider", {"fields": "fields", "include_fields": "true"}, 1)
+
+
+def test_emails_provider_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "emails.provider.create.0"
+ client = get_client(test_id)
+ client.emails.provider.create(name="mailgun", credentials={"api_key": "api_key"})
+ verify_request_count(test_id, "POST", "/emails/provider", None, 1)
+
+
+def test_emails_provider_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "emails.provider.delete.0"
+ client = get_client(test_id)
+ client.emails.provider.delete()
+ verify_request_count(test_id, "DELETE", "/emails/provider", None, 1)
+
+
+def test_emails_provider_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "emails.provider.update.0"
+ client = get_client(test_id)
+ client.emails.provider.update()
+ verify_request_count(test_id, "PATCH", "/emails/provider", None, 1)
diff --git a/tests/wire/test_eventStreams.py b/tests/wire/test_eventStreams.py
new file mode 100644
index 00000000..024184d4
--- /dev/null
+++ b/tests/wire/test_eventStreams.py
@@ -0,0 +1,59 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_eventStreams_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "event_streams.list_.0"
+ client = get_client(test_id)
+ client.event_streams.list(from_="from", take=1)
+ verify_request_count(test_id, "GET", "/event-streams", {"from": "from", "take": "1"}, 1)
+
+
+def test_eventStreams_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "event_streams.create.0"
+ client = get_client(test_id)
+ client.event_streams.create(
+ request={
+ "destination": {
+ "type": "webhook",
+ "configuration": {
+ "webhook_endpoint": "webhook_endpoint",
+ "webhook_authorization": {"method": "basic", "username": "username"},
+ },
+ }
+ }
+ )
+ verify_request_count(test_id, "POST", "/event-streams", None, 1)
+
+
+def test_eventStreams_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "event_streams.get.0"
+ client = get_client(test_id)
+ client.event_streams.get(id="id")
+ verify_request_count(test_id, "GET", "/event-streams/id", None, 1)
+
+
+def test_eventStreams_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "event_streams.delete.0"
+ client = get_client(test_id)
+ client.event_streams.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/event-streams/id", None, 1)
+
+
+def test_eventStreams_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "event_streams.update.0"
+ client = get_client(test_id)
+ client.event_streams.update(id="id")
+ verify_request_count(test_id, "PATCH", "/event-streams/id", None, 1)
+
+
+def test_eventStreams_test() -> None:
+ """Test test endpoint with WireMock"""
+ test_id = "event_streams.test.0"
+ client = get_client(test_id)
+ client.event_streams.test(id="id", event_type="user.created")
+ verify_request_count(test_id, "POST", "/event-streams/id/test", None, 1)
diff --git a/tests/wire/test_eventStreams_deliveries.py b/tests/wire/test_eventStreams_deliveries.py
new file mode 100644
index 00000000..755c1a36
--- /dev/null
+++ b/tests/wire/test_eventStreams_deliveries.py
@@ -0,0 +1,38 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_eventStreams_deliveries_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "event_streams.deliveries.list_.0"
+ client = get_client(test_id)
+ client.event_streams.deliveries.list(
+ id="id",
+ statuses="statuses",
+ event_types="event_types",
+ date_from="date_from",
+ date_to="date_to",
+ from_="from",
+ take=1,
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/event-streams/id/deliveries",
+ {
+ "statuses": "statuses",
+ "event_types": "event_types",
+ "date_from": "date_from",
+ "date_to": "date_to",
+ "from": "from",
+ "take": "1",
+ },
+ 1,
+ )
+
+
+def test_eventStreams_deliveries_get_history() -> None:
+ """Test getHistory endpoint with WireMock"""
+ test_id = "event_streams.deliveries.get_history.0"
+ client = get_client(test_id)
+ client.event_streams.deliveries.get_history(id="id", event_id="event_id")
+ verify_request_count(test_id, "GET", "/event-streams/id/deliveries/event_id", None, 1)
diff --git a/tests/wire/test_eventStreams_redeliveries.py b/tests/wire/test_eventStreams_redeliveries.py
new file mode 100644
index 00000000..0fb7ac24
--- /dev/null
+++ b/tests/wire/test_eventStreams_redeliveries.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_eventStreams_redeliveries_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "event_streams.redeliveries.create.0"
+ client = get_client(test_id)
+ client.event_streams.redeliveries.create(id="id")
+ verify_request_count(test_id, "POST", "/event-streams/id/redeliver", None, 1)
+
+
+def test_eventStreams_redeliveries_create_by_id() -> None:
+ """Test createById endpoint with WireMock"""
+ test_id = "event_streams.redeliveries.create_by_id.0"
+ client = get_client(test_id)
+ client.event_streams.redeliveries.create_by_id(id="id", event_id="event_id")
+ verify_request_count(test_id, "POST", "/event-streams/id/redeliver/event_id", None, 1)
diff --git a/tests/wire/test_flows.py b/tests/wire/test_flows.py
new file mode 100644
index 00000000..aab90b57
--- /dev/null
+++ b/tests/wire/test_flows.py
@@ -0,0 +1,43 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_flows_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "flows.list_.0"
+ client = get_client(test_id)
+ client.flows.list(page=1, per_page=1, include_totals=True, synchronous=True)
+ verify_request_count(
+ test_id, "GET", "/flows", {"page": "1", "per_page": "1", "include_totals": "true", "synchronous": "true"}, 1
+ )
+
+
+def test_flows_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "flows.create.0"
+ client = get_client(test_id)
+ client.flows.create(name="name")
+ verify_request_count(test_id, "POST", "/flows", None, 1)
+
+
+def test_flows_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "flows.get.0"
+ client = get_client(test_id)
+ client.flows.get(id="id")
+ verify_request_count(test_id, "GET", "/flows/id", None, 1)
+
+
+def test_flows_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "flows.delete.0"
+ client = get_client(test_id)
+ client.flows.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/flows/id", None, 1)
+
+
+def test_flows_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "flows.update.0"
+ client = get_client(test_id)
+ client.flows.update(id="id")
+ verify_request_count(test_id, "PATCH", "/flows/id", None, 1)
diff --git a/tests/wire/test_flows_executions.py b/tests/wire/test_flows_executions.py
new file mode 100644
index 00000000..c706b923
--- /dev/null
+++ b/tests/wire/test_flows_executions.py
@@ -0,0 +1,25 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_flows_executions_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "flows.executions.list_.0"
+ client = get_client(test_id)
+ client.flows.executions.list(flow_id="flow_id", from_="from", take=1)
+ verify_request_count(test_id, "GET", "/flows/flow_id/executions", {"from": "from", "take": "1"}, 1)
+
+
+def test_flows_executions_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "flows.executions.get.0"
+ client = get_client(test_id)
+ client.flows.executions.get(flow_id="flow_id", execution_id="execution_id")
+ verify_request_count(test_id, "GET", "/flows/flow_id/executions/execution_id", None, 1)
+
+
+def test_flows_executions_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "flows.executions.delete.0"
+ client = get_client(test_id)
+ client.flows.executions.delete(flow_id="flow_id", execution_id="execution_id")
+ verify_request_count(test_id, "DELETE", "/flows/flow_id/executions/execution_id", None, 1)
diff --git a/tests/wire/test_flows_vault_connections.py b/tests/wire/test_flows_vault_connections.py
new file mode 100644
index 00000000..f9fbcd4f
--- /dev/null
+++ b/tests/wire/test_flows_vault_connections.py
@@ -0,0 +1,49 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_flows_vault_connections_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "flows.vault.connections.list_.0"
+ client = get_client(test_id)
+ client.flows.vault.connections.list(page=1, per_page=1, include_totals=True)
+ verify_request_count(
+ test_id, "GET", "/flows/vault/connections", {"page": "1", "per_page": "1", "include_totals": "true"}, 1
+ )
+
+
+def test_flows_vault_connections_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "flows.vault.connections.create.0"
+ client = get_client(test_id)
+ client.flows.vault.connections.create(
+ request={
+ "name": "name",
+ "app_id": "ACTIVECAMPAIGN",
+ "setup": {"type": "API_KEY", "api_key": "api_key", "base_url": "base_url"},
+ }
+ )
+ verify_request_count(test_id, "POST", "/flows/vault/connections", None, 1)
+
+
+def test_flows_vault_connections_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "flows.vault.connections.get.0"
+ client = get_client(test_id)
+ client.flows.vault.connections.get(id="id")
+ verify_request_count(test_id, "GET", "/flows/vault/connections/id", None, 1)
+
+
+def test_flows_vault_connections_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "flows.vault.connections.delete.0"
+ client = get_client(test_id)
+ client.flows.vault.connections.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/flows/vault/connections/id", None, 1)
+
+
+def test_flows_vault_connections_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "flows.vault.connections.update.0"
+ client = get_client(test_id)
+ client.flows.vault.connections.update(id="id")
+ verify_request_count(test_id, "PATCH", "/flows/vault/connections/id", None, 1)
diff --git a/tests/wire/test_forms.py b/tests/wire/test_forms.py
new file mode 100644
index 00000000..d8e322a1
--- /dev/null
+++ b/tests/wire/test_forms.py
@@ -0,0 +1,41 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_forms_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "forms.list_.0"
+ client = get_client(test_id)
+ client.forms.list(page=1, per_page=1, include_totals=True)
+ verify_request_count(test_id, "GET", "/forms", {"page": "1", "per_page": "1", "include_totals": "true"}, 1)
+
+
+def test_forms_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "forms.create.0"
+ client = get_client(test_id)
+ client.forms.create(name="name")
+ verify_request_count(test_id, "POST", "/forms", None, 1)
+
+
+def test_forms_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "forms.get.0"
+ client = get_client(test_id)
+ client.forms.get(id="id")
+ verify_request_count(test_id, "GET", "/forms/id", None, 1)
+
+
+def test_forms_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "forms.delete.0"
+ client = get_client(test_id)
+ client.forms.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/forms/id", None, 1)
+
+
+def test_forms_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "forms.update.0"
+ client = get_client(test_id)
+ client.forms.update(id="id")
+ verify_request_count(test_id, "PATCH", "/forms/id", None, 1)
diff --git a/tests/wire/test_guardian_enrollments.py b/tests/wire/test_guardian_enrollments.py
new file mode 100644
index 00000000..634e6e55
--- /dev/null
+++ b/tests/wire/test_guardian_enrollments.py
@@ -0,0 +1,25 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_guardian_enrollments_create_ticket() -> None:
+ """Test createTicket endpoint with WireMock"""
+ test_id = "guardian.enrollments.create_ticket.0"
+ client = get_client(test_id)
+ client.guardian.enrollments.create_ticket(user_id="user_id")
+ verify_request_count(test_id, "POST", "/guardian/enrollments/ticket", None, 1)
+
+
+def test_guardian_enrollments_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "guardian.enrollments.get.0"
+ client = get_client(test_id)
+ client.guardian.enrollments.get(id="id")
+ verify_request_count(test_id, "GET", "/guardian/enrollments/id", None, 1)
+
+
+def test_guardian_enrollments_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "guardian.enrollments.delete.0"
+ client = get_client(test_id)
+ client.guardian.enrollments.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/guardian/enrollments/id", None, 1)
diff --git a/tests/wire/test_guardian_factors.py b/tests/wire/test_guardian_factors.py
new file mode 100644
index 00000000..76232510
--- /dev/null
+++ b/tests/wire/test_guardian_factors.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_guardian_factors_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "guardian.factors.list_.0"
+ client = get_client(test_id)
+ client.guardian.factors.list()
+ verify_request_count(test_id, "GET", "/guardian/factors", None, 1)
+
+
+def test_guardian_factors_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "guardian.factors.set_.0"
+ client = get_client(test_id)
+ client.guardian.factors.set(name="push-notification", enabled=True)
+ verify_request_count(test_id, "PUT", "/guardian/factors/push-notification", None, 1)
diff --git a/tests/wire/test_guardian_factors_duo_settings.py b/tests/wire/test_guardian_factors_duo_settings.py
new file mode 100644
index 00000000..518e1d67
--- /dev/null
+++ b/tests/wire/test_guardian_factors_duo_settings.py
@@ -0,0 +1,25 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_guardian_factors_duo_settings_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "guardian.factors.duo.settings.get.0"
+ client = get_client(test_id)
+ client.guardian.factors.duo.settings.get()
+ verify_request_count(test_id, "GET", "/guardian/factors/duo/settings", None, 1)
+
+
+def test_guardian_factors_duo_settings_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "guardian.factors.duo.settings.set_.0"
+ client = get_client(test_id)
+ client.guardian.factors.duo.settings.set()
+ verify_request_count(test_id, "PUT", "/guardian/factors/duo/settings", None, 1)
+
+
+def test_guardian_factors_duo_settings_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "guardian.factors.duo.settings.update.0"
+ client = get_client(test_id)
+ client.guardian.factors.duo.settings.update()
+ verify_request_count(test_id, "PATCH", "/guardian/factors/duo/settings", None, 1)
diff --git a/tests/wire/test_guardian_factors_phone.py b/tests/wire/test_guardian_factors_phone.py
new file mode 100644
index 00000000..5ba1c07d
--- /dev/null
+++ b/tests/wire/test_guardian_factors_phone.py
@@ -0,0 +1,67 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_guardian_factors_phone_get_message_types() -> None:
+ """Test getMessageTypes endpoint with WireMock"""
+ test_id = "guardian.factors.phone.get_message_types.0"
+ client = get_client(test_id)
+ client.guardian.factors.phone.get_message_types()
+ verify_request_count(test_id, "GET", "/guardian/factors/phone/message-types", None, 1)
+
+
+def test_guardian_factors_phone_set_message_types() -> None:
+ """Test setMessageTypes endpoint with WireMock"""
+ test_id = "guardian.factors.phone.set_message_types.0"
+ client = get_client(test_id)
+ client.guardian.factors.phone.set_message_types(message_types=["sms"])
+ verify_request_count(test_id, "PUT", "/guardian/factors/phone/message-types", None, 1)
+
+
+def test_guardian_factors_phone_get_twilio_provider() -> None:
+ """Test getTwilioProvider endpoint with WireMock"""
+ test_id = "guardian.factors.phone.get_twilio_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.phone.get_twilio_provider()
+ verify_request_count(test_id, "GET", "/guardian/factors/phone/providers/twilio", None, 1)
+
+
+def test_guardian_factors_phone_set_twilio_provider() -> None:
+ """Test setTwilioProvider endpoint with WireMock"""
+ test_id = "guardian.factors.phone.set_twilio_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.phone.set_twilio_provider()
+ verify_request_count(test_id, "PUT", "/guardian/factors/phone/providers/twilio", None, 1)
+
+
+def test_guardian_factors_phone_get_selected_provider() -> None:
+ """Test getSelectedProvider endpoint with WireMock"""
+ test_id = "guardian.factors.phone.get_selected_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.phone.get_selected_provider()
+ verify_request_count(test_id, "GET", "/guardian/factors/phone/selected-provider", None, 1)
+
+
+def test_guardian_factors_phone_set_provider() -> None:
+ """Test setProvider endpoint with WireMock"""
+ test_id = "guardian.factors.phone.set_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.phone.set_provider(provider="auth0")
+ verify_request_count(test_id, "PUT", "/guardian/factors/phone/selected-provider", None, 1)
+
+
+def test_guardian_factors_phone_get_templates() -> None:
+ """Test getTemplates endpoint with WireMock"""
+ test_id = "guardian.factors.phone.get_templates.0"
+ client = get_client(test_id)
+ client.guardian.factors.phone.get_templates()
+ verify_request_count(test_id, "GET", "/guardian/factors/phone/templates", None, 1)
+
+
+def test_guardian_factors_phone_set_templates() -> None:
+ """Test setTemplates endpoint with WireMock"""
+ test_id = "guardian.factors.phone.set_templates.0"
+ client = get_client(test_id)
+ client.guardian.factors.phone.set_templates(
+ enrollment_message="enrollment_message", verification_message="verification_message"
+ )
+ verify_request_count(test_id, "PUT", "/guardian/factors/phone/templates", None, 1)
diff --git a/tests/wire/test_guardian_factors_pushNotification.py b/tests/wire/test_guardian_factors_pushNotification.py
new file mode 100644
index 00000000..775c677c
--- /dev/null
+++ b/tests/wire/test_guardian_factors_pushNotification.py
@@ -0,0 +1,73 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_guardian_factors_pushNotification_get_apns_provider() -> None:
+ """Test getApnsProvider endpoint with WireMock"""
+ test_id = "guardian.factors.push_notification.get_apns_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.push_notification.get_apns_provider()
+ verify_request_count(test_id, "GET", "/guardian/factors/push-notification/providers/apns", None, 1)
+
+
+def test_guardian_factors_pushNotification_set_apns_provider() -> None:
+ """Test setApnsProvider endpoint with WireMock"""
+ test_id = "guardian.factors.push_notification.set_apns_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.push_notification.set_apns_provider()
+ verify_request_count(test_id, "PATCH", "/guardian/factors/push-notification/providers/apns", None, 1)
+
+
+def test_guardian_factors_pushNotification_set_fcm_provider() -> None:
+ """Test setFcmProvider endpoint with WireMock"""
+ test_id = "guardian.factors.push_notification.set_fcm_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.push_notification.set_fcm_provider()
+ verify_request_count(test_id, "PATCH", "/guardian/factors/push-notification/providers/fcm", None, 1)
+
+
+def test_guardian_factors_pushNotification_set_fcmv_1_provider() -> None:
+ """Test setFcmv1Provider endpoint with WireMock"""
+ test_id = "guardian.factors.push_notification.set_fcmv_1_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.push_notification.set_fcmv_1_provider()
+ verify_request_count(test_id, "PATCH", "/guardian/factors/push-notification/providers/fcmv1", None, 1)
+
+
+def test_guardian_factors_pushNotification_get_sns_provider() -> None:
+ """Test getSnsProvider endpoint with WireMock"""
+ test_id = "guardian.factors.push_notification.get_sns_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.push_notification.get_sns_provider()
+ verify_request_count(test_id, "GET", "/guardian/factors/push-notification/providers/sns", None, 1)
+
+
+def test_guardian_factors_pushNotification_set_sns_provider() -> None:
+ """Test setSnsProvider endpoint with WireMock"""
+ test_id = "guardian.factors.push_notification.set_sns_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.push_notification.set_sns_provider()
+ verify_request_count(test_id, "PUT", "/guardian/factors/push-notification/providers/sns", None, 1)
+
+
+def test_guardian_factors_pushNotification_update_sns_provider() -> None:
+ """Test updateSnsProvider endpoint with WireMock"""
+ test_id = "guardian.factors.push_notification.update_sns_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.push_notification.update_sns_provider()
+ verify_request_count(test_id, "PATCH", "/guardian/factors/push-notification/providers/sns", None, 1)
+
+
+def test_guardian_factors_pushNotification_get_selected_provider() -> None:
+ """Test getSelectedProvider endpoint with WireMock"""
+ test_id = "guardian.factors.push_notification.get_selected_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.push_notification.get_selected_provider()
+ verify_request_count(test_id, "GET", "/guardian/factors/push-notification/selected-provider", None, 1)
+
+
+def test_guardian_factors_pushNotification_set_provider() -> None:
+ """Test setProvider endpoint with WireMock"""
+ test_id = "guardian.factors.push_notification.set_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.push_notification.set_provider(provider="guardian")
+ verify_request_count(test_id, "PUT", "/guardian/factors/push-notification/selected-provider", None, 1)
diff --git a/tests/wire/test_guardian_factors_sms.py b/tests/wire/test_guardian_factors_sms.py
new file mode 100644
index 00000000..7e377120
--- /dev/null
+++ b/tests/wire/test_guardian_factors_sms.py
@@ -0,0 +1,51 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_guardian_factors_sms_get_twilio_provider() -> None:
+ """Test getTwilioProvider endpoint with WireMock"""
+ test_id = "guardian.factors.sms.get_twilio_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.sms.get_twilio_provider()
+ verify_request_count(test_id, "GET", "/guardian/factors/sms/providers/twilio", None, 1)
+
+
+def test_guardian_factors_sms_set_twilio_provider() -> None:
+ """Test setTwilioProvider endpoint with WireMock"""
+ test_id = "guardian.factors.sms.set_twilio_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.sms.set_twilio_provider()
+ verify_request_count(test_id, "PUT", "/guardian/factors/sms/providers/twilio", None, 1)
+
+
+def test_guardian_factors_sms_get_selected_provider() -> None:
+ """Test getSelectedProvider endpoint with WireMock"""
+ test_id = "guardian.factors.sms.get_selected_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.sms.get_selected_provider()
+ verify_request_count(test_id, "GET", "/guardian/factors/sms/selected-provider", None, 1)
+
+
+def test_guardian_factors_sms_set_provider() -> None:
+ """Test setProvider endpoint with WireMock"""
+ test_id = "guardian.factors.sms.set_provider.0"
+ client = get_client(test_id)
+ client.guardian.factors.sms.set_provider(provider="auth0")
+ verify_request_count(test_id, "PUT", "/guardian/factors/sms/selected-provider", None, 1)
+
+
+def test_guardian_factors_sms_get_templates() -> None:
+ """Test getTemplates endpoint with WireMock"""
+ test_id = "guardian.factors.sms.get_templates.0"
+ client = get_client(test_id)
+ client.guardian.factors.sms.get_templates()
+ verify_request_count(test_id, "GET", "/guardian/factors/sms/templates", None, 1)
+
+
+def test_guardian_factors_sms_set_templates() -> None:
+ """Test setTemplates endpoint with WireMock"""
+ test_id = "guardian.factors.sms.set_templates.0"
+ client = get_client(test_id)
+ client.guardian.factors.sms.set_templates(
+ enrollment_message="enrollment_message", verification_message="verification_message"
+ )
+ verify_request_count(test_id, "PUT", "/guardian/factors/sms/templates", None, 1)
diff --git a/tests/wire/test_guardian_policies.py b/tests/wire/test_guardian_policies.py
new file mode 100644
index 00000000..ae27d97f
--- /dev/null
+++ b/tests/wire/test_guardian_policies.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_guardian_policies_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "guardian.policies.list_.0"
+ client = get_client(test_id)
+ client.guardian.policies.list()
+ verify_request_count(test_id, "GET", "/guardian/policies", None, 1)
+
+
+def test_guardian_policies_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "guardian.policies.set_.0"
+ client = get_client(test_id)
+ client.guardian.policies.set(request=["all-applications"])
+ verify_request_count(test_id, "PUT", "/guardian/policies", None, 1)
diff --git a/tests/wire/test_hooks.py b/tests/wire/test_hooks.py
new file mode 100644
index 00000000..28bd421f
--- /dev/null
+++ b/tests/wire/test_hooks.py
@@ -0,0 +1,56 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_hooks_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "hooks.list_.0"
+ client = get_client(test_id)
+ client.hooks.list(
+ page=1, per_page=1, include_totals=True, enabled=True, fields="fields", trigger_id="credentials-exchange"
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/hooks",
+ {
+ "page": "1",
+ "per_page": "1",
+ "include_totals": "true",
+ "enabled": "true",
+ "fields": "fields",
+ "triggerId": "credentials-exchange",
+ },
+ 1,
+ )
+
+
+def test_hooks_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "hooks.create.0"
+ client = get_client(test_id)
+ client.hooks.create(name="name", script="script", trigger_id="credentials-exchange")
+ verify_request_count(test_id, "POST", "/hooks", None, 1)
+
+
+def test_hooks_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "hooks.get.0"
+ client = get_client(test_id)
+ client.hooks.get(id="id", fields="fields")
+ verify_request_count(test_id, "GET", "/hooks/id", {"fields": "fields"}, 1)
+
+
+def test_hooks_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "hooks.delete.0"
+ client = get_client(test_id)
+ client.hooks.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/hooks/id", None, 1)
+
+
+def test_hooks_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "hooks.update.0"
+ client = get_client(test_id)
+ client.hooks.update(id="id")
+ verify_request_count(test_id, "PATCH", "/hooks/id", None, 1)
diff --git a/tests/wire/test_hooks_secrets.py b/tests/wire/test_hooks_secrets.py
new file mode 100644
index 00000000..b77109ba
--- /dev/null
+++ b/tests/wire/test_hooks_secrets.py
@@ -0,0 +1,33 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_hooks_secrets_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "hooks.secrets.get.0"
+ client = get_client(test_id)
+ client.hooks.secrets.get(id="id")
+ verify_request_count(test_id, "GET", "/hooks/id/secrets", None, 1)
+
+
+def test_hooks_secrets_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "hooks.secrets.create.0"
+ client = get_client(test_id)
+ client.hooks.secrets.create(id="id", request={"key": "value"})
+ verify_request_count(test_id, "POST", "/hooks/id/secrets", None, 1)
+
+
+def test_hooks_secrets_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "hooks.secrets.delete.0"
+ client = get_client(test_id)
+ client.hooks.secrets.delete(id="id", request=["string"])
+ verify_request_count(test_id, "DELETE", "/hooks/id/secrets", None, 1)
+
+
+def test_hooks_secrets_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "hooks.secrets.update.0"
+ client = get_client(test_id)
+ client.hooks.secrets.update(id="id", request={"key": "value"})
+ verify_request_count(test_id, "PATCH", "/hooks/id/secrets", None, 1)
diff --git a/tests/wire/test_jobs.py b/tests/wire/test_jobs.py
new file mode 100644
index 00000000..d829c746
--- /dev/null
+++ b/tests/wire/test_jobs.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_jobs_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "jobs.get.0"
+ client = get_client(test_id)
+ client.jobs.get(id="id")
+ verify_request_count(test_id, "GET", "/jobs/id", None, 1)
diff --git a/tests/wire/test_jobs_errors.py b/tests/wire/test_jobs_errors.py
new file mode 100644
index 00000000..3ae88444
--- /dev/null
+++ b/tests/wire/test_jobs_errors.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_jobs_errors_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "jobs.errors.get.0"
+ client = get_client(test_id)
+ client.jobs.errors.get(id="id")
+ verify_request_count(test_id, "GET", "/jobs/id/errors", None, 1)
diff --git a/tests/wire/test_jobs_usersExports.py b/tests/wire/test_jobs_usersExports.py
new file mode 100644
index 00000000..1861d556
--- /dev/null
+++ b/tests/wire/test_jobs_usersExports.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_jobs_usersExports_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "jobs.users_exports.create.0"
+ client = get_client(test_id)
+ client.jobs.users_exports.create()
+ verify_request_count(test_id, "POST", "/jobs/users-exports", None, 1)
diff --git a/tests/wire/test_jobs_usersImports.py b/tests/wire/test_jobs_usersImports.py
new file mode 100644
index 00000000..48fc0b54
--- /dev/null
+++ b/tests/wire/test_jobs_usersImports.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_jobs_usersImports_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "jobs.users_imports.create.0"
+ client = get_client(test_id)
+ client.jobs.users_imports.create(users="example_users", connection_id="connection_id")
+ verify_request_count(test_id, "POST", "/jobs/users-imports", None, 1)
diff --git a/tests/wire/test_jobs_verificationEmail.py b/tests/wire/test_jobs_verificationEmail.py
new file mode 100644
index 00000000..e97c18af
--- /dev/null
+++ b/tests/wire/test_jobs_verificationEmail.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_jobs_verificationEmail_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "jobs.verification_email.create.0"
+ client = get_client(test_id)
+ client.jobs.verification_email.create(user_id="user_id")
+ verify_request_count(test_id, "POST", "/jobs/verification-email", None, 1)
diff --git a/tests/wire/test_keys_customSigning.py b/tests/wire/test_keys_customSigning.py
new file mode 100644
index 00000000..b6979157
--- /dev/null
+++ b/tests/wire/test_keys_customSigning.py
@@ -0,0 +1,25 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_keys_customSigning_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "keys.custom_signing.get.0"
+ client = get_client(test_id)
+ client.keys.custom_signing.get()
+ verify_request_count(test_id, "GET", "/keys/custom-signing", None, 1)
+
+
+def test_keys_customSigning_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "keys.custom_signing.set_.0"
+ client = get_client(test_id)
+ client.keys.custom_signing.set(keys=[{"kty": "EC"}])
+ verify_request_count(test_id, "PUT", "/keys/custom-signing", None, 1)
+
+
+def test_keys_customSigning_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "keys.custom_signing.delete.0"
+ client = get_client(test_id)
+ client.keys.custom_signing.delete()
+ verify_request_count(test_id, "DELETE", "/keys/custom-signing", None, 1)
diff --git a/tests/wire/test_keys_encryption.py b/tests/wire/test_keys_encryption.py
new file mode 100644
index 00000000..52b567e1
--- /dev/null
+++ b/tests/wire/test_keys_encryption.py
@@ -0,0 +1,59 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_keys_encryption_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "keys.encryption.list_.0"
+ client = get_client(test_id)
+ client.keys.encryption.list(page=1, per_page=1, include_totals=True)
+ verify_request_count(
+ test_id, "GET", "/keys/encryption", {"page": "1", "per_page": "1", "include_totals": "true"}, 1
+ )
+
+
+def test_keys_encryption_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "keys.encryption.create.0"
+ client = get_client(test_id)
+ client.keys.encryption.create(type="customer-provided-root-key")
+ verify_request_count(test_id, "POST", "/keys/encryption", None, 1)
+
+
+def test_keys_encryption_rekey() -> None:
+ """Test rekey endpoint with WireMock"""
+ test_id = "keys.encryption.rekey.0"
+ client = get_client(test_id)
+ client.keys.encryption.rekey()
+ verify_request_count(test_id, "POST", "/keys/encryption/rekey", None, 1)
+
+
+def test_keys_encryption_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "keys.encryption.get.0"
+ client = get_client(test_id)
+ client.keys.encryption.get(kid="kid")
+ verify_request_count(test_id, "GET", "/keys/encryption/kid", None, 1)
+
+
+def test_keys_encryption_import_() -> None:
+ """Test import endpoint with WireMock"""
+ test_id = "keys.encryption.import_.0"
+ client = get_client(test_id)
+ client.keys.encryption.import_(kid="kid", wrapped_key="wrapped_key")
+ verify_request_count(test_id, "POST", "/keys/encryption/kid", None, 1)
+
+
+def test_keys_encryption_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "keys.encryption.delete.0"
+ client = get_client(test_id)
+ client.keys.encryption.delete(kid="kid")
+ verify_request_count(test_id, "DELETE", "/keys/encryption/kid", None, 1)
+
+
+def test_keys_encryption_create_public_wrapping_key() -> None:
+ """Test createPublicWrappingKey endpoint with WireMock"""
+ test_id = "keys.encryption.create_public_wrapping_key.0"
+ client = get_client(test_id)
+ client.keys.encryption.create_public_wrapping_key(kid="kid")
+ verify_request_count(test_id, "POST", "/keys/encryption/kid/wrapping-key", None, 1)
diff --git a/tests/wire/test_keys_signing.py b/tests/wire/test_keys_signing.py
new file mode 100644
index 00000000..3487fc6d
--- /dev/null
+++ b/tests/wire/test_keys_signing.py
@@ -0,0 +1,33 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_keys_signing_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "keys.signing.list_.0"
+ client = get_client(test_id)
+ client.keys.signing.list()
+ verify_request_count(test_id, "GET", "/keys/signing", None, 1)
+
+
+def test_keys_signing_rotate() -> None:
+ """Test rotate endpoint with WireMock"""
+ test_id = "keys.signing.rotate.0"
+ client = get_client(test_id)
+ client.keys.signing.rotate()
+ verify_request_count(test_id, "POST", "/keys/signing/rotate", None, 1)
+
+
+def test_keys_signing_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "keys.signing.get.0"
+ client = get_client(test_id)
+ client.keys.signing.get(kid="kid")
+ verify_request_count(test_id, "GET", "/keys/signing/kid", None, 1)
+
+
+def test_keys_signing_revoke() -> None:
+ """Test revoke endpoint with WireMock"""
+ test_id = "keys.signing.revoke.0"
+ client = get_client(test_id)
+ client.keys.signing.revoke(kid="kid")
+ verify_request_count(test_id, "PUT", "/keys/signing/kid/revoke", None, 1)
diff --git a/tests/wire/test_logStreams.py b/tests/wire/test_logStreams.py
new file mode 100644
index 00000000..17ee6073
--- /dev/null
+++ b/tests/wire/test_logStreams.py
@@ -0,0 +1,41 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_logStreams_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "log_streams.list_.0"
+ client = get_client(test_id)
+ client.log_streams.list()
+ verify_request_count(test_id, "GET", "/log-streams", None, 1)
+
+
+def test_logStreams_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "log_streams.create.0"
+ client = get_client(test_id)
+ client.log_streams.create(request={"type": "http", "sink": {"http_endpoint": "httpEndpoint"}})
+ verify_request_count(test_id, "POST", "/log-streams", None, 1)
+
+
+def test_logStreams_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "log_streams.get.0"
+ client = get_client(test_id)
+ client.log_streams.get(id="id")
+ verify_request_count(test_id, "GET", "/log-streams/id", None, 1)
+
+
+def test_logStreams_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "log_streams.delete.0"
+ client = get_client(test_id)
+ client.log_streams.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/log-streams/id", None, 1)
+
+
+def test_logStreams_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "log_streams.update.0"
+ client = get_client(test_id)
+ client.log_streams.update(id="id")
+ verify_request_count(test_id, "PATCH", "/log-streams/id", None, 1)
diff --git a/tests/wire/test_logs.py b/tests/wire/test_logs.py
new file mode 100644
index 00000000..871bc85e
--- /dev/null
+++ b/tests/wire/test_logs.py
@@ -0,0 +1,33 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_logs_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "logs.list_.0"
+ client = get_client(test_id)
+ client.logs.list(
+ page=1, per_page=1, sort="sort", fields="fields", include_fields=True, include_totals=True, search="search"
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/logs",
+ {
+ "page": "1",
+ "per_page": "1",
+ "sort": "sort",
+ "fields": "fields",
+ "include_fields": "true",
+ "include_totals": "true",
+ "search": "search",
+ },
+ 1,
+ )
+
+
+def test_logs_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "logs.get.0"
+ client = get_client(test_id)
+ client.logs.get(id="id")
+ verify_request_count(test_id, "GET", "/logs/id", None, 1)
diff --git a/tests/wire/test_networkAcls.py b/tests/wire/test_networkAcls.py
new file mode 100644
index 00000000..38a93f7d
--- /dev/null
+++ b/tests/wire/test_networkAcls.py
@@ -0,0 +1,53 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_networkAcls_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "network_acls.list_.0"
+ client = get_client(test_id)
+ client.network_acls.list(page=1, per_page=1, include_totals=True)
+ verify_request_count(test_id, "GET", "/network-acls", {"page": "1", "per_page": "1", "include_totals": "true"}, 1)
+
+
+def test_networkAcls_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "network_acls.create.0"
+ client = get_client(test_id)
+ client.network_acls.create(
+ description="description", active=True, priority=1.1, rule={"action": {}, "scope": "management"}
+ )
+ verify_request_count(test_id, "POST", "/network-acls", None, 1)
+
+
+def test_networkAcls_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "network_acls.get.0"
+ client = get_client(test_id)
+ client.network_acls.get(id="id")
+ verify_request_count(test_id, "GET", "/network-acls/id", None, 1)
+
+
+def test_networkAcls_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "network_acls.set_.0"
+ client = get_client(test_id)
+ client.network_acls.set(
+ id="id", description="description", active=True, priority=1.1, rule={"action": {}, "scope": "management"}
+ )
+ verify_request_count(test_id, "PUT", "/network-acls/id", None, 1)
+
+
+def test_networkAcls_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "network_acls.delete.0"
+ client = get_client(test_id)
+ client.network_acls.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/network-acls/id", None, 1)
+
+
+def test_networkAcls_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "network_acls.update.0"
+ client = get_client(test_id)
+ client.network_acls.update(id="id")
+ verify_request_count(test_id, "PATCH", "/network-acls/id", None, 1)
diff --git a/tests/wire/test_organizations.py b/tests/wire/test_organizations.py
new file mode 100644
index 00000000..9666a83d
--- /dev/null
+++ b/tests/wire/test_organizations.py
@@ -0,0 +1,49 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_organizations_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "organizations.list_.0"
+ client = get_client(test_id)
+ client.organizations.list(from_="from", take=1, sort="sort")
+ verify_request_count(test_id, "GET", "/organizations", {"from": "from", "take": "1", "sort": "sort"}, 1)
+
+
+def test_organizations_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "organizations.create.0"
+ client = get_client(test_id)
+ client.organizations.create(name="name")
+ verify_request_count(test_id, "POST", "/organizations", None, 1)
+
+
+def test_organizations_get_by_name() -> None:
+ """Test getByName endpoint with WireMock"""
+ test_id = "organizations.get_by_name.0"
+ client = get_client(test_id)
+ client.organizations.get_by_name(name="name")
+ verify_request_count(test_id, "GET", "/organizations/name/name", None, 1)
+
+
+def test_organizations_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "organizations.get.0"
+ client = get_client(test_id)
+ client.organizations.get(id="id")
+ verify_request_count(test_id, "GET", "/organizations/id", None, 1)
+
+
+def test_organizations_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "organizations.delete.0"
+ client = get_client(test_id)
+ client.organizations.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/organizations/id", None, 1)
+
+
+def test_organizations_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "organizations.update.0"
+ client = get_client(test_id)
+ client.organizations.update(id="id")
+ verify_request_count(test_id, "PATCH", "/organizations/id", None, 1)
diff --git a/tests/wire/test_organizations_clientGrants.py b/tests/wire/test_organizations_clientGrants.py
new file mode 100644
index 00000000..3e4188ba
--- /dev/null
+++ b/tests/wire/test_organizations_clientGrants.py
@@ -0,0 +1,33 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_organizations_clientGrants_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "organizations.client_grants.list_.0"
+ client = get_client(test_id)
+ client.organizations.client_grants.list(
+ id="id", audience="audience", client_id="client_id", page=1, per_page=1, include_totals=True
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/organizations/id/client-grants",
+ {"audience": "audience", "client_id": "client_id", "page": "1", "per_page": "1", "include_totals": "true"},
+ 1,
+ )
+
+
+def test_organizations_clientGrants_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "organizations.client_grants.create.0"
+ client = get_client(test_id)
+ client.organizations.client_grants.create(id="id", grant_id="grant_id")
+ verify_request_count(test_id, "POST", "/organizations/id/client-grants", None, 1)
+
+
+def test_organizations_clientGrants_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "organizations.client_grants.delete.0"
+ client = get_client(test_id)
+ client.organizations.client_grants.delete(id="id", grant_id="grant_id")
+ verify_request_count(test_id, "DELETE", "/organizations/id/client-grants/grant_id", None, 1)
diff --git a/tests/wire/test_organizations_discoveryDomains.py b/tests/wire/test_organizations_discoveryDomains.py
new file mode 100644
index 00000000..b63a26f2
--- /dev/null
+++ b/tests/wire/test_organizations_discoveryDomains.py
@@ -0,0 +1,41 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_organizations_discoveryDomains_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "organizations.discovery_domains.list_.0"
+ client = get_client(test_id)
+ client.organizations.discovery_domains.list(id="id", from_="from", take=1)
+ verify_request_count(test_id, "GET", "/organizations/id/discovery-domains", {"from": "from", "take": "1"}, 1)
+
+
+def test_organizations_discoveryDomains_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "organizations.discovery_domains.create.0"
+ client = get_client(test_id)
+ client.organizations.discovery_domains.create(id="id", domain="domain")
+ verify_request_count(test_id, "POST", "/organizations/id/discovery-domains", None, 1)
+
+
+def test_organizations_discoveryDomains_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "organizations.discovery_domains.get.0"
+ client = get_client(test_id)
+ client.organizations.discovery_domains.get(id="id", discovery_domain_id="discovery_domain_id")
+ verify_request_count(test_id, "GET", "/organizations/id/discovery-domains/discovery_domain_id", None, 1)
+
+
+def test_organizations_discoveryDomains_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "organizations.discovery_domains.delete.0"
+ client = get_client(test_id)
+ client.organizations.discovery_domains.delete(id="id", discovery_domain_id="discovery_domain_id")
+ verify_request_count(test_id, "DELETE", "/organizations/id/discovery-domains/discovery_domain_id", None, 1)
+
+
+def test_organizations_discoveryDomains_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "organizations.discovery_domains.update.0"
+ client = get_client(test_id)
+ client.organizations.discovery_domains.update(id="id", discovery_domain_id="discovery_domain_id")
+ verify_request_count(test_id, "PATCH", "/organizations/id/discovery-domains/discovery_domain_id", None, 1)
diff --git a/tests/wire/test_organizations_enabledConnections.py b/tests/wire/test_organizations_enabledConnections.py
new file mode 100644
index 00000000..15515c3e
--- /dev/null
+++ b/tests/wire/test_organizations_enabledConnections.py
@@ -0,0 +1,47 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_organizations_enabledConnections_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "organizations.enabled_connections.list_.0"
+ client = get_client(test_id)
+ client.organizations.enabled_connections.list(id="id", page=1, per_page=1, include_totals=True)
+ verify_request_count(
+ test_id,
+ "GET",
+ "/organizations/id/enabled_connections",
+ {"page": "1", "per_page": "1", "include_totals": "true"},
+ 1,
+ )
+
+
+def test_organizations_enabledConnections_add() -> None:
+ """Test add endpoint with WireMock"""
+ test_id = "organizations.enabled_connections.add.0"
+ client = get_client(test_id)
+ client.organizations.enabled_connections.add(id="id", connection_id="connection_id")
+ verify_request_count(test_id, "POST", "/organizations/id/enabled_connections", None, 1)
+
+
+def test_organizations_enabledConnections_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "organizations.enabled_connections.get.0"
+ client = get_client(test_id)
+ client.organizations.enabled_connections.get(id="id", connection_id="connectionId")
+ verify_request_count(test_id, "GET", "/organizations/id/enabled_connections/connectionId", None, 1)
+
+
+def test_organizations_enabledConnections_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "organizations.enabled_connections.delete.0"
+ client = get_client(test_id)
+ client.organizations.enabled_connections.delete(id="id", connection_id="connectionId")
+ verify_request_count(test_id, "DELETE", "/organizations/id/enabled_connections/connectionId", None, 1)
+
+
+def test_organizations_enabledConnections_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "organizations.enabled_connections.update.0"
+ client = get_client(test_id)
+ client.organizations.enabled_connections.update(id="id", connection_id="connectionId")
+ verify_request_count(test_id, "PATCH", "/organizations/id/enabled_connections/connectionId", None, 1)
diff --git a/tests/wire/test_organizations_invitations.py b/tests/wire/test_organizations_invitations.py
new file mode 100644
index 00000000..d884364b
--- /dev/null
+++ b/tests/wire/test_organizations_invitations.py
@@ -0,0 +1,52 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_organizations_invitations_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "organizations.invitations.list_.0"
+ client = get_client(test_id)
+ client.organizations.invitations.list(
+ id="id", page=1, per_page=1, include_totals=True, fields="fields", include_fields=True, sort="sort"
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/organizations/id/invitations",
+ {
+ "page": "1",
+ "per_page": "1",
+ "include_totals": "true",
+ "fields": "fields",
+ "include_fields": "true",
+ "sort": "sort",
+ },
+ 1,
+ )
+
+
+def test_organizations_invitations_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "organizations.invitations.create.0"
+ client = get_client(test_id)
+ client.organizations.invitations.create(
+ id="id", inviter={"name": "name"}, invitee={"email": "email"}, client_id="client_id"
+ )
+ verify_request_count(test_id, "POST", "/organizations/id/invitations", None, 1)
+
+
+def test_organizations_invitations_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "organizations.invitations.get.0"
+ client = get_client(test_id)
+ client.organizations.invitations.get(id="id", invitation_id="invitation_id", fields="fields", include_fields=True)
+ verify_request_count(
+ test_id, "GET", "/organizations/id/invitations/invitation_id", {"fields": "fields", "include_fields": "true"}, 1
+ )
+
+
+def test_organizations_invitations_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "organizations.invitations.delete.0"
+ client = get_client(test_id)
+ client.organizations.invitations.delete(id="id", invitation_id="invitation_id")
+ verify_request_count(test_id, "DELETE", "/organizations/id/invitations/invitation_id", None, 1)
diff --git a/tests/wire/test_organizations_members.py b/tests/wire/test_organizations_members.py
new file mode 100644
index 00000000..9ba3d19d
--- /dev/null
+++ b/tests/wire/test_organizations_members.py
@@ -0,0 +1,31 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_organizations_members_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "organizations.members.list_.0"
+ client = get_client(test_id)
+ client.organizations.members.list(id="id", from_="from", take=1, fields="fields", include_fields=True)
+ verify_request_count(
+ test_id,
+ "GET",
+ "/organizations/id/members",
+ {"from": "from", "take": "1", "fields": "fields", "include_fields": "true"},
+ 1,
+ )
+
+
+def test_organizations_members_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "organizations.members.create.0"
+ client = get_client(test_id)
+ client.organizations.members.create(id="id", members=["members"])
+ verify_request_count(test_id, "POST", "/organizations/id/members", None, 1)
+
+
+def test_organizations_members_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "organizations.members.delete.0"
+ client = get_client(test_id)
+ client.organizations.members.delete(id="id", members=["members"])
+ verify_request_count(test_id, "DELETE", "/organizations/id/members", None, 1)
diff --git a/tests/wire/test_organizations_members_roles.py b/tests/wire/test_organizations_members_roles.py
new file mode 100644
index 00000000..4ef2489a
--- /dev/null
+++ b/tests/wire/test_organizations_members_roles.py
@@ -0,0 +1,31 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_organizations_members_roles_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "organizations.members.roles.list_.0"
+ client = get_client(test_id)
+ client.organizations.members.roles.list(id="id", user_id="user_id", page=1, per_page=1, include_totals=True)
+ verify_request_count(
+ test_id,
+ "GET",
+ "/organizations/id/members/user_id/roles",
+ {"page": "1", "per_page": "1", "include_totals": "true"},
+ 1,
+ )
+
+
+def test_organizations_members_roles_assign() -> None:
+ """Test assign endpoint with WireMock"""
+ test_id = "organizations.members.roles.assign.0"
+ client = get_client(test_id)
+ client.organizations.members.roles.assign(id="id", user_id="user_id", roles=["roles"])
+ verify_request_count(test_id, "POST", "/organizations/id/members/user_id/roles", None, 1)
+
+
+def test_organizations_members_roles_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "organizations.members.roles.delete.0"
+ client = get_client(test_id)
+ client.organizations.members.roles.delete(id="id", user_id="user_id", roles=["roles"])
+ verify_request_count(test_id, "DELETE", "/organizations/id/members/user_id/roles", None, 1)
diff --git a/tests/wire/test_prompts.py b/tests/wire/test_prompts.py
new file mode 100644
index 00000000..b11ab5e6
--- /dev/null
+++ b/tests/wire/test_prompts.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_prompts_get_settings() -> None:
+ """Test getSettings endpoint with WireMock"""
+ test_id = "prompts.get_settings.0"
+ client = get_client(test_id)
+ client.prompts.get_settings()
+ verify_request_count(test_id, "GET", "/prompts", None, 1)
+
+
+def test_prompts_update_settings() -> None:
+ """Test updateSettings endpoint with WireMock"""
+ test_id = "prompts.update_settings.0"
+ client = get_client(test_id)
+ client.prompts.update_settings()
+ verify_request_count(test_id, "PATCH", "/prompts", None, 1)
diff --git a/tests/wire/test_prompts_customText.py b/tests/wire/test_prompts_customText.py
new file mode 100644
index 00000000..d539b6da
--- /dev/null
+++ b/tests/wire/test_prompts_customText.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_prompts_customText_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "prompts.custom_text.get.0"
+ client = get_client(test_id)
+ client.prompts.custom_text.get(prompt="login", language="am")
+ verify_request_count(test_id, "GET", "/prompts/login/custom-text/am", None, 1)
+
+
+def test_prompts_customText_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "prompts.custom_text.set_.0"
+ client = get_client(test_id)
+ client.prompts.custom_text.set(prompt="login", language="am", request={"key": "value"})
+ verify_request_count(test_id, "PUT", "/prompts/login/custom-text/am", None, 1)
diff --git a/tests/wire/test_prompts_partials.py b/tests/wire/test_prompts_partials.py
new file mode 100644
index 00000000..af7f75a9
--- /dev/null
+++ b/tests/wire/test_prompts_partials.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_prompts_partials_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "prompts.partials.get.0"
+ client = get_client(test_id)
+ client.prompts.partials.get(prompt="login")
+ verify_request_count(test_id, "GET", "/prompts/login/partials", None, 1)
+
+
+def test_prompts_partials_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "prompts.partials.set_.0"
+ client = get_client(test_id)
+ client.prompts.partials.set(prompt="login", request={"key": "value"})
+ verify_request_count(test_id, "PUT", "/prompts/login/partials", None, 1)
diff --git a/tests/wire/test_prompts_rendering.py b/tests/wire/test_prompts_rendering.py
new file mode 100644
index 00000000..b02bc16d
--- /dev/null
+++ b/tests/wire/test_prompts_rendering.py
@@ -0,0 +1,57 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_prompts_rendering_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "prompts.rendering.list_.0"
+ client = get_client(test_id)
+ client.prompts.rendering.list(
+ fields="fields",
+ include_fields=True,
+ page=1,
+ per_page=1,
+ include_totals=True,
+ prompt="prompt",
+ screen="screen",
+ rendering_mode="advanced",
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/prompts/rendering",
+ {
+ "fields": "fields",
+ "include_fields": "true",
+ "page": "1",
+ "per_page": "1",
+ "include_totals": "true",
+ "prompt": "prompt",
+ "screen": "screen",
+ "rendering_mode": "advanced",
+ },
+ 1,
+ )
+
+
+def test_prompts_rendering_bulk_update() -> None:
+ """Test bulkUpdate endpoint with WireMock"""
+ test_id = "prompts.rendering.bulk_update.0"
+ client = get_client(test_id)
+ client.prompts.rendering.bulk_update(configs=[{"prompt": "login", "screen": "login"}])
+ verify_request_count(test_id, "PATCH", "/prompts/rendering", None, 1)
+
+
+def test_prompts_rendering_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "prompts.rendering.get.0"
+ client = get_client(test_id)
+ client.prompts.rendering.get(prompt="login", screen="login")
+ verify_request_count(test_id, "GET", "/prompts/login/screen/login/rendering", None, 1)
+
+
+def test_prompts_rendering_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "prompts.rendering.update.0"
+ client = get_client(test_id)
+ client.prompts.rendering.update(prompt="login", screen="login")
+ verify_request_count(test_id, "PATCH", "/prompts/login/screen/login/rendering", None, 1)
diff --git a/tests/wire/test_refreshTokens.py b/tests/wire/test_refreshTokens.py
new file mode 100644
index 00000000..205a8af5
--- /dev/null
+++ b/tests/wire/test_refreshTokens.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_refreshTokens_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "refresh_tokens.get.0"
+ client = get_client(test_id)
+ client.refresh_tokens.get(id="id")
+ verify_request_count(test_id, "GET", "/refresh-tokens/id", None, 1)
+
+
+def test_refreshTokens_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "refresh_tokens.delete.0"
+ client = get_client(test_id)
+ client.refresh_tokens.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/refresh-tokens/id", None, 1)
diff --git a/tests/wire/test_resourceServers.py b/tests/wire/test_resourceServers.py
new file mode 100644
index 00000000..49810dcf
--- /dev/null
+++ b/tests/wire/test_resourceServers.py
@@ -0,0 +1,47 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_resourceServers_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "resource_servers.list_.0"
+ client = get_client(test_id)
+ client.resource_servers.list(page=1, per_page=1, include_totals=True, include_fields=True)
+ verify_request_count(
+ test_id,
+ "GET",
+ "/resource-servers",
+ {"page": "1", "per_page": "1", "include_totals": "true", "include_fields": "true"},
+ 1,
+ )
+
+
+def test_resourceServers_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "resource_servers.create.0"
+ client = get_client(test_id)
+ client.resource_servers.create(identifier="identifier")
+ verify_request_count(test_id, "POST", "/resource-servers", None, 1)
+
+
+def test_resourceServers_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "resource_servers.get.0"
+ client = get_client(test_id)
+ client.resource_servers.get(id="id", include_fields=True)
+ verify_request_count(test_id, "GET", "/resource-servers/id", {"include_fields": "true"}, 1)
+
+
+def test_resourceServers_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "resource_servers.delete.0"
+ client = get_client(test_id)
+ client.resource_servers.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/resource-servers/id", None, 1)
+
+
+def test_resourceServers_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "resource_servers.update.0"
+ client = get_client(test_id)
+ client.resource_servers.update(id="id")
+ verify_request_count(test_id, "PATCH", "/resource-servers/id", None, 1)
diff --git a/tests/wire/test_riskAssessments_settings.py b/tests/wire/test_riskAssessments_settings.py
new file mode 100644
index 00000000..d749ccfd
--- /dev/null
+++ b/tests/wire/test_riskAssessments_settings.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_riskAssessments_settings_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "risk_assessments.settings.get.0"
+ client = get_client(test_id)
+ client.risk_assessments.settings.get()
+ verify_request_count(test_id, "GET", "/risk-assessments/settings", None, 1)
+
+
+def test_riskAssessments_settings_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "risk_assessments.settings.update.0"
+ client = get_client(test_id)
+ client.risk_assessments.settings.update(enabled=True)
+ verify_request_count(test_id, "PATCH", "/risk-assessments/settings", None, 1)
diff --git a/tests/wire/test_riskAssessments_settings_newDevice.py b/tests/wire/test_riskAssessments_settings_newDevice.py
new file mode 100644
index 00000000..347e392e
--- /dev/null
+++ b/tests/wire/test_riskAssessments_settings_newDevice.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_riskAssessments_settings_newDevice_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "risk_assessments.settings.new_device.get.0"
+ client = get_client(test_id)
+ client.risk_assessments.settings.new_device.get()
+ verify_request_count(test_id, "GET", "/risk-assessments/settings/new-device", None, 1)
+
+
+def test_riskAssessments_settings_newDevice_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "risk_assessments.settings.new_device.update.0"
+ client = get_client(test_id)
+ client.risk_assessments.settings.new_device.update(remember_for=1)
+ verify_request_count(test_id, "PATCH", "/risk-assessments/settings/new-device", None, 1)
diff --git a/tests/wire/test_roles.py b/tests/wire/test_roles.py
new file mode 100644
index 00000000..2a774484
--- /dev/null
+++ b/tests/wire/test_roles.py
@@ -0,0 +1,47 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_roles_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "roles.list_.0"
+ client = get_client(test_id)
+ client.roles.list(per_page=1, page=1, include_totals=True, name_filter="name_filter")
+ verify_request_count(
+ test_id,
+ "GET",
+ "/roles",
+ {"per_page": "1", "page": "1", "include_totals": "true", "name_filter": "name_filter"},
+ 1,
+ )
+
+
+def test_roles_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "roles.create.0"
+ client = get_client(test_id)
+ client.roles.create(name="name")
+ verify_request_count(test_id, "POST", "/roles", None, 1)
+
+
+def test_roles_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "roles.get.0"
+ client = get_client(test_id)
+ client.roles.get(id="id")
+ verify_request_count(test_id, "GET", "/roles/id", None, 1)
+
+
+def test_roles_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "roles.delete.0"
+ client = get_client(test_id)
+ client.roles.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/roles/id", None, 1)
+
+
+def test_roles_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "roles.update.0"
+ client = get_client(test_id)
+ client.roles.update(id="id")
+ verify_request_count(test_id, "PATCH", "/roles/id", None, 1)
diff --git a/tests/wire/test_roles_permissions.py b/tests/wire/test_roles_permissions.py
new file mode 100644
index 00000000..80026cc3
--- /dev/null
+++ b/tests/wire/test_roles_permissions.py
@@ -0,0 +1,37 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_roles_permissions_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "roles.permissions.list_.0"
+ client = get_client(test_id)
+ client.roles.permissions.list(id="id", per_page=1, page=1, include_totals=True)
+ verify_request_count(
+ test_id, "GET", "/roles/id/permissions", {"per_page": "1", "page": "1", "include_totals": "true"}, 1
+ )
+
+
+def test_roles_permissions_add() -> None:
+ """Test add endpoint with WireMock"""
+ test_id = "roles.permissions.add.0"
+ client = get_client(test_id)
+ client.roles.permissions.add(
+ id="id",
+ permissions=[
+ {"resource_server_identifier": "resource_server_identifier", "permission_name": "permission_name"}
+ ],
+ )
+ verify_request_count(test_id, "POST", "/roles/id/permissions", None, 1)
+
+
+def test_roles_permissions_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "roles.permissions.delete.0"
+ client = get_client(test_id)
+ client.roles.permissions.delete(
+ id="id",
+ permissions=[
+ {"resource_server_identifier": "resource_server_identifier", "permission_name": "permission_name"}
+ ],
+ )
+ verify_request_count(test_id, "DELETE", "/roles/id/permissions", None, 1)
diff --git a/tests/wire/test_roles_users.py b/tests/wire/test_roles_users.py
new file mode 100644
index 00000000..2c360c35
--- /dev/null
+++ b/tests/wire/test_roles_users.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_roles_users_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "roles.users.list_.0"
+ client = get_client(test_id)
+ client.roles.users.list(id="id", from_="from", take=1)
+ verify_request_count(test_id, "GET", "/roles/id/users", {"from": "from", "take": "1"}, 1)
+
+
+def test_roles_users_assign() -> None:
+ """Test assign endpoint with WireMock"""
+ test_id = "roles.users.assign.0"
+ client = get_client(test_id)
+ client.roles.users.assign(id="id", users=["users"])
+ verify_request_count(test_id, "POST", "/roles/id/users", None, 1)
diff --git a/tests/wire/test_rules.py b/tests/wire/test_rules.py
new file mode 100644
index 00000000..e0f2766f
--- /dev/null
+++ b/tests/wire/test_rules.py
@@ -0,0 +1,54 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_rules_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "rules.list_.0"
+ client = get_client(test_id)
+ client.rules.list(page=1, per_page=1, include_totals=True, enabled=True, fields="fields", include_fields=True)
+ verify_request_count(
+ test_id,
+ "GET",
+ "/rules",
+ {
+ "page": "1",
+ "per_page": "1",
+ "include_totals": "true",
+ "enabled": "true",
+ "fields": "fields",
+ "include_fields": "true",
+ },
+ 1,
+ )
+
+
+def test_rules_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "rules.create.0"
+ client = get_client(test_id)
+ client.rules.create(name="name", script="script")
+ verify_request_count(test_id, "POST", "/rules", None, 1)
+
+
+def test_rules_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "rules.get.0"
+ client = get_client(test_id)
+ client.rules.get(id="id", fields="fields", include_fields=True)
+ verify_request_count(test_id, "GET", "/rules/id", {"fields": "fields", "include_fields": "true"}, 1)
+
+
+def test_rules_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "rules.delete.0"
+ client = get_client(test_id)
+ client.rules.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/rules/id", None, 1)
+
+
+def test_rules_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "rules.update.0"
+ client = get_client(test_id)
+ client.rules.update(id="id")
+ verify_request_count(test_id, "PATCH", "/rules/id", None, 1)
diff --git a/tests/wire/test_rulesConfigs.py b/tests/wire/test_rulesConfigs.py
new file mode 100644
index 00000000..02717723
--- /dev/null
+++ b/tests/wire/test_rulesConfigs.py
@@ -0,0 +1,25 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_rulesConfigs_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "rules_configs.list_.0"
+ client = get_client(test_id)
+ client.rules_configs.list()
+ verify_request_count(test_id, "GET", "/rules-configs", None, 1)
+
+
+def test_rulesConfigs_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "rules_configs.set_.0"
+ client = get_client(test_id)
+ client.rules_configs.set(key="key", value="value")
+ verify_request_count(test_id, "PUT", "/rules-configs/key", None, 1)
+
+
+def test_rulesConfigs_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "rules_configs.delete.0"
+ client = get_client(test_id)
+ client.rules_configs.delete(key="key")
+ verify_request_count(test_id, "DELETE", "/rules-configs/key", None, 1)
diff --git a/tests/wire/test_selfServiceProfiles.py b/tests/wire/test_selfServiceProfiles.py
new file mode 100644
index 00000000..1d232f1b
--- /dev/null
+++ b/tests/wire/test_selfServiceProfiles.py
@@ -0,0 +1,43 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_selfServiceProfiles_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "self_service_profiles.list_.0"
+ client = get_client(test_id)
+ client.self_service_profiles.list(page=1, per_page=1, include_totals=True)
+ verify_request_count(
+ test_id, "GET", "/self-service-profiles", {"page": "1", "per_page": "1", "include_totals": "true"}, 1
+ )
+
+
+def test_selfServiceProfiles_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "self_service_profiles.create.0"
+ client = get_client(test_id)
+ client.self_service_profiles.create(name="name")
+ verify_request_count(test_id, "POST", "/self-service-profiles", None, 1)
+
+
+def test_selfServiceProfiles_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "self_service_profiles.get.0"
+ client = get_client(test_id)
+ client.self_service_profiles.get(id="id")
+ verify_request_count(test_id, "GET", "/self-service-profiles/id", None, 1)
+
+
+def test_selfServiceProfiles_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "self_service_profiles.delete.0"
+ client = get_client(test_id)
+ client.self_service_profiles.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/self-service-profiles/id", None, 1)
+
+
+def test_selfServiceProfiles_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "self_service_profiles.update.0"
+ client = get_client(test_id)
+ client.self_service_profiles.update(id="id")
+ verify_request_count(test_id, "PATCH", "/self-service-profiles/id", None, 1)
diff --git a/tests/wire/test_selfServiceProfiles_customText.py b/tests/wire/test_selfServiceProfiles_customText.py
new file mode 100644
index 00000000..5b4107d6
--- /dev/null
+++ b/tests/wire/test_selfServiceProfiles_customText.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_selfServiceProfiles_customText_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "self_service_profiles.custom_text.list_.0"
+ client = get_client(test_id)
+ client.self_service_profiles.custom_text.list(id="id")
+ verify_request_count(test_id, "GET", "/self-service-profiles/id/custom-text/en/get-started", None, 1)
+
+
+def test_selfServiceProfiles_customText_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "self_service_profiles.custom_text.set_.0"
+ client = get_client(test_id)
+ client.self_service_profiles.custom_text.set(id="id", request={"key": "value"})
+ verify_request_count(test_id, "PUT", "/self-service-profiles/id/custom-text/en/get-started", None, 1)
diff --git a/tests/wire/test_selfServiceProfiles_ssoTicket.py b/tests/wire/test_selfServiceProfiles_ssoTicket.py
new file mode 100644
index 00000000..c71ebacf
--- /dev/null
+++ b/tests/wire/test_selfServiceProfiles_ssoTicket.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_selfServiceProfiles_ssoTicket_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "self_service_profiles.sso_ticket.create.0"
+ client = get_client(test_id)
+ client.self_service_profiles.sso_ticket.create(id="id")
+ verify_request_count(test_id, "POST", "/self-service-profiles/id/sso-ticket", None, 1)
+
+
+def test_selfServiceProfiles_ssoTicket_revoke() -> None:
+ """Test revoke endpoint with WireMock"""
+ test_id = "self_service_profiles.sso_ticket.revoke.0"
+ client = get_client(test_id)
+ client.self_service_profiles.sso_ticket.revoke(profile_id="profileId", id="id")
+ verify_request_count(test_id, "POST", "/self-service-profiles/profileId/sso-ticket/id/revoke", None, 1)
diff --git a/tests/wire/test_sessions.py b/tests/wire/test_sessions.py
new file mode 100644
index 00000000..3e0b29a2
--- /dev/null
+++ b/tests/wire/test_sessions.py
@@ -0,0 +1,33 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_sessions_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "sessions.get.0"
+ client = get_client(test_id)
+ client.sessions.get(id="id")
+ verify_request_count(test_id, "GET", "/sessions/id", None, 1)
+
+
+def test_sessions_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "sessions.delete.0"
+ client = get_client(test_id)
+ client.sessions.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/sessions/id", None, 1)
+
+
+def test_sessions_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "sessions.update.0"
+ client = get_client(test_id)
+ client.sessions.update(id="id")
+ verify_request_count(test_id, "PATCH", "/sessions/id", None, 1)
+
+
+def test_sessions_revoke() -> None:
+ """Test revoke endpoint with WireMock"""
+ test_id = "sessions.revoke.0"
+ client = get_client(test_id)
+ client.sessions.revoke(id="id")
+ verify_request_count(test_id, "POST", "/sessions/id/revoke", None, 1)
diff --git a/tests/wire/test_stats.py b/tests/wire/test_stats.py
new file mode 100644
index 00000000..e2cf0692
--- /dev/null
+++ b/tests/wire/test_stats.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_stats_get_active_users_count() -> None:
+ """Test getActiveUsersCount endpoint with WireMock"""
+ test_id = "stats.get_active_users_count.0"
+ client = get_client(test_id)
+ client.stats.get_active_users_count()
+ verify_request_count(test_id, "GET", "/stats/active-users", None, 1)
+
+
+def test_stats_get_daily() -> None:
+ """Test getDaily endpoint with WireMock"""
+ test_id = "stats.get_daily.0"
+ client = get_client(test_id)
+ client.stats.get_daily(from_="from", to="to")
+ verify_request_count(test_id, "GET", "/stats/daily", {"from": "from", "to": "to"}, 1)
diff --git a/tests/wire/test_supplementalSignals.py b/tests/wire/test_supplementalSignals.py
new file mode 100644
index 00000000..f486be10
--- /dev/null
+++ b/tests/wire/test_supplementalSignals.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_supplementalSignals_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "supplemental_signals.get.0"
+ client = get_client(test_id)
+ client.supplemental_signals.get()
+ verify_request_count(test_id, "GET", "/supplemental-signals", None, 1)
+
+
+def test_supplementalSignals_patch() -> None:
+ """Test patch endpoint with WireMock"""
+ test_id = "supplemental_signals.patch.0"
+ client = get_client(test_id)
+ client.supplemental_signals.patch(akamai_enabled=True)
+ verify_request_count(test_id, "PATCH", "/supplemental-signals", None, 1)
diff --git a/tests/wire/test_tenants_settings.py b/tests/wire/test_tenants_settings.py
new file mode 100644
index 00000000..b54284f1
--- /dev/null
+++ b/tests/wire/test_tenants_settings.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_tenants_settings_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "tenants.settings.get.0"
+ client = get_client(test_id)
+ client.tenants.settings.get(fields="fields", include_fields=True)
+ verify_request_count(test_id, "GET", "/tenants/settings", {"fields": "fields", "include_fields": "true"}, 1)
+
+
+def test_tenants_settings_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "tenants.settings.update.0"
+ client = get_client(test_id)
+ client.tenants.settings.update()
+ verify_request_count(test_id, "PATCH", "/tenants/settings", None, 1)
diff --git a/tests/wire/test_tickets.py b/tests/wire/test_tickets.py
new file mode 100644
index 00000000..73fc2fc2
--- /dev/null
+++ b/tests/wire/test_tickets.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_tickets_verify_email() -> None:
+ """Test verifyEmail endpoint with WireMock"""
+ test_id = "tickets.verify_email.0"
+ client = get_client(test_id)
+ client.tickets.verify_email(user_id="user_id")
+ verify_request_count(test_id, "POST", "/tickets/email-verification", None, 1)
+
+
+def test_tickets_change_password() -> None:
+ """Test changePassword endpoint with WireMock"""
+ test_id = "tickets.change_password.0"
+ client = get_client(test_id)
+ client.tickets.change_password()
+ verify_request_count(test_id, "POST", "/tickets/password-change", None, 1)
diff --git a/tests/wire/test_tokenExchangeProfiles.py b/tests/wire/test_tokenExchangeProfiles.py
new file mode 100644
index 00000000..90e48824
--- /dev/null
+++ b/tests/wire/test_tokenExchangeProfiles.py
@@ -0,0 +1,41 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_tokenExchangeProfiles_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "token_exchange_profiles.list_.0"
+ client = get_client(test_id)
+ client.token_exchange_profiles.list(from_="from", take=1)
+ verify_request_count(test_id, "GET", "/token-exchange-profiles", {"from": "from", "take": "1"}, 1)
+
+
+def test_tokenExchangeProfiles_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "token_exchange_profiles.create.0"
+ client = get_client(test_id)
+ client.token_exchange_profiles.create(name="name", subject_token_type="subject_token_type", action_id="action_id")
+ verify_request_count(test_id, "POST", "/token-exchange-profiles", None, 1)
+
+
+def test_tokenExchangeProfiles_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "token_exchange_profiles.get.0"
+ client = get_client(test_id)
+ client.token_exchange_profiles.get(id="id")
+ verify_request_count(test_id, "GET", "/token-exchange-profiles/id", None, 1)
+
+
+def test_tokenExchangeProfiles_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "token_exchange_profiles.delete.0"
+ client = get_client(test_id)
+ client.token_exchange_profiles.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/token-exchange-profiles/id", None, 1)
+
+
+def test_tokenExchangeProfiles_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "token_exchange_profiles.update.0"
+ client = get_client(test_id)
+ client.token_exchange_profiles.update(id="id")
+ verify_request_count(test_id, "PATCH", "/token-exchange-profiles/id", None, 1)
diff --git a/tests/wire/test_userAttributeProfiles.py b/tests/wire/test_userAttributeProfiles.py
new file mode 100644
index 00000000..beefb9c0
--- /dev/null
+++ b/tests/wire/test_userAttributeProfiles.py
@@ -0,0 +1,67 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_userAttributeProfiles_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "user_attribute_profiles.list_.0"
+ client = get_client(test_id)
+ client.user_attribute_profiles.list(from_="from", take=1)
+ verify_request_count(test_id, "GET", "/user-attribute-profiles", {"from": "from", "take": "1"}, 1)
+
+
+def test_userAttributeProfiles_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "user_attribute_profiles.create.0"
+ client = get_client(test_id)
+ client.user_attribute_profiles.create(
+ name="name",
+ user_attributes={
+ "key": {
+ "description": "description",
+ "label": "label",
+ "profile_required": True,
+ "auth_0_mapping": "auth0_mapping",
+ }
+ },
+ )
+ verify_request_count(test_id, "POST", "/user-attribute-profiles", None, 1)
+
+
+def test_userAttributeProfiles_list_templates() -> None:
+ """Test listTemplates endpoint with WireMock"""
+ test_id = "user_attribute_profiles.list_templates.0"
+ client = get_client(test_id)
+ client.user_attribute_profiles.list_templates()
+ verify_request_count(test_id, "GET", "/user-attribute-profiles/templates", None, 1)
+
+
+def test_userAttributeProfiles_get_template() -> None:
+ """Test getTemplate endpoint with WireMock"""
+ test_id = "user_attribute_profiles.get_template.0"
+ client = get_client(test_id)
+ client.user_attribute_profiles.get_template(id="id")
+ verify_request_count(test_id, "GET", "/user-attribute-profiles/templates/id", None, 1)
+
+
+def test_userAttributeProfiles_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "user_attribute_profiles.get.0"
+ client = get_client(test_id)
+ client.user_attribute_profiles.get(id="id")
+ verify_request_count(test_id, "GET", "/user-attribute-profiles/id", None, 1)
+
+
+def test_userAttributeProfiles_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "user_attribute_profiles.delete.0"
+ client = get_client(test_id)
+ client.user_attribute_profiles.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/user-attribute-profiles/id", None, 1)
+
+
+def test_userAttributeProfiles_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "user_attribute_profiles.update.0"
+ client = get_client(test_id)
+ client.user_attribute_profiles.update(id="id")
+ verify_request_count(test_id, "PATCH", "/user-attribute-profiles/id", None, 1)
diff --git a/tests/wire/test_userBlocks.py b/tests/wire/test_userBlocks.py
new file mode 100644
index 00000000..57b00498
--- /dev/null
+++ b/tests/wire/test_userBlocks.py
@@ -0,0 +1,35 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_userBlocks_list_by_identifier() -> None:
+ """Test listByIdentifier endpoint with WireMock"""
+ test_id = "user_blocks.list_by_identifier.0"
+ client = get_client(test_id)
+ client.user_blocks.list_by_identifier(identifier="identifier", consider_brute_force_enablement=True)
+ verify_request_count(
+ test_id, "GET", "/user-blocks", {"identifier": "identifier", "consider_brute_force_enablement": "true"}, 1
+ )
+
+
+def test_userBlocks_delete_by_identifier() -> None:
+ """Test deleteByIdentifier endpoint with WireMock"""
+ test_id = "user_blocks.delete_by_identifier.0"
+ client = get_client(test_id)
+ client.user_blocks.delete_by_identifier(identifier="identifier")
+ verify_request_count(test_id, "DELETE", "/user-blocks", {"identifier": "identifier"}, 1)
+
+
+def test_userBlocks_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "user_blocks.list_.0"
+ client = get_client(test_id)
+ client.user_blocks.list(id="id", consider_brute_force_enablement=True)
+ verify_request_count(test_id, "GET", "/user-blocks/id", {"consider_brute_force_enablement": "true"}, 1)
+
+
+def test_userBlocks_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "user_blocks.delete.0"
+ client = get_client(test_id)
+ client.user_blocks.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/user-blocks/id", None, 1)
diff --git a/tests/wire/test_userGrants.py b/tests/wire/test_userGrants.py
new file mode 100644
index 00000000..f1cb4f60
--- /dev/null
+++ b/tests/wire/test_userGrants.py
@@ -0,0 +1,40 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_userGrants_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "user_grants.list_.0"
+ client = get_client(test_id)
+ client.user_grants.list(
+ per_page=1, page=1, include_totals=True, user_id="user_id", client_id="client_id", audience="audience"
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/grants",
+ {
+ "per_page": "1",
+ "page": "1",
+ "include_totals": "true",
+ "user_id": "user_id",
+ "client_id": "client_id",
+ "audience": "audience",
+ },
+ 1,
+ )
+
+
+def test_userGrants_delete_by_user_id() -> None:
+ """Test deleteByUserId endpoint with WireMock"""
+ test_id = "user_grants.delete_by_user_id.0"
+ client = get_client(test_id)
+ client.user_grants.delete_by_user_id(user_id="user_id")
+ verify_request_count(test_id, "DELETE", "/grants", {"user_id": "user_id"}, 1)
+
+
+def test_userGrants_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "user_grants.delete.0"
+ client = get_client(test_id)
+ client.user_grants.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/grants/id", None, 1)
diff --git a/tests/wire/test_users.py b/tests/wire/test_users.py
new file mode 100644
index 00000000..cce535cc
--- /dev/null
+++ b/tests/wire/test_users.py
@@ -0,0 +1,95 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.list_.0"
+ client = get_client(test_id)
+ client.users.list(
+ page=1,
+ per_page=1,
+ include_totals=True,
+ sort="sort",
+ connection="connection",
+ fields="fields",
+ include_fields=True,
+ q="q",
+ search_engine="v1",
+ primary_order=True,
+ )
+ verify_request_count(
+ test_id,
+ "GET",
+ "/users",
+ {
+ "page": "1",
+ "per_page": "1",
+ "include_totals": "true",
+ "sort": "sort",
+ "connection": "connection",
+ "fields": "fields",
+ "include_fields": "true",
+ "q": "q",
+ "search_engine": "v1",
+ "primary_order": "true",
+ },
+ 1,
+ )
+
+
+def test_users_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "users.create.0"
+ client = get_client(test_id)
+ client.users.create(connection="connection")
+ verify_request_count(test_id, "POST", "/users", None, 1)
+
+
+def test_users_list_users_by_email() -> None:
+ """Test listUsersByEmail endpoint with WireMock"""
+ test_id = "users.list_users_by_email.0"
+ client = get_client(test_id)
+ client.users.list_users_by_email(fields="fields", include_fields=True, email="email")
+ verify_request_count(
+ test_id, "GET", "/users-by-email", {"fields": "fields", "include_fields": "true", "email": "email"}, 1
+ )
+
+
+def test_users_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "users.get.0"
+ client = get_client(test_id)
+ client.users.get(id="id", fields="fields", include_fields=True)
+ verify_request_count(test_id, "GET", "/users/id", {"fields": "fields", "include_fields": "true"}, 1)
+
+
+def test_users_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "users.delete.0"
+ client = get_client(test_id)
+ client.users.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/users/id", None, 1)
+
+
+def test_users_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "users.update.0"
+ client = get_client(test_id)
+ client.users.update(id="id")
+ verify_request_count(test_id, "PATCH", "/users/id", None, 1)
+
+
+def test_users_regenerate_recovery_code() -> None:
+ """Test regenerateRecoveryCode endpoint with WireMock"""
+ test_id = "users.regenerate_recovery_code.0"
+ client = get_client(test_id)
+ client.users.regenerate_recovery_code(id="id")
+ verify_request_count(test_id, "POST", "/users/id/recovery-code-regeneration", None, 1)
+
+
+def test_users_revoke_access() -> None:
+ """Test revokeAccess endpoint with WireMock"""
+ test_id = "users.revoke_access.0"
+ client = get_client(test_id)
+ client.users.revoke_access(id="id")
+ verify_request_count(test_id, "POST", "/users/id/revoke-access", None, 1)
diff --git a/tests/wire/test_users_authenticationMethods.py b/tests/wire/test_users_authenticationMethods.py
new file mode 100644
index 00000000..3db14a1c
--- /dev/null
+++ b/tests/wire/test_users_authenticationMethods.py
@@ -0,0 +1,59 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_authenticationMethods_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.authentication_methods.list_.0"
+ client = get_client(test_id)
+ client.users.authentication_methods.list(id="id", page=1, per_page=1, include_totals=True)
+ verify_request_count(
+ test_id, "GET", "/users/id/authentication-methods", {"page": "1", "per_page": "1", "include_totals": "true"}, 1
+ )
+
+
+def test_users_authenticationMethods_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "users.authentication_methods.create.0"
+ client = get_client(test_id)
+ client.users.authentication_methods.create(id="id", type="phone")
+ verify_request_count(test_id, "POST", "/users/id/authentication-methods", None, 1)
+
+
+def test_users_authenticationMethods_set_() -> None:
+ """Test set endpoint with WireMock"""
+ test_id = "users.authentication_methods.set_.0"
+ client = get_client(test_id)
+ client.users.authentication_methods.set(id="id", request=[{"type": "phone"}])
+ verify_request_count(test_id, "PUT", "/users/id/authentication-methods", None, 1)
+
+
+def test_users_authenticationMethods_delete_all() -> None:
+ """Test deleteAll endpoint with WireMock"""
+ test_id = "users.authentication_methods.delete_all.0"
+ client = get_client(test_id)
+ client.users.authentication_methods.delete_all(id="id")
+ verify_request_count(test_id, "DELETE", "/users/id/authentication-methods", None, 1)
+
+
+def test_users_authenticationMethods_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "users.authentication_methods.get.0"
+ client = get_client(test_id)
+ client.users.authentication_methods.get(id="id", authentication_method_id="authentication_method_id")
+ verify_request_count(test_id, "GET", "/users/id/authentication-methods/authentication_method_id", None, 1)
+
+
+def test_users_authenticationMethods_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "users.authentication_methods.delete.0"
+ client = get_client(test_id)
+ client.users.authentication_methods.delete(id="id", authentication_method_id="authentication_method_id")
+ verify_request_count(test_id, "DELETE", "/users/id/authentication-methods/authentication_method_id", None, 1)
+
+
+def test_users_authenticationMethods_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "users.authentication_methods.update.0"
+ client = get_client(test_id)
+ client.users.authentication_methods.update(id="id", authentication_method_id="authentication_method_id")
+ verify_request_count(test_id, "PATCH", "/users/id/authentication-methods/authentication_method_id", None, 1)
diff --git a/tests/wire/test_users_authenticators.py b/tests/wire/test_users_authenticators.py
new file mode 100644
index 00000000..1e8925d1
--- /dev/null
+++ b/tests/wire/test_users_authenticators.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_authenticators_delete_all() -> None:
+ """Test deleteAll endpoint with WireMock"""
+ test_id = "users.authenticators.delete_all.0"
+ client = get_client(test_id)
+ client.users.authenticators.delete_all(id="id")
+ verify_request_count(test_id, "DELETE", "/users/id/authenticators", None, 1)
diff --git a/tests/wire/test_users_connectedAccounts.py b/tests/wire/test_users_connectedAccounts.py
new file mode 100644
index 00000000..83b18a0c
--- /dev/null
+++ b/tests/wire/test_users_connectedAccounts.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_connectedAccounts_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.connected_accounts.list_.0"
+ client = get_client(test_id)
+ client.users.connected_accounts.list(id="id", from_="from", take=1)
+ verify_request_count(test_id, "GET", "/users/id/connected-accounts", {"from": "from", "take": "1"}, 1)
diff --git a/tests/wire/test_users_enrollments.py b/tests/wire/test_users_enrollments.py
new file mode 100644
index 00000000..5a0b6cb1
--- /dev/null
+++ b/tests/wire/test_users_enrollments.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_enrollments_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "users.enrollments.get.0"
+ client = get_client(test_id)
+ client.users.enrollments.get(id="id")
+ verify_request_count(test_id, "GET", "/users/id/enrollments", None, 1)
diff --git a/tests/wire/test_users_federatedConnectionsTokensets.py b/tests/wire/test_users_federatedConnectionsTokensets.py
new file mode 100644
index 00000000..ca5a013e
--- /dev/null
+++ b/tests/wire/test_users_federatedConnectionsTokensets.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_federatedConnectionsTokensets_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.federated_connections_tokensets.list_.0"
+ client = get_client(test_id)
+ client.users.federated_connections_tokensets.list(id="id")
+ verify_request_count(test_id, "GET", "/users/id/federated-connections-tokensets", None, 1)
+
+
+def test_users_federatedConnectionsTokensets_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "users.federated_connections_tokensets.delete.0"
+ client = get_client(test_id)
+ client.users.federated_connections_tokensets.delete(id="id", tokenset_id="tokenset_id")
+ verify_request_count(test_id, "DELETE", "/users/id/federated-connections-tokensets/tokenset_id", None, 1)
diff --git a/tests/wire/test_users_identities.py b/tests/wire/test_users_identities.py
new file mode 100644
index 00000000..8e28f266
--- /dev/null
+++ b/tests/wire/test_users_identities.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_identities_link() -> None:
+ """Test link endpoint with WireMock"""
+ test_id = "users.identities.link.0"
+ client = get_client(test_id)
+ client.users.identities.link(id="id")
+ verify_request_count(test_id, "POST", "/users/id/identities", None, 1)
+
+
+def test_users_identities_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "users.identities.delete.0"
+ client = get_client(test_id)
+ client.users.identities.delete(id="id", provider="ad", user_id="user_id")
+ verify_request_count(test_id, "DELETE", "/users/id/identities/ad/user_id", None, 1)
diff --git a/tests/wire/test_users_logs.py b/tests/wire/test_users_logs.py
new file mode 100644
index 00000000..1e0d4cc3
--- /dev/null
+++ b/tests/wire/test_users_logs.py
@@ -0,0 +1,11 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_logs_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.logs.list_.0"
+ client = get_client(test_id)
+ client.users.logs.list(id="id", page=1, per_page=1, sort="sort", include_totals=True)
+ verify_request_count(
+ test_id, "GET", "/users/id/logs", {"page": "1", "per_page": "1", "sort": "sort", "include_totals": "true"}, 1
+ )
diff --git a/tests/wire/test_users_multifactor.py b/tests/wire/test_users_multifactor.py
new file mode 100644
index 00000000..dec34425
--- /dev/null
+++ b/tests/wire/test_users_multifactor.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_multifactor_invalidate_remember_browser() -> None:
+ """Test invalidateRememberBrowser endpoint with WireMock"""
+ test_id = "users.multifactor.invalidate_remember_browser.0"
+ client = get_client(test_id)
+ client.users.multifactor.invalidate_remember_browser(id="id")
+ verify_request_count(test_id, "POST", "/users/id/multifactor/actions/invalidate-remember-browser", None, 1)
+
+
+def test_users_multifactor_delete_provider() -> None:
+ """Test deleteProvider endpoint with WireMock"""
+ test_id = "users.multifactor.delete_provider.0"
+ client = get_client(test_id)
+ client.users.multifactor.delete_provider(id="id", provider="duo")
+ verify_request_count(test_id, "DELETE", "/users/id/multifactor/duo", None, 1)
diff --git a/tests/wire/test_users_organizations.py b/tests/wire/test_users_organizations.py
new file mode 100644
index 00000000..b9f64999
--- /dev/null
+++ b/tests/wire/test_users_organizations.py
@@ -0,0 +1,11 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_organizations_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.organizations.list_.0"
+ client = get_client(test_id)
+ client.users.organizations.list(id="id", page=1, per_page=1, include_totals=True)
+ verify_request_count(
+ test_id, "GET", "/users/id/organizations", {"page": "1", "per_page": "1", "include_totals": "true"}, 1
+ )
diff --git a/tests/wire/test_users_permissions.py b/tests/wire/test_users_permissions.py
new file mode 100644
index 00000000..d1608ff7
--- /dev/null
+++ b/tests/wire/test_users_permissions.py
@@ -0,0 +1,37 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_permissions_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.permissions.list_.0"
+ client = get_client(test_id)
+ client.users.permissions.list(id="id", per_page=1, page=1, include_totals=True)
+ verify_request_count(
+ test_id, "GET", "/users/id/permissions", {"per_page": "1", "page": "1", "include_totals": "true"}, 1
+ )
+
+
+def test_users_permissions_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "users.permissions.create.0"
+ client = get_client(test_id)
+ client.users.permissions.create(
+ id="id",
+ permissions=[
+ {"resource_server_identifier": "resource_server_identifier", "permission_name": "permission_name"}
+ ],
+ )
+ verify_request_count(test_id, "POST", "/users/id/permissions", None, 1)
+
+
+def test_users_permissions_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "users.permissions.delete.0"
+ client = get_client(test_id)
+ client.users.permissions.delete(
+ id="id",
+ permissions=[
+ {"resource_server_identifier": "resource_server_identifier", "permission_name": "permission_name"}
+ ],
+ )
+ verify_request_count(test_id, "DELETE", "/users/id/permissions", None, 1)
diff --git a/tests/wire/test_users_refreshToken.py b/tests/wire/test_users_refreshToken.py
new file mode 100644
index 00000000..2eafa8ae
--- /dev/null
+++ b/tests/wire/test_users_refreshToken.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_refreshToken_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.refresh_token.list_.0"
+ client = get_client(test_id)
+ client.users.refresh_token.list(user_id="user_id", from_="from", take=1)
+ verify_request_count(test_id, "GET", "/users/user_id/refresh-tokens", {"from": "from", "take": "1"}, 1)
+
+
+def test_users_refreshToken_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "users.refresh_token.delete.0"
+ client = get_client(test_id)
+ client.users.refresh_token.delete(user_id="user_id")
+ verify_request_count(test_id, "DELETE", "/users/user_id/refresh-tokens", None, 1)
diff --git a/tests/wire/test_users_riskAssessments.py b/tests/wire/test_users_riskAssessments.py
new file mode 100644
index 00000000..477e9e43
--- /dev/null
+++ b/tests/wire/test_users_riskAssessments.py
@@ -0,0 +1,9 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_riskAssessments_clear() -> None:
+ """Test clear endpoint with WireMock"""
+ test_id = "users.risk_assessments.clear.0"
+ client = get_client(test_id)
+ client.users.risk_assessments.clear(id="id", connection="connection", assessors=["new-device"])
+ verify_request_count(test_id, "POST", "/users/id/risk-assessments/clear", None, 1)
diff --git a/tests/wire/test_users_roles.py b/tests/wire/test_users_roles.py
new file mode 100644
index 00000000..8204e68c
--- /dev/null
+++ b/tests/wire/test_users_roles.py
@@ -0,0 +1,25 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_roles_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.roles.list_.0"
+ client = get_client(test_id)
+ client.users.roles.list(id="id", per_page=1, page=1, include_totals=True)
+ verify_request_count(test_id, "GET", "/users/id/roles", {"per_page": "1", "page": "1", "include_totals": "true"}, 1)
+
+
+def test_users_roles_assign() -> None:
+ """Test assign endpoint with WireMock"""
+ test_id = "users.roles.assign.0"
+ client = get_client(test_id)
+ client.users.roles.assign(id="id", roles=["roles"])
+ verify_request_count(test_id, "POST", "/users/id/roles", None, 1)
+
+
+def test_users_roles_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "users.roles.delete.0"
+ client = get_client(test_id)
+ client.users.roles.delete(id="id", roles=["roles"])
+ verify_request_count(test_id, "DELETE", "/users/id/roles", None, 1)
diff --git a/tests/wire/test_users_sessions.py b/tests/wire/test_users_sessions.py
new file mode 100644
index 00000000..091ba235
--- /dev/null
+++ b/tests/wire/test_users_sessions.py
@@ -0,0 +1,17 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_users_sessions_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "users.sessions.list_.0"
+ client = get_client(test_id)
+ client.users.sessions.list(user_id="user_id", from_="from", take=1)
+ verify_request_count(test_id, "GET", "/users/user_id/sessions", {"from": "from", "take": "1"}, 1)
+
+
+def test_users_sessions_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "users.sessions.delete.0"
+ client = get_client(test_id)
+ client.users.sessions.delete(user_id="user_id")
+ verify_request_count(test_id, "DELETE", "/users/user_id/sessions", None, 1)
diff --git a/tests/wire/test_verifiableCredentials_verification_templates.py b/tests/wire/test_verifiableCredentials_verification_templates.py
new file mode 100644
index 00000000..3e2c71f5
--- /dev/null
+++ b/tests/wire/test_verifiableCredentials_verification_templates.py
@@ -0,0 +1,49 @@
+from .conftest import get_client, verify_request_count
+
+
+def test_verifiableCredentials_verification_templates_list_() -> None:
+ """Test list endpoint with WireMock"""
+ test_id = "verifiable_credentials.verification.templates.list_.0"
+ client = get_client(test_id)
+ client.verifiable_credentials.verification.templates.list(from_="from", take=1)
+ verify_request_count(
+ test_id, "GET", "/verifiable-credentials/verification/templates", {"from": "from", "take": "1"}, 1
+ )
+
+
+def test_verifiableCredentials_verification_templates_create() -> None:
+ """Test create endpoint with WireMock"""
+ test_id = "verifiable_credentials.verification.templates.create.0"
+ client = get_client(test_id)
+ client.verifiable_credentials.verification.templates.create(
+ name="name",
+ type="type",
+ dialect="dialect",
+ presentation={"org_iso_18013_5_1_m_dl": {"org_iso_18013_5_1": {}}},
+ well_known_trusted_issuers="well_known_trusted_issuers",
+ )
+ verify_request_count(test_id, "POST", "/verifiable-credentials/verification/templates", None, 1)
+
+
+def test_verifiableCredentials_verification_templates_get() -> None:
+ """Test get endpoint with WireMock"""
+ test_id = "verifiable_credentials.verification.templates.get.0"
+ client = get_client(test_id)
+ client.verifiable_credentials.verification.templates.get(id="id")
+ verify_request_count(test_id, "GET", "/verifiable-credentials/verification/templates/id", None, 1)
+
+
+def test_verifiableCredentials_verification_templates_delete() -> None:
+ """Test delete endpoint with WireMock"""
+ test_id = "verifiable_credentials.verification.templates.delete.0"
+ client = get_client(test_id)
+ client.verifiable_credentials.verification.templates.delete(id="id")
+ verify_request_count(test_id, "DELETE", "/verifiable-credentials/verification/templates/id", None, 1)
+
+
+def test_verifiableCredentials_verification_templates_update() -> None:
+ """Test update endpoint with WireMock"""
+ test_id = "verifiable_credentials.verification.templates.update.0"
+ client = get_client(test_id)
+ client.verifiable_credentials.verification.templates.update(id="id")
+ verify_request_count(test_id, "PATCH", "/verifiable-credentials/verification/templates/id", None, 1)
diff --git a/v5_MIGRATION_GUIDE.md b/v5_MIGRATION_GUIDE.md
new file mode 100644
index 00000000..3bc7cb2a
--- /dev/null
+++ b/v5_MIGRATION_GUIDE.md
@@ -0,0 +1,243 @@
+# v5 Migration Guide
+
+A guide to migrating the Auth0 Python SDK from v4 to v5.
+
+- [Overall changes](#overall-changes)
+ - [Python versions](#python-versions)
+ - [Authentication API](#authentication-api)
+ - [Management API](#management-api)
+- [Specific changes to the Management API](#specific-changes-to-the-management-api)
+ - [Client initialization](#client-initialization)
+ - [Return types: Pydantic models](#return-types-pydantic-models)
+ - [Pagination](#pagination)
+
+## Overall changes
+
+### Python versions
+
+v5 supports Python 3.8 and above.
+
+### Authentication API
+
+This major version change does not affect the Authentication API. Any code written for the Authentication API in v4 should work in v5.
+
+### Management API
+
+v5 introduces significant improvements to the Management API by migrating to [Fern](https://github.com/fern-api/fern) as our code generation tool. This brings several benefits:
+
+- **Type safety**: All responses are now Pydantic models with full type hints.
+- **IDE support**: Autocomplete and inline documentation for all API methods and response fields.
+- **Automatic token management**: Built-in support for client credentials with automatic token caching and refresh.
+- **Improved pagination**: New `SyncPager` and `AsyncPager` classes for easy iteration across paginated results.
+- **Better resource organization**: Sub-resources are organized into sub-clients for a more intuitive API structure.
+
+## Specific changes to the Management API
+
+### Client initialization
+
+v5 introduces a `ManagementClient` class with support for both token-based and client credentials authentication.
+
+#### Token-based authentication
+
+```python
+# v4
+from auth0.management import Auth0
+
+domain = 'your-tenant.auth0.com'
+token = 'MGMT_API_TOKEN'
+auth0 = Auth0(domain, token)
+
+# Access users
+user = auth0.users.get('user_id')
+```
+
+```python
+# v5
+from auth0.management import ManagementClient
+
+client = ManagementClient(
+ domain="your-tenant.auth0.com",
+ token="MGMT_API_TOKEN",
+)
+
+# Access users
+user = client.users.get("user_id")
+```
+
+#### Client credentials authentication (new in v5)
+
+v5 supports automatic token management when using client credentials. The token is automatically fetched, cached, and refreshed before expiration:
+
+```python
+# v5 with client credentials
+from auth0.management import ManagementClient
+
+client = ManagementClient(
+ domain="your-tenant.auth0.com",
+ client_id="YOUR_CLIENT_ID",
+ client_secret="YOUR_CLIENT_SECRET",
+)
+
+# Token is automatically fetched and cached
+# No need to manually obtain or refresh tokens
+user = client.users.get("user_id")
+```
+
+#### Configuration options
+
+```python
+# v4
+from auth0.management import Auth0
+from auth0.rest import RestClientOptions
+
+options = RestClientOptions(
+ telemetry=True,
+ timeout=5.0,
+ retries=3
+)
+auth0 = Auth0(domain, token, rest_options=options)
+```
+
+```python
+# v5
+from auth0.management import ManagementClient
+
+client = ManagementClient(
+ domain="your-tenant.auth0.com",
+ token="MGMT_API_TOKEN",
+ timeout=60.0, # Timeout in seconds
+ headers={"X-Custom-Header": "value"}, # Custom headers
+)
+```
+
+### Return types: Pydantic models
+
+The most significant change is that all API responses are now **Pydantic models** instead of raw dictionaries. This provides type safety, IDE autocomplete, and validation.
+
+#### Accessing response data
+
+```python
+# v4: Dictionary access
+user = auth0.users.get('user_id')
+print(user['email']) # Dict key access
+print(user.get('nickname')) # Safe access with .get()
+
+# Check if key exists
+if 'app_metadata' in user:
+ print(user['app_metadata'])
+```
+
+```python
+# v5: Attribute access
+user = client.users.get("user_id")
+print(user.email) # Attribute access
+print(user.nickname) # Direct attribute access (None if not present)
+
+# Access nested data
+if user.app_metadata:
+ print(user.app_metadata)
+```
+
+#### Converting to dictionaries
+
+If you need dictionary access for compatibility with existing code, use `model_dump()`:
+
+```python
+# v5: Convert to dict
+user = client.users.get("user_id")
+user_dict = user.model_dump() # Returns a dictionary
+
+# Now you can use dict-style access
+print(user_dict['email'])
+```
+
+#### Benefits of Pydantic models
+
+1. **IDE autocomplete**: Type `user.` and see all available fields
+2. **Type checking**: Catch errors at development time with mypy or pyright
+3. **Validation**: Data is validated against the schema
+4. **Immutability**: Response objects are frozen by default
+
+### Pagination
+
+v5 introduces `SyncPager` (and `AsyncPager` for async) to simplify working with paginated endpoints.
+
+#### v4 pagination pattern
+
+```python
+# v4: Manual pagination
+all_users = []
+page = 0
+
+while True:
+ result = auth0.users.list(page=page, per_page=50, include_totals=True)
+ all_users.extend(result['users'])
+
+ if len(all_users) >= result['total']:
+ break
+ page += 1
+
+# Process all users
+for user in all_users:
+ print(user['email'])
+```
+
+#### v5 pagination patterns
+
+**Automatic iteration** - The simplest approach, iterates across all pages automatically:
+
+```python
+# v5: Automatic iteration across all pages
+for user in client.users.list():
+ print(user.email)
+```
+
+**Page-by-page iteration** - When you need to process pages individually:
+
+```python
+# v5: Page-by-page iteration
+for page in client.users.list().iter_pages():
+ print(f"Processing {len(page.items)} users")
+ for user in page.items:
+ print(user.email)
+```
+
+**Manual pagination** - For explicit control over pagination:
+
+```python
+# v5: Manual pagination with explicit parameters
+pager = client.users.list(page=0, per_page=50)
+
+# Access current page items
+for user in pager.items:
+ print(user.email)
+
+# Check if there are more pages
+if pager.has_next:
+ next_pager = pager.next_page()
+ for user in next_pager.items:
+ print(user.email)
+```
+
+#### Async pagination
+
+For async code, use `AsyncManagementClient` with async iteration:
+
+```python
+# v5: Async pagination
+from auth0.management import AsyncManagementClient
+
+client = AsyncManagementClient(
+ domain="your-tenant.auth0.com",
+ token="MGMT_API_TOKEN",
+)
+
+# Async iteration
+async for user in client.users.list():
+ print(user.email)
+
+# Async page-by-page
+async for page in client.users.list().iter_pages():
+ for user in page.items:
+ print(user.email)
+```
diff --git a/wiremock/docker-compose.test.yml b/wiremock/docker-compose.test.yml
new file mode 100644
index 00000000..f80c6b0a
--- /dev/null
+++ b/wiremock/docker-compose.test.yml
@@ -0,0 +1,14 @@
+services:
+ wiremock:
+ image: wiremock/wiremock:3.9.1
+ ports:
+ - "8080:8080"
+ volumes:
+ - ./wiremock-mappings.json:/home/wiremock/mappings/wiremock-mappings.json
+ command: ["--global-response-templating", "--verbose"]
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8080/__admin/health"]
+ interval: 2s
+ timeout: 5s
+ retries: 15
+ start_period: 5s
diff --git a/wiremock/wiremock-mappings.json b/wiremock/wiremock-mappings.json
new file mode 100644
index 00000000..95cc1846
--- /dev/null
+++ b/wiremock/wiremock-mappings.json
@@ -0,0 +1 @@
+{"mappings":[{"id":"33519415-78d5-4e20-b7ed-c0f6609b6e90","name":"Get actions - default","request":{"urlPathTemplate":"/actions/actions","method":"GET"},"response":{"status":200,"body":"{\n \"total\": 1.1,\n \"page\": 1.1,\n \"per_page\": 1.1,\n \"actions\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"code\": \"code\",\n \"dependencies\": [\n {}\n ],\n \"runtime\": \"runtime\",\n \"secrets\": [\n {}\n ],\n \"installed_integration_id\": \"installed_integration_id\",\n \"status\": \"pending\",\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"deploy\": true\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"33519415-78d5-4e20-b7ed-c0f6609b6e90","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"0af03b66-13d2-4fbe-a736-0f9dae1a89da","name":"Create an action - default","request":{"urlPathTemplate":"/actions/actions","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\",\n \"status\": \"status\",\n \"runtimes\": [\n \"runtimes\"\n ],\n \"default_runtime\": \"default_runtime\",\n \"compatible_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\"\n }\n ],\n \"binding_policy\": \"trigger-bound\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"code\": \"code\",\n \"dependencies\": [\n {\n \"name\": \"name\",\n \"version\": \"version\",\n \"registry_url\": \"registry_url\"\n }\n ],\n \"runtime\": \"runtime\",\n \"secrets\": [\n {\n \"name\": \"name\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"deployed_version\": {\n \"id\": \"id\",\n \"action_id\": \"action_id\",\n \"code\": \"code\",\n \"dependencies\": [\n {}\n ],\n \"deployed\": true,\n \"runtime\": \"runtime\",\n \"secrets\": [\n {}\n ],\n \"status\": \"pending\",\n \"number\": 1.1,\n \"errors\": [\n {}\n ],\n \"action\": {\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n },\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"installed_integration_id\": \"installed_integration_id\",\n \"integration\": {\n \"id\": \"id\",\n \"catalog_id\": \"catalog_id\",\n \"url_slug\": \"url_slug\",\n \"partner_id\": \"partner_id\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"short_description\": \"short_description\",\n \"logo\": \"logo\",\n \"feature_type\": \"unspecified\",\n \"terms_of_use_url\": \"terms_of_use_url\",\n \"privacy_policy_url\": \"privacy_policy_url\",\n \"public_support_link\": \"public_support_link\",\n \"current_release\": {\n \"id\": \"id\",\n \"trigger\": {\n \"id\": \"id\"\n },\n \"required_secrets\": [\n {}\n ],\n \"required_configuration\": [\n {}\n ]\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n },\n \"status\": \"pending\",\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"deploy\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"0af03b66-13d2-4fbe-a736-0f9dae1a89da","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"9919a572-ff14-4914-88b8-acd7f6acc41d","name":"Get an action - default","request":{"urlPathTemplate":"/actions/actions/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\",\n \"status\": \"status\",\n \"runtimes\": [\n \"runtimes\"\n ],\n \"default_runtime\": \"default_runtime\",\n \"compatible_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\"\n }\n ],\n \"binding_policy\": \"trigger-bound\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"code\": \"code\",\n \"dependencies\": [\n {\n \"name\": \"name\",\n \"version\": \"version\",\n \"registry_url\": \"registry_url\"\n }\n ],\n \"runtime\": \"runtime\",\n \"secrets\": [\n {\n \"name\": \"name\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"deployed_version\": {\n \"id\": \"id\",\n \"action_id\": \"action_id\",\n \"code\": \"code\",\n \"dependencies\": [\n {}\n ],\n \"deployed\": true,\n \"runtime\": \"runtime\",\n \"secrets\": [\n {}\n ],\n \"status\": \"pending\",\n \"number\": 1.1,\n \"errors\": [\n {}\n ],\n \"action\": {\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n },\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"installed_integration_id\": \"installed_integration_id\",\n \"integration\": {\n \"id\": \"id\",\n \"catalog_id\": \"catalog_id\",\n \"url_slug\": \"url_slug\",\n \"partner_id\": \"partner_id\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"short_description\": \"short_description\",\n \"logo\": \"logo\",\n \"feature_type\": \"unspecified\",\n \"terms_of_use_url\": \"terms_of_use_url\",\n \"privacy_policy_url\": \"privacy_policy_url\",\n \"public_support_link\": \"public_support_link\",\n \"current_release\": {\n \"id\": \"id\",\n \"trigger\": {\n \"id\": \"id\"\n },\n \"required_secrets\": [\n {}\n ],\n \"required_configuration\": [\n {}\n ]\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n },\n \"status\": \"pending\",\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"deploy\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"9919a572-ff14-4914-88b8-acd7f6acc41d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1bb73e26-2243-414b-80fc-fcf53169d4fe","name":"Delete an action - default","request":{"urlPathTemplate":"/actions/actions/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"1bb73e26-2243-414b-80fc-fcf53169d4fe","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2679764d-6f00-495e-b8fb-210d140167ba","name":"Update an action - default","request":{"urlPathTemplate":"/actions/actions/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\",\n \"status\": \"status\",\n \"runtimes\": [\n \"runtimes\"\n ],\n \"default_runtime\": \"default_runtime\",\n \"compatible_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\"\n }\n ],\n \"binding_policy\": \"trigger-bound\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"code\": \"code\",\n \"dependencies\": [\n {\n \"name\": \"name\",\n \"version\": \"version\",\n \"registry_url\": \"registry_url\"\n }\n ],\n \"runtime\": \"runtime\",\n \"secrets\": [\n {\n \"name\": \"name\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"deployed_version\": {\n \"id\": \"id\",\n \"action_id\": \"action_id\",\n \"code\": \"code\",\n \"dependencies\": [\n {}\n ],\n \"deployed\": true,\n \"runtime\": \"runtime\",\n \"secrets\": [\n {}\n ],\n \"status\": \"pending\",\n \"number\": 1.1,\n \"errors\": [\n {}\n ],\n \"action\": {\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n },\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"installed_integration_id\": \"installed_integration_id\",\n \"integration\": {\n \"id\": \"id\",\n \"catalog_id\": \"catalog_id\",\n \"url_slug\": \"url_slug\",\n \"partner_id\": \"partner_id\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"short_description\": \"short_description\",\n \"logo\": \"logo\",\n \"feature_type\": \"unspecified\",\n \"terms_of_use_url\": \"terms_of_use_url\",\n \"privacy_policy_url\": \"privacy_policy_url\",\n \"public_support_link\": \"public_support_link\",\n \"current_release\": {\n \"id\": \"id\",\n \"trigger\": {\n \"id\": \"id\"\n },\n \"required_secrets\": [\n {}\n ],\n \"required_configuration\": [\n {}\n ]\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n },\n \"status\": \"pending\",\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"deploy\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"2679764d-6f00-495e-b8fb-210d140167ba","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0bde5116-17ac-4ea2-be52-e584711a6b70","name":"Deploy an action - default","request":{"urlPathTemplate":"/actions/actions/{id}/deploy","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":202,"body":"{\n \"id\": \"id\",\n \"action_id\": \"action_id\",\n \"code\": \"code\",\n \"dependencies\": [\n {\n \"name\": \"name\",\n \"version\": \"version\",\n \"registry_url\": \"registry_url\"\n }\n ],\n \"deployed\": true,\n \"runtime\": \"runtime\",\n \"secrets\": [\n {\n \"name\": \"name\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"status\": \"pending\",\n \"number\": 1.1,\n \"errors\": [\n {\n \"id\": \"id\",\n \"msg\": \"msg\",\n \"url\": \"url\"\n }\n ],\n \"action\": {\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n },\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"supported_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\",\n \"status\": \"status\",\n \"runtimes\": [\n \"runtimes\"\n ],\n \"default_runtime\": \"default_runtime\",\n \"compatible_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\"\n }\n ],\n \"binding_policy\": \"trigger-bound\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"0bde5116-17ac-4ea2-be52-e584711a6b70","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"ebf627bb-6f85-4597-a454-0c654c35202c","name":"Test an Action - default","request":{"urlPathTemplate":"/actions/actions/{id}/test","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"payload\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"ebf627bb-6f85-4597-a454-0c654c35202c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0f76d290-6b70-4f62-abc8-3760917fe787","name":"Get branding settings - default","request":{"urlPathTemplate":"/branding","method":"GET"},"response":{"status":200,"body":"{\n \"colors\": {\n \"primary\": \"primary\",\n \"page_background\": \"page_background\"\n },\n \"favicon_url\": \"favicon_url\",\n \"logo_url\": \"logo_url\",\n \"font\": {\n \"url\": \"url\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"0f76d290-6b70-4f62-abc8-3760917fe787","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"9ca9e729-0745-457c-828d-37f7c8ab1698","name":"Update branding settings - default","request":{"urlPathTemplate":"/branding","method":"PATCH"},"response":{"status":200,"body":"{\n \"colors\": {\n \"primary\": \"primary\",\n \"page_background\": \"page_background\"\n },\n \"favicon_url\": \"favicon_url\",\n \"logo_url\": \"logo_url\",\n \"font\": {\n \"url\": \"url\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"9ca9e729-0745-457c-828d-37f7c8ab1698","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"5dbe0859-fbb5-4eb1-a803-8132e840e762","name":"Get client grants - default","request":{"urlPathTemplate":"/client-grants","method":"GET"},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"client_grants\": [\n {\n \"id\": \"id\",\n \"client_id\": \"client_id\",\n \"audience\": \"audience\",\n \"scope\": [\n \"scope\"\n ],\n \"organization_usage\": \"deny\",\n \"allow_any_organization\": true,\n \"is_system\": true,\n \"subject_type\": \"client\",\n \"authorization_details_types\": [\n \"authorization_details_types\"\n ]\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"5dbe0859-fbb5-4eb1-a803-8132e840e762","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"006f7f26-5002-4b98-a65f-39f8aee8e968","name":"Create client grant - default","request":{"urlPathTemplate":"/client-grants","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"client_id\": \"client_id\",\n \"audience\": \"audience\",\n \"scope\": [\n \"scope\"\n ],\n \"organization_usage\": \"deny\",\n \"allow_any_organization\": true,\n \"is_system\": true,\n \"subject_type\": \"client\",\n \"authorization_details_types\": [\n \"authorization_details_types\"\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"006f7f26-5002-4b98-a65f-39f8aee8e968","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"00010fe3-8553-4cd6-9b9a-68aad031054f","name":"Delete client grant - default","request":{"urlPathTemplate":"/client-grants/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"00010fe3-8553-4cd6-9b9a-68aad031054f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d4a5deb2-fef3-4f0d-84ab-d78760e07405","name":"Update client grant - default","request":{"urlPathTemplate":"/client-grants/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"client_id\": \"client_id\",\n \"audience\": \"audience\",\n \"scope\": [\n \"scope\"\n ],\n \"organization_usage\": \"deny\",\n \"allow_any_organization\": true,\n \"is_system\": true,\n \"subject_type\": \"client\",\n \"authorization_details_types\": [\n \"authorization_details_types\"\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"d4a5deb2-fef3-4f0d-84ab-d78760e07405","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e9057410-f073-4b5b-83dc-dc4d5625ef27","name":"Get clients - default","request":{"urlPathTemplate":"/clients","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"clients\": [\n {\n \"client_id\": \"client_id\",\n \"tenant\": \"tenant\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"global\": true,\n \"client_secret\": \"client_secret\",\n \"app_type\": \"native\",\n \"logo_uri\": \"logo_uri\",\n \"is_first_party\": true,\n \"oidc_conformant\": true,\n \"callbacks\": [\n \"callbacks\"\n ],\n \"allowed_origins\": [\n \"allowed_origins\"\n ],\n \"web_origins\": [\n \"web_origins\"\n ],\n \"client_aliases\": [\n \"client_aliases\"\n ],\n \"allowed_clients\": [\n \"allowed_clients\"\n ],\n \"allowed_logout_urls\": [\n \"allowed_logout_urls\"\n ],\n \"grant_types\": [\n \"grant_types\"\n ],\n \"signing_keys\": [\n {}\n ],\n \"sso\": true,\n \"sso_disabled\": true,\n \"cross_origin_authentication\": true,\n \"cross_origin_loc\": \"cross_origin_loc\",\n \"custom_login_page_on\": true,\n \"custom_login_page\": \"custom_login_page\",\n \"custom_login_page_preview\": \"custom_login_page_preview\",\n \"form_template\": \"form_template\",\n \"token_endpoint_auth_method\": \"none\",\n \"is_token_endpoint_ip_header_trusted\": true,\n \"client_metadata\": {\n \"key\": \"value\"\n },\n \"initiate_login_uri\": \"initiate_login_uri\",\n \"refresh_token\": {\n \"rotation_type\": \"rotating\",\n \"expiration_type\": \"expiring\"\n },\n \"default_organization\": {\n \"organization_id\": \"organization_id\",\n \"flows\": [\n \"client_credentials\"\n ]\n },\n \"organization_usage\": \"deny\",\n \"organization_require_behavior\": \"no_prompt\",\n \"organization_discovery_methods\": [\n \"email\"\n ],\n \"require_pushed_authorization_requests\": true,\n \"require_proof_of_possession\": true,\n \"compliance_level\": \"none\",\n \"skip_non_verifiable_callback_uri_confirmation_prompt\": true,\n \"par_request_expiry\": 1,\n \"token_quota\": {\n \"client_credentials\": {}\n },\n \"express_configuration\": {\n \"initiate_login_uri_template\": \"initiate_login_uri_template\",\n \"user_attribute_profile_id\": \"user_attribute_profile_id\",\n \"connection_profile_id\": \"connection_profile_id\",\n \"enable_client\": true,\n \"enable_organization\": true,\n \"okta_oin_client_id\": \"okta_oin_client_id\",\n \"admin_login_domain\": \"admin_login_domain\"\n },\n \"resource_server_identifier\": \"resource_server_identifier\",\n \"async_approval_notification_channels\": [\n \"guardian-push\"\n ]\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"e9057410-f073-4b5b-83dc-dc4d5625ef27","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"f689c30d-6d4c-42b6-8ab3-1dd1ca9672d6","name":"Create a client - default","request":{"urlPathTemplate":"/clients","method":"POST"},"response":{"status":201,"body":"{\n \"client_id\": \"client_id\",\n \"tenant\": \"tenant\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"global\": true,\n \"client_secret\": \"client_secret\",\n \"app_type\": \"native\",\n \"logo_uri\": \"logo_uri\",\n \"is_first_party\": true,\n \"oidc_conformant\": true,\n \"callbacks\": [\n \"callbacks\"\n ],\n \"allowed_origins\": [\n \"allowed_origins\"\n ],\n \"web_origins\": [\n \"web_origins\"\n ],\n \"client_aliases\": [\n \"client_aliases\"\n ],\n \"allowed_clients\": [\n \"allowed_clients\"\n ],\n \"allowed_logout_urls\": [\n \"allowed_logout_urls\"\n ],\n \"session_transfer\": {\n \"can_create_session_transfer_token\": true,\n \"enforce_cascade_revocation\": true,\n \"allowed_authentication_methods\": [\n \"cookie\"\n ],\n \"enforce_device_binding\": \"ip\",\n \"allow_refresh_token\": true,\n \"enforce_online_refresh_tokens\": true\n },\n \"oidc_logout\": {\n \"backchannel_logout_urls\": [\n \"backchannel_logout_urls\"\n ],\n \"backchannel_logout_initiators\": {\n \"mode\": \"custom\",\n \"selected_initiators\": [\n \"rp-logout\"\n ]\n },\n \"backchannel_logout_session_metadata\": {\n \"include\": true\n }\n },\n \"grant_types\": [\n \"grant_types\"\n ],\n \"jwt_configuration\": {\n \"lifetime_in_seconds\": 1,\n \"secret_encoded\": true,\n \"scopes\": {\n \"key\": \"value\"\n },\n \"alg\": \"HS256\"\n },\n \"signing_keys\": [\n {\n \"pkcs7\": \"pkcs7\",\n \"cert\": \"cert\",\n \"subject\": \"subject\"\n }\n ],\n \"encryption_key\": {\n \"pub\": \"pub\",\n \"cert\": \"cert\",\n \"subject\": \"subject\"\n },\n \"sso\": true,\n \"sso_disabled\": true,\n \"cross_origin_authentication\": true,\n \"cross_origin_loc\": \"cross_origin_loc\",\n \"custom_login_page_on\": true,\n \"custom_login_page\": \"custom_login_page\",\n \"custom_login_page_preview\": \"custom_login_page_preview\",\n \"form_template\": \"form_template\",\n \"addons\": {\n \"aws\": {\n \"principal\": \"principal\",\n \"role\": \"role\",\n \"lifetime_in_seconds\": 1\n },\n \"azure_blob\": {\n \"accountName\": \"accountName\",\n \"storageAccessKey\": \"storageAccessKey\",\n \"containerName\": \"containerName\",\n \"blobName\": \"blobName\",\n \"expiration\": 1,\n \"signedIdentifier\": \"signedIdentifier\",\n \"blob_read\": true,\n \"blob_write\": true,\n \"blob_delete\": true,\n \"container_read\": true,\n \"container_write\": true,\n \"container_delete\": true,\n \"container_list\": true\n },\n \"azure_sb\": {\n \"namespace\": \"namespace\",\n \"sasKeyName\": \"sasKeyName\",\n \"sasKey\": \"sasKey\",\n \"entityPath\": \"entityPath\",\n \"expiration\": 1\n },\n \"rms\": {\n \"url\": \"url\"\n },\n \"mscrm\": {\n \"url\": \"url\"\n },\n \"slack\": {\n \"team\": \"team\"\n },\n \"sentry\": {\n \"org_slug\": \"org_slug\",\n \"base_url\": \"base_url\"\n },\n \"box\": {\n \"key\": \"value\"\n },\n \"cloudbees\": {\n \"key\": \"value\"\n },\n \"concur\": {\n \"key\": \"value\"\n },\n \"dropbox\": {\n \"key\": \"value\"\n },\n \"echosign\": {\n \"domain\": \"domain\"\n },\n \"egnyte\": {\n \"domain\": \"domain\"\n },\n \"firebase\": {\n \"secret\": \"secret\",\n \"private_key_id\": \"private_key_id\",\n \"private_key\": \"private_key\",\n \"client_email\": \"client_email\",\n \"lifetime_in_seconds\": 1\n },\n \"newrelic\": {\n \"account\": \"account\"\n },\n \"office365\": {\n \"domain\": \"domain\",\n \"connection\": \"connection\"\n },\n \"salesforce\": {\n \"entity_id\": \"entity_id\"\n },\n \"salesforce_api\": {\n \"clientid\": \"clientid\",\n \"principal\": \"principal\",\n \"communityName\": \"communityName\",\n \"community_url_section\": \"community_url_section\"\n },\n \"salesforce_sandbox_api\": {\n \"clientid\": \"clientid\",\n \"principal\": \"principal\",\n \"communityName\": \"communityName\",\n \"community_url_section\": \"community_url_section\"\n },\n \"samlp\": {\n \"mappings\": {\n \"key\": \"value\"\n },\n \"audience\": \"audience\",\n \"recipient\": \"recipient\",\n \"createUpnClaim\": true,\n \"mapUnknownClaimsAsIs\": true,\n \"passthroughClaimsWithNoMapping\": true,\n \"mapIdentities\": true,\n \"signatureAlgorithm\": \"signatureAlgorithm\",\n \"digestAlgorithm\": \"digestAlgorithm\",\n \"issuer\": \"issuer\",\n \"destination\": \"destination\",\n \"lifetimeInSeconds\": 1,\n \"signResponse\": true,\n \"nameIdentifierFormat\": \"nameIdentifierFormat\",\n \"nameIdentifierProbes\": [\n \"nameIdentifierProbes\"\n ],\n \"authnContextClassRef\": \"authnContextClassRef\"\n },\n \"layer\": {\n \"providerId\": \"providerId\",\n \"keyId\": \"keyId\",\n \"privateKey\": \"privateKey\",\n \"principal\": \"principal\",\n \"expiration\": 1\n },\n \"sap_api\": {\n \"clientid\": \"clientid\",\n \"usernameAttribute\": \"usernameAttribute\",\n \"tokenEndpointUrl\": \"tokenEndpointUrl\",\n \"scope\": \"scope\",\n \"servicePassword\": \"servicePassword\",\n \"nameIdentifierFormat\": \"nameIdentifierFormat\"\n },\n \"sharepoint\": {\n \"url\": \"url\",\n \"external_url\": [\n \"external_url\"\n ]\n },\n \"springcm\": {\n \"acsurl\": \"acsurl\"\n },\n \"wams\": {\n \"masterkey\": \"masterkey\"\n },\n \"wsfed\": {\n \"key\": \"value\"\n },\n \"zendesk\": {\n \"accountName\": \"accountName\"\n },\n \"zoom\": {\n \"account\": \"account\"\n },\n \"sso_integration\": {\n \"name\": \"name\",\n \"version\": \"version\"\n }\n },\n \"token_endpoint_auth_method\": \"none\",\n \"is_token_endpoint_ip_header_trusted\": true,\n \"client_metadata\": {\n \"key\": \"value\"\n },\n \"mobile\": {\n \"android\": {\n \"app_package_name\": \"app_package_name\",\n \"sha256_cert_fingerprints\": [\n \"sha256_cert_fingerprints\"\n ]\n },\n \"ios\": {\n \"team_id\": \"team_id\",\n \"app_bundle_identifier\": \"app_bundle_identifier\"\n }\n },\n \"initiate_login_uri\": \"initiate_login_uri\",\n \"refresh_token\": {\n \"rotation_type\": \"rotating\",\n \"expiration_type\": \"expiring\",\n \"leeway\": 1,\n \"token_lifetime\": 1,\n \"infinite_token_lifetime\": true,\n \"idle_token_lifetime\": 1,\n \"infinite_idle_token_lifetime\": true\n },\n \"default_organization\": {\n \"organization_id\": \"organization_id\",\n \"flows\": [\n \"client_credentials\"\n ]\n },\n \"organization_usage\": \"deny\",\n \"organization_require_behavior\": \"no_prompt\",\n \"organization_discovery_methods\": [\n \"email\"\n ],\n \"client_authentication_methods\": {\n \"private_key_jwt\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"tls_client_auth\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"self_signed_tls_client_auth\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n }\n },\n \"require_pushed_authorization_requests\": true,\n \"require_proof_of_possession\": true,\n \"signed_request_object\": {\n \"required\": true,\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"compliance_level\": \"none\",\n \"skip_non_verifiable_callback_uri_confirmation_prompt\": true,\n \"token_exchange\": {\n \"allow_any_profile_of_type\": [\n \"custom_authentication\"\n ]\n },\n \"par_request_expiry\": 1,\n \"token_quota\": {\n \"client_credentials\": {\n \"enforce\": true,\n \"per_day\": 1,\n \"per_hour\": 1\n }\n },\n \"express_configuration\": {\n \"initiate_login_uri_template\": \"initiate_login_uri_template\",\n \"user_attribute_profile_id\": \"user_attribute_profile_id\",\n \"connection_profile_id\": \"connection_profile_id\",\n \"enable_client\": true,\n \"enable_organization\": true,\n \"linked_clients\": [\n {\n \"client_id\": \"client_id\"\n }\n ],\n \"okta_oin_client_id\": \"okta_oin_client_id\",\n \"admin_login_domain\": \"admin_login_domain\",\n \"oin_submission_id\": \"oin_submission_id\"\n },\n \"resource_server_identifier\": \"resource_server_identifier\",\n \"async_approval_notification_channels\": [\n \"guardian-push\"\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"f689c30d-6d4c-42b6-8ab3-1dd1ca9672d6","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"12071cdc-1adc-4b32-8601-2cd12aa19c0c","name":"Get client by ID - default","request":{"urlPathTemplate":"/clients/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"client_id\": \"client_id\",\n \"tenant\": \"tenant\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"global\": true,\n \"client_secret\": \"client_secret\",\n \"app_type\": \"native\",\n \"logo_uri\": \"logo_uri\",\n \"is_first_party\": true,\n \"oidc_conformant\": true,\n \"callbacks\": [\n \"callbacks\"\n ],\n \"allowed_origins\": [\n \"allowed_origins\"\n ],\n \"web_origins\": [\n \"web_origins\"\n ],\n \"client_aliases\": [\n \"client_aliases\"\n ],\n \"allowed_clients\": [\n \"allowed_clients\"\n ],\n \"allowed_logout_urls\": [\n \"allowed_logout_urls\"\n ],\n \"session_transfer\": {\n \"can_create_session_transfer_token\": true,\n \"enforce_cascade_revocation\": true,\n \"allowed_authentication_methods\": [\n \"cookie\"\n ],\n \"enforce_device_binding\": \"ip\",\n \"allow_refresh_token\": true,\n \"enforce_online_refresh_tokens\": true\n },\n \"oidc_logout\": {\n \"backchannel_logout_urls\": [\n \"backchannel_logout_urls\"\n ],\n \"backchannel_logout_initiators\": {\n \"mode\": \"custom\",\n \"selected_initiators\": [\n \"rp-logout\"\n ]\n },\n \"backchannel_logout_session_metadata\": {\n \"include\": true\n }\n },\n \"grant_types\": [\n \"grant_types\"\n ],\n \"jwt_configuration\": {\n \"lifetime_in_seconds\": 1,\n \"secret_encoded\": true,\n \"scopes\": {\n \"key\": \"value\"\n },\n \"alg\": \"HS256\"\n },\n \"signing_keys\": [\n {\n \"pkcs7\": \"pkcs7\",\n \"cert\": \"cert\",\n \"subject\": \"subject\"\n }\n ],\n \"encryption_key\": {\n \"pub\": \"pub\",\n \"cert\": \"cert\",\n \"subject\": \"subject\"\n },\n \"sso\": true,\n \"sso_disabled\": true,\n \"cross_origin_authentication\": true,\n \"cross_origin_loc\": \"cross_origin_loc\",\n \"custom_login_page_on\": true,\n \"custom_login_page\": \"custom_login_page\",\n \"custom_login_page_preview\": \"custom_login_page_preview\",\n \"form_template\": \"form_template\",\n \"addons\": {\n \"aws\": {\n \"principal\": \"principal\",\n \"role\": \"role\",\n \"lifetime_in_seconds\": 1\n },\n \"azure_blob\": {\n \"accountName\": \"accountName\",\n \"storageAccessKey\": \"storageAccessKey\",\n \"containerName\": \"containerName\",\n \"blobName\": \"blobName\",\n \"expiration\": 1,\n \"signedIdentifier\": \"signedIdentifier\",\n \"blob_read\": true,\n \"blob_write\": true,\n \"blob_delete\": true,\n \"container_read\": true,\n \"container_write\": true,\n \"container_delete\": true,\n \"container_list\": true\n },\n \"azure_sb\": {\n \"namespace\": \"namespace\",\n \"sasKeyName\": \"sasKeyName\",\n \"sasKey\": \"sasKey\",\n \"entityPath\": \"entityPath\",\n \"expiration\": 1\n },\n \"rms\": {\n \"url\": \"url\"\n },\n \"mscrm\": {\n \"url\": \"url\"\n },\n \"slack\": {\n \"team\": \"team\"\n },\n \"sentry\": {\n \"org_slug\": \"org_slug\",\n \"base_url\": \"base_url\"\n },\n \"box\": {\n \"key\": \"value\"\n },\n \"cloudbees\": {\n \"key\": \"value\"\n },\n \"concur\": {\n \"key\": \"value\"\n },\n \"dropbox\": {\n \"key\": \"value\"\n },\n \"echosign\": {\n \"domain\": \"domain\"\n },\n \"egnyte\": {\n \"domain\": \"domain\"\n },\n \"firebase\": {\n \"secret\": \"secret\",\n \"private_key_id\": \"private_key_id\",\n \"private_key\": \"private_key\",\n \"client_email\": \"client_email\",\n \"lifetime_in_seconds\": 1\n },\n \"newrelic\": {\n \"account\": \"account\"\n },\n \"office365\": {\n \"domain\": \"domain\",\n \"connection\": \"connection\"\n },\n \"salesforce\": {\n \"entity_id\": \"entity_id\"\n },\n \"salesforce_api\": {\n \"clientid\": \"clientid\",\n \"principal\": \"principal\",\n \"communityName\": \"communityName\",\n \"community_url_section\": \"community_url_section\"\n },\n \"salesforce_sandbox_api\": {\n \"clientid\": \"clientid\",\n \"principal\": \"principal\",\n \"communityName\": \"communityName\",\n \"community_url_section\": \"community_url_section\"\n },\n \"samlp\": {\n \"mappings\": {\n \"key\": \"value\"\n },\n \"audience\": \"audience\",\n \"recipient\": \"recipient\",\n \"createUpnClaim\": true,\n \"mapUnknownClaimsAsIs\": true,\n \"passthroughClaimsWithNoMapping\": true,\n \"mapIdentities\": true,\n \"signatureAlgorithm\": \"signatureAlgorithm\",\n \"digestAlgorithm\": \"digestAlgorithm\",\n \"issuer\": \"issuer\",\n \"destination\": \"destination\",\n \"lifetimeInSeconds\": 1,\n \"signResponse\": true,\n \"nameIdentifierFormat\": \"nameIdentifierFormat\",\n \"nameIdentifierProbes\": [\n \"nameIdentifierProbes\"\n ],\n \"authnContextClassRef\": \"authnContextClassRef\"\n },\n \"layer\": {\n \"providerId\": \"providerId\",\n \"keyId\": \"keyId\",\n \"privateKey\": \"privateKey\",\n \"principal\": \"principal\",\n \"expiration\": 1\n },\n \"sap_api\": {\n \"clientid\": \"clientid\",\n \"usernameAttribute\": \"usernameAttribute\",\n \"tokenEndpointUrl\": \"tokenEndpointUrl\",\n \"scope\": \"scope\",\n \"servicePassword\": \"servicePassword\",\n \"nameIdentifierFormat\": \"nameIdentifierFormat\"\n },\n \"sharepoint\": {\n \"url\": \"url\",\n \"external_url\": [\n \"external_url\"\n ]\n },\n \"springcm\": {\n \"acsurl\": \"acsurl\"\n },\n \"wams\": {\n \"masterkey\": \"masterkey\"\n },\n \"wsfed\": {\n \"key\": \"value\"\n },\n \"zendesk\": {\n \"accountName\": \"accountName\"\n },\n \"zoom\": {\n \"account\": \"account\"\n },\n \"sso_integration\": {\n \"name\": \"name\",\n \"version\": \"version\"\n }\n },\n \"token_endpoint_auth_method\": \"none\",\n \"is_token_endpoint_ip_header_trusted\": true,\n \"client_metadata\": {\n \"key\": \"value\"\n },\n \"mobile\": {\n \"android\": {\n \"app_package_name\": \"app_package_name\",\n \"sha256_cert_fingerprints\": [\n \"sha256_cert_fingerprints\"\n ]\n },\n \"ios\": {\n \"team_id\": \"team_id\",\n \"app_bundle_identifier\": \"app_bundle_identifier\"\n }\n },\n \"initiate_login_uri\": \"initiate_login_uri\",\n \"refresh_token\": {\n \"rotation_type\": \"rotating\",\n \"expiration_type\": \"expiring\",\n \"leeway\": 1,\n \"token_lifetime\": 1,\n \"infinite_token_lifetime\": true,\n \"idle_token_lifetime\": 1,\n \"infinite_idle_token_lifetime\": true\n },\n \"default_organization\": {\n \"organization_id\": \"organization_id\",\n \"flows\": [\n \"client_credentials\"\n ]\n },\n \"organization_usage\": \"deny\",\n \"organization_require_behavior\": \"no_prompt\",\n \"organization_discovery_methods\": [\n \"email\"\n ],\n \"client_authentication_methods\": {\n \"private_key_jwt\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"tls_client_auth\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"self_signed_tls_client_auth\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n }\n },\n \"require_pushed_authorization_requests\": true,\n \"require_proof_of_possession\": true,\n \"signed_request_object\": {\n \"required\": true,\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"compliance_level\": \"none\",\n \"skip_non_verifiable_callback_uri_confirmation_prompt\": true,\n \"token_exchange\": {\n \"allow_any_profile_of_type\": [\n \"custom_authentication\"\n ]\n },\n \"par_request_expiry\": 1,\n \"token_quota\": {\n \"client_credentials\": {\n \"enforce\": true,\n \"per_day\": 1,\n \"per_hour\": 1\n }\n },\n \"express_configuration\": {\n \"initiate_login_uri_template\": \"initiate_login_uri_template\",\n \"user_attribute_profile_id\": \"user_attribute_profile_id\",\n \"connection_profile_id\": \"connection_profile_id\",\n \"enable_client\": true,\n \"enable_organization\": true,\n \"linked_clients\": [\n {\n \"client_id\": \"client_id\"\n }\n ],\n \"okta_oin_client_id\": \"okta_oin_client_id\",\n \"admin_login_domain\": \"admin_login_domain\",\n \"oin_submission_id\": \"oin_submission_id\"\n },\n \"resource_server_identifier\": \"resource_server_identifier\",\n \"async_approval_notification_channels\": [\n \"guardian-push\"\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"12071cdc-1adc-4b32-8601-2cd12aa19c0c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"814f5054-4723-45e8-8d89-5a7da08db0d8","name":"Delete a client - default","request":{"urlPathTemplate":"/clients/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"814f5054-4723-45e8-8d89-5a7da08db0d8","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b4e5dc6c-c84f-4128-b87a-50876b601f77","name":"Update a client - default","request":{"urlPathTemplate":"/clients/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"client_id\": \"client_id\",\n \"tenant\": \"tenant\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"global\": true,\n \"client_secret\": \"client_secret\",\n \"app_type\": \"native\",\n \"logo_uri\": \"logo_uri\",\n \"is_first_party\": true,\n \"oidc_conformant\": true,\n \"callbacks\": [\n \"callbacks\"\n ],\n \"allowed_origins\": [\n \"allowed_origins\"\n ],\n \"web_origins\": [\n \"web_origins\"\n ],\n \"client_aliases\": [\n \"client_aliases\"\n ],\n \"allowed_clients\": [\n \"allowed_clients\"\n ],\n \"allowed_logout_urls\": [\n \"allowed_logout_urls\"\n ],\n \"session_transfer\": {\n \"can_create_session_transfer_token\": true,\n \"enforce_cascade_revocation\": true,\n \"allowed_authentication_methods\": [\n \"cookie\"\n ],\n \"enforce_device_binding\": \"ip\",\n \"allow_refresh_token\": true,\n \"enforce_online_refresh_tokens\": true\n },\n \"oidc_logout\": {\n \"backchannel_logout_urls\": [\n \"backchannel_logout_urls\"\n ],\n \"backchannel_logout_initiators\": {\n \"mode\": \"custom\",\n \"selected_initiators\": [\n \"rp-logout\"\n ]\n },\n \"backchannel_logout_session_metadata\": {\n \"include\": true\n }\n },\n \"grant_types\": [\n \"grant_types\"\n ],\n \"jwt_configuration\": {\n \"lifetime_in_seconds\": 1,\n \"secret_encoded\": true,\n \"scopes\": {\n \"key\": \"value\"\n },\n \"alg\": \"HS256\"\n },\n \"signing_keys\": [\n {\n \"pkcs7\": \"pkcs7\",\n \"cert\": \"cert\",\n \"subject\": \"subject\"\n }\n ],\n \"encryption_key\": {\n \"pub\": \"pub\",\n \"cert\": \"cert\",\n \"subject\": \"subject\"\n },\n \"sso\": true,\n \"sso_disabled\": true,\n \"cross_origin_authentication\": true,\n \"cross_origin_loc\": \"cross_origin_loc\",\n \"custom_login_page_on\": true,\n \"custom_login_page\": \"custom_login_page\",\n \"custom_login_page_preview\": \"custom_login_page_preview\",\n \"form_template\": \"form_template\",\n \"addons\": {\n \"aws\": {\n \"principal\": \"principal\",\n \"role\": \"role\",\n \"lifetime_in_seconds\": 1\n },\n \"azure_blob\": {\n \"accountName\": \"accountName\",\n \"storageAccessKey\": \"storageAccessKey\",\n \"containerName\": \"containerName\",\n \"blobName\": \"blobName\",\n \"expiration\": 1,\n \"signedIdentifier\": \"signedIdentifier\",\n \"blob_read\": true,\n \"blob_write\": true,\n \"blob_delete\": true,\n \"container_read\": true,\n \"container_write\": true,\n \"container_delete\": true,\n \"container_list\": true\n },\n \"azure_sb\": {\n \"namespace\": \"namespace\",\n \"sasKeyName\": \"sasKeyName\",\n \"sasKey\": \"sasKey\",\n \"entityPath\": \"entityPath\",\n \"expiration\": 1\n },\n \"rms\": {\n \"url\": \"url\"\n },\n \"mscrm\": {\n \"url\": \"url\"\n },\n \"slack\": {\n \"team\": \"team\"\n },\n \"sentry\": {\n \"org_slug\": \"org_slug\",\n \"base_url\": \"base_url\"\n },\n \"box\": {\n \"key\": \"value\"\n },\n \"cloudbees\": {\n \"key\": \"value\"\n },\n \"concur\": {\n \"key\": \"value\"\n },\n \"dropbox\": {\n \"key\": \"value\"\n },\n \"echosign\": {\n \"domain\": \"domain\"\n },\n \"egnyte\": {\n \"domain\": \"domain\"\n },\n \"firebase\": {\n \"secret\": \"secret\",\n \"private_key_id\": \"private_key_id\",\n \"private_key\": \"private_key\",\n \"client_email\": \"client_email\",\n \"lifetime_in_seconds\": 1\n },\n \"newrelic\": {\n \"account\": \"account\"\n },\n \"office365\": {\n \"domain\": \"domain\",\n \"connection\": \"connection\"\n },\n \"salesforce\": {\n \"entity_id\": \"entity_id\"\n },\n \"salesforce_api\": {\n \"clientid\": \"clientid\",\n \"principal\": \"principal\",\n \"communityName\": \"communityName\",\n \"community_url_section\": \"community_url_section\"\n },\n \"salesforce_sandbox_api\": {\n \"clientid\": \"clientid\",\n \"principal\": \"principal\",\n \"communityName\": \"communityName\",\n \"community_url_section\": \"community_url_section\"\n },\n \"samlp\": {\n \"mappings\": {\n \"key\": \"value\"\n },\n \"audience\": \"audience\",\n \"recipient\": \"recipient\",\n \"createUpnClaim\": true,\n \"mapUnknownClaimsAsIs\": true,\n \"passthroughClaimsWithNoMapping\": true,\n \"mapIdentities\": true,\n \"signatureAlgorithm\": \"signatureAlgorithm\",\n \"digestAlgorithm\": \"digestAlgorithm\",\n \"issuer\": \"issuer\",\n \"destination\": \"destination\",\n \"lifetimeInSeconds\": 1,\n \"signResponse\": true,\n \"nameIdentifierFormat\": \"nameIdentifierFormat\",\n \"nameIdentifierProbes\": [\n \"nameIdentifierProbes\"\n ],\n \"authnContextClassRef\": \"authnContextClassRef\"\n },\n \"layer\": {\n \"providerId\": \"providerId\",\n \"keyId\": \"keyId\",\n \"privateKey\": \"privateKey\",\n \"principal\": \"principal\",\n \"expiration\": 1\n },\n \"sap_api\": {\n \"clientid\": \"clientid\",\n \"usernameAttribute\": \"usernameAttribute\",\n \"tokenEndpointUrl\": \"tokenEndpointUrl\",\n \"scope\": \"scope\",\n \"servicePassword\": \"servicePassword\",\n \"nameIdentifierFormat\": \"nameIdentifierFormat\"\n },\n \"sharepoint\": {\n \"url\": \"url\",\n \"external_url\": [\n \"external_url\"\n ]\n },\n \"springcm\": {\n \"acsurl\": \"acsurl\"\n },\n \"wams\": {\n \"masterkey\": \"masterkey\"\n },\n \"wsfed\": {\n \"key\": \"value\"\n },\n \"zendesk\": {\n \"accountName\": \"accountName\"\n },\n \"zoom\": {\n \"account\": \"account\"\n },\n \"sso_integration\": {\n \"name\": \"name\",\n \"version\": \"version\"\n }\n },\n \"token_endpoint_auth_method\": \"none\",\n \"is_token_endpoint_ip_header_trusted\": true,\n \"client_metadata\": {\n \"key\": \"value\"\n },\n \"mobile\": {\n \"android\": {\n \"app_package_name\": \"app_package_name\",\n \"sha256_cert_fingerprints\": [\n \"sha256_cert_fingerprints\"\n ]\n },\n \"ios\": {\n \"team_id\": \"team_id\",\n \"app_bundle_identifier\": \"app_bundle_identifier\"\n }\n },\n \"initiate_login_uri\": \"initiate_login_uri\",\n \"refresh_token\": {\n \"rotation_type\": \"rotating\",\n \"expiration_type\": \"expiring\",\n \"leeway\": 1,\n \"token_lifetime\": 1,\n \"infinite_token_lifetime\": true,\n \"idle_token_lifetime\": 1,\n \"infinite_idle_token_lifetime\": true\n },\n \"default_organization\": {\n \"organization_id\": \"organization_id\",\n \"flows\": [\n \"client_credentials\"\n ]\n },\n \"organization_usage\": \"deny\",\n \"organization_require_behavior\": \"no_prompt\",\n \"organization_discovery_methods\": [\n \"email\"\n ],\n \"client_authentication_methods\": {\n \"private_key_jwt\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"tls_client_auth\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"self_signed_tls_client_auth\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n }\n },\n \"require_pushed_authorization_requests\": true,\n \"require_proof_of_possession\": true,\n \"signed_request_object\": {\n \"required\": true,\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"compliance_level\": \"none\",\n \"skip_non_verifiable_callback_uri_confirmation_prompt\": true,\n \"token_exchange\": {\n \"allow_any_profile_of_type\": [\n \"custom_authentication\"\n ]\n },\n \"par_request_expiry\": 1,\n \"token_quota\": {\n \"client_credentials\": {\n \"enforce\": true,\n \"per_day\": 1,\n \"per_hour\": 1\n }\n },\n \"express_configuration\": {\n \"initiate_login_uri_template\": \"initiate_login_uri_template\",\n \"user_attribute_profile_id\": \"user_attribute_profile_id\",\n \"connection_profile_id\": \"connection_profile_id\",\n \"enable_client\": true,\n \"enable_organization\": true,\n \"linked_clients\": [\n {\n \"client_id\": \"client_id\"\n }\n ],\n \"okta_oin_client_id\": \"okta_oin_client_id\",\n \"admin_login_domain\": \"admin_login_domain\",\n \"oin_submission_id\": \"oin_submission_id\"\n },\n \"resource_server_identifier\": \"resource_server_identifier\",\n \"async_approval_notification_channels\": [\n \"guardian-push\"\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"b4e5dc6c-c84f-4128-b87a-50876b601f77","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3dbf1f11-9054-4a8d-b670-96640f3ba9a5","name":"Rotate a client secret - default","request":{"urlPathTemplate":"/clients/{id}/rotate-secret","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"client_id\": \"client_id\",\n \"tenant\": \"tenant\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"global\": true,\n \"client_secret\": \"client_secret\",\n \"app_type\": \"native\",\n \"logo_uri\": \"logo_uri\",\n \"is_first_party\": true,\n \"oidc_conformant\": true,\n \"callbacks\": [\n \"callbacks\"\n ],\n \"allowed_origins\": [\n \"allowed_origins\"\n ],\n \"web_origins\": [\n \"web_origins\"\n ],\n \"client_aliases\": [\n \"client_aliases\"\n ],\n \"allowed_clients\": [\n \"allowed_clients\"\n ],\n \"allowed_logout_urls\": [\n \"allowed_logout_urls\"\n ],\n \"session_transfer\": {\n \"can_create_session_transfer_token\": true,\n \"enforce_cascade_revocation\": true,\n \"allowed_authentication_methods\": [\n \"cookie\"\n ],\n \"enforce_device_binding\": \"ip\",\n \"allow_refresh_token\": true,\n \"enforce_online_refresh_tokens\": true\n },\n \"oidc_logout\": {\n \"backchannel_logout_urls\": [\n \"backchannel_logout_urls\"\n ],\n \"backchannel_logout_initiators\": {\n \"mode\": \"custom\",\n \"selected_initiators\": [\n \"rp-logout\"\n ]\n },\n \"backchannel_logout_session_metadata\": {\n \"include\": true\n }\n },\n \"grant_types\": [\n \"grant_types\"\n ],\n \"jwt_configuration\": {\n \"lifetime_in_seconds\": 1,\n \"secret_encoded\": true,\n \"scopes\": {\n \"key\": \"value\"\n },\n \"alg\": \"HS256\"\n },\n \"signing_keys\": [\n {\n \"pkcs7\": \"pkcs7\",\n \"cert\": \"cert\",\n \"subject\": \"subject\"\n }\n ],\n \"encryption_key\": {\n \"pub\": \"pub\",\n \"cert\": \"cert\",\n \"subject\": \"subject\"\n },\n \"sso\": true,\n \"sso_disabled\": true,\n \"cross_origin_authentication\": true,\n \"cross_origin_loc\": \"cross_origin_loc\",\n \"custom_login_page_on\": true,\n \"custom_login_page\": \"custom_login_page\",\n \"custom_login_page_preview\": \"custom_login_page_preview\",\n \"form_template\": \"form_template\",\n \"addons\": {\n \"aws\": {\n \"principal\": \"principal\",\n \"role\": \"role\",\n \"lifetime_in_seconds\": 1\n },\n \"azure_blob\": {\n \"accountName\": \"accountName\",\n \"storageAccessKey\": \"storageAccessKey\",\n \"containerName\": \"containerName\",\n \"blobName\": \"blobName\",\n \"expiration\": 1,\n \"signedIdentifier\": \"signedIdentifier\",\n \"blob_read\": true,\n \"blob_write\": true,\n \"blob_delete\": true,\n \"container_read\": true,\n \"container_write\": true,\n \"container_delete\": true,\n \"container_list\": true\n },\n \"azure_sb\": {\n \"namespace\": \"namespace\",\n \"sasKeyName\": \"sasKeyName\",\n \"sasKey\": \"sasKey\",\n \"entityPath\": \"entityPath\",\n \"expiration\": 1\n },\n \"rms\": {\n \"url\": \"url\"\n },\n \"mscrm\": {\n \"url\": \"url\"\n },\n \"slack\": {\n \"team\": \"team\"\n },\n \"sentry\": {\n \"org_slug\": \"org_slug\",\n \"base_url\": \"base_url\"\n },\n \"box\": {\n \"key\": \"value\"\n },\n \"cloudbees\": {\n \"key\": \"value\"\n },\n \"concur\": {\n \"key\": \"value\"\n },\n \"dropbox\": {\n \"key\": \"value\"\n },\n \"echosign\": {\n \"domain\": \"domain\"\n },\n \"egnyte\": {\n \"domain\": \"domain\"\n },\n \"firebase\": {\n \"secret\": \"secret\",\n \"private_key_id\": \"private_key_id\",\n \"private_key\": \"private_key\",\n \"client_email\": \"client_email\",\n \"lifetime_in_seconds\": 1\n },\n \"newrelic\": {\n \"account\": \"account\"\n },\n \"office365\": {\n \"domain\": \"domain\",\n \"connection\": \"connection\"\n },\n \"salesforce\": {\n \"entity_id\": \"entity_id\"\n },\n \"salesforce_api\": {\n \"clientid\": \"clientid\",\n \"principal\": \"principal\",\n \"communityName\": \"communityName\",\n \"community_url_section\": \"community_url_section\"\n },\n \"salesforce_sandbox_api\": {\n \"clientid\": \"clientid\",\n \"principal\": \"principal\",\n \"communityName\": \"communityName\",\n \"community_url_section\": \"community_url_section\"\n },\n \"samlp\": {\n \"mappings\": {\n \"key\": \"value\"\n },\n \"audience\": \"audience\",\n \"recipient\": \"recipient\",\n \"createUpnClaim\": true,\n \"mapUnknownClaimsAsIs\": true,\n \"passthroughClaimsWithNoMapping\": true,\n \"mapIdentities\": true,\n \"signatureAlgorithm\": \"signatureAlgorithm\",\n \"digestAlgorithm\": \"digestAlgorithm\",\n \"issuer\": \"issuer\",\n \"destination\": \"destination\",\n \"lifetimeInSeconds\": 1,\n \"signResponse\": true,\n \"nameIdentifierFormat\": \"nameIdentifierFormat\",\n \"nameIdentifierProbes\": [\n \"nameIdentifierProbes\"\n ],\n \"authnContextClassRef\": \"authnContextClassRef\"\n },\n \"layer\": {\n \"providerId\": \"providerId\",\n \"keyId\": \"keyId\",\n \"privateKey\": \"privateKey\",\n \"principal\": \"principal\",\n \"expiration\": 1\n },\n \"sap_api\": {\n \"clientid\": \"clientid\",\n \"usernameAttribute\": \"usernameAttribute\",\n \"tokenEndpointUrl\": \"tokenEndpointUrl\",\n \"scope\": \"scope\",\n \"servicePassword\": \"servicePassword\",\n \"nameIdentifierFormat\": \"nameIdentifierFormat\"\n },\n \"sharepoint\": {\n \"url\": \"url\",\n \"external_url\": [\n \"external_url\"\n ]\n },\n \"springcm\": {\n \"acsurl\": \"acsurl\"\n },\n \"wams\": {\n \"masterkey\": \"masterkey\"\n },\n \"wsfed\": {\n \"key\": \"value\"\n },\n \"zendesk\": {\n \"accountName\": \"accountName\"\n },\n \"zoom\": {\n \"account\": \"account\"\n },\n \"sso_integration\": {\n \"name\": \"name\",\n \"version\": \"version\"\n }\n },\n \"token_endpoint_auth_method\": \"none\",\n \"is_token_endpoint_ip_header_trusted\": true,\n \"client_metadata\": {\n \"key\": \"value\"\n },\n \"mobile\": {\n \"android\": {\n \"app_package_name\": \"app_package_name\",\n \"sha256_cert_fingerprints\": [\n \"sha256_cert_fingerprints\"\n ]\n },\n \"ios\": {\n \"team_id\": \"team_id\",\n \"app_bundle_identifier\": \"app_bundle_identifier\"\n }\n },\n \"initiate_login_uri\": \"initiate_login_uri\",\n \"refresh_token\": {\n \"rotation_type\": \"rotating\",\n \"expiration_type\": \"expiring\",\n \"leeway\": 1,\n \"token_lifetime\": 1,\n \"infinite_token_lifetime\": true,\n \"idle_token_lifetime\": 1,\n \"infinite_idle_token_lifetime\": true\n },\n \"default_organization\": {\n \"organization_id\": \"organization_id\",\n \"flows\": [\n \"client_credentials\"\n ]\n },\n \"organization_usage\": \"deny\",\n \"organization_require_behavior\": \"no_prompt\",\n \"organization_discovery_methods\": [\n \"email\"\n ],\n \"client_authentication_methods\": {\n \"private_key_jwt\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"tls_client_auth\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"self_signed_tls_client_auth\": {\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n }\n },\n \"require_pushed_authorization_requests\": true,\n \"require_proof_of_possession\": true,\n \"signed_request_object\": {\n \"required\": true,\n \"credentials\": [\n {\n \"id\": \"id\"\n }\n ]\n },\n \"compliance_level\": \"none\",\n \"skip_non_verifiable_callback_uri_confirmation_prompt\": true,\n \"token_exchange\": {\n \"allow_any_profile_of_type\": [\n \"custom_authentication\"\n ]\n },\n \"par_request_expiry\": 1,\n \"token_quota\": {\n \"client_credentials\": {\n \"enforce\": true,\n \"per_day\": 1,\n \"per_hour\": 1\n }\n },\n \"express_configuration\": {\n \"initiate_login_uri_template\": \"initiate_login_uri_template\",\n \"user_attribute_profile_id\": \"user_attribute_profile_id\",\n \"connection_profile_id\": \"connection_profile_id\",\n \"enable_client\": true,\n \"enable_organization\": true,\n \"linked_clients\": [\n {\n \"client_id\": \"client_id\"\n }\n ],\n \"okta_oin_client_id\": \"okta_oin_client_id\",\n \"admin_login_domain\": \"admin_login_domain\",\n \"oin_submission_id\": \"oin_submission_id\"\n },\n \"resource_server_identifier\": \"resource_server_identifier\",\n \"async_approval_notification_channels\": [\n \"guardian-push\"\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"3dbf1f11-9054-4a8d-b670-96640f3ba9a5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"af1dc5c5-16af-447c-8374-e80a178ce120","name":"Get Connection Profiles - default","request":{"urlPathTemplate":"/connection-profiles","method":"GET"},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"connection_profiles\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"connection_name_prefix_template\": \"connection_name_prefix_template\",\n \"enabled_features\": [\n \"scim\"\n ]\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"af1dc5c5-16af-447c-8374-e80a178ce120","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"759e4e87-7cf1-4e78-9d5e-ae5cdd0f4947","name":"Create a connection profile - default","request":{"urlPathTemplate":"/connection-profiles","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"organization\": {\n \"show_as_button\": \"none\",\n \"assign_membership_on_login\": \"none\"\n },\n \"connection_name_prefix_template\": \"connection_name_prefix_template\",\n \"enabled_features\": [\n \"scim\"\n ],\n \"strategy_overrides\": {\n \"pingfederate\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"ad\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"adfs\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"waad\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"google-apps\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"okta\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"oidc\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"samlp\": {\n \"enabled_features\": [\n \"scim\"\n ]\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"759e4e87-7cf1-4e78-9d5e-ae5cdd0f4947","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0d6f52e7-dd90-4579-a469-761793294ec5","name":"Get Connection Profile Templates - default","request":{"urlPathTemplate":"/connection-profiles/templates","method":"GET"},"response":{"status":200,"body":"{\n \"connection_profile_templates\": [\n {\n \"id\": \"id\",\n \"display_name\": \"display_name\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"0d6f52e7-dd90-4579-a469-761793294ec5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"4e7a3895-5c6c-41cc-b32f-4303e2a973d9","name":"Get Connection Profile Template - default","request":{"urlPathTemplate":"/connection-profiles/templates/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"display_name\": \"display_name\",\n \"template\": {\n \"name\": \"name\",\n \"organization\": {\n \"show_as_button\": \"none\",\n \"assign_membership_on_login\": \"none\"\n },\n \"connection_name_prefix_template\": \"connection_name_prefix_template\",\n \"enabled_features\": [\n \"scim\"\n ]\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"4e7a3895-5c6c-41cc-b32f-4303e2a973d9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d5fff7c1-6be8-487e-a8b2-45fa4f4713d9","name":"Get Connection Profile - default","request":{"urlPathTemplate":"/connection-profiles/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"organization\": {\n \"show_as_button\": \"none\",\n \"assign_membership_on_login\": \"none\"\n },\n \"connection_name_prefix_template\": \"connection_name_prefix_template\",\n \"enabled_features\": [\n \"scim\"\n ],\n \"strategy_overrides\": {\n \"pingfederate\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"ad\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"adfs\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"waad\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"google-apps\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"okta\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"oidc\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"samlp\": {\n \"enabled_features\": [\n \"scim\"\n ]\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"d5fff7c1-6be8-487e-a8b2-45fa4f4713d9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fcfdce88-b3c9-4a57-8c4b-672e88f0363c","name":"Delete Connection Profile - default","request":{"urlPathTemplate":"/connection-profiles/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"fcfdce88-b3c9-4a57-8c4b-672e88f0363c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"77f167dc-e4c6-478a-b74f-0e1385df797c","name":"Modify a Connection Profile - default","request":{"urlPathTemplate":"/connection-profiles/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"organization\": {\n \"show_as_button\": \"none\",\n \"assign_membership_on_login\": \"none\"\n },\n \"connection_name_prefix_template\": \"connection_name_prefix_template\",\n \"enabled_features\": [\n \"scim\"\n ],\n \"strategy_overrides\": {\n \"pingfederate\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"ad\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"adfs\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"waad\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"google-apps\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"okta\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"oidc\": {\n \"enabled_features\": [\n \"scim\"\n ]\n },\n \"samlp\": {\n \"enabled_features\": [\n \"scim\"\n ]\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"77f167dc-e4c6-478a-b74f-0e1385df797c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"baf70a92-2b1e-4355-a67e-a94f22a92ab5","name":"Get all connections - default","request":{"urlPathTemplate":"/connections","method":"GET"},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"connections\": [\n {\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"options\": {\n \"key\": \"value\"\n },\n \"id\": \"id\",\n \"strategy\": \"strategy\",\n \"realms\": [\n \"realms\"\n ],\n \"is_domain_connection\": true,\n \"show_as_button\": true,\n \"authentication\": {\n \"active\": true\n },\n \"connected_accounts\": {\n \"active\": true\n }\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"baf70a92-2b1e-4355-a67e-a94f22a92ab5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"bfae8759-4528-462e-9a50-239cbd75f902","name":"Create a connection - default","request":{"urlPathTemplate":"/connections","method":"POST"},"response":{"status":201,"body":"{\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"options\": {\n \"key\": \"value\"\n },\n \"id\": \"id\",\n \"strategy\": \"strategy\",\n \"realms\": [\n \"realms\"\n ],\n \"enabled_clients\": [\n \"enabled_clients\"\n ],\n \"is_domain_connection\": true,\n \"show_as_button\": true,\n \"metadata\": {\n \"key\": \"value\"\n },\n \"authentication\": {\n \"active\": true\n },\n \"connected_accounts\": {\n \"active\": true,\n \"cross_app_access\": true\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"bfae8759-4528-462e-9a50-239cbd75f902","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"eb9c1976-0ef9-4666-adde-d2059ed3c1a2","name":"Get a connection - default","request":{"urlPathTemplate":"/connections/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"options\": {\n \"key\": \"value\"\n },\n \"id\": \"id\",\n \"strategy\": \"strategy\",\n \"realms\": [\n \"realms\"\n ],\n \"enabled_clients\": [\n \"enabled_clients\"\n ],\n \"is_domain_connection\": true,\n \"show_as_button\": true,\n \"metadata\": {\n \"key\": \"value\"\n },\n \"authentication\": {\n \"active\": true\n },\n \"connected_accounts\": {\n \"active\": true,\n \"cross_app_access\": true\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"eb9c1976-0ef9-4666-adde-d2059ed3c1a2","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e55d516f-7f79-4796-8adf-e0032183c04c","name":"Delete a connection - default","request":{"urlPathTemplate":"/connections/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"e55d516f-7f79-4796-8adf-e0032183c04c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"aa701672-a67f-47fc-9cfd-3d68353d9846","name":"Update a connection - default","request":{"urlPathTemplate":"/connections/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"options\": {\n \"key\": \"value\"\n },\n \"id\": \"id\",\n \"strategy\": \"strategy\",\n \"realms\": [\n \"realms\"\n ],\n \"enabled_clients\": [\n \"enabled_clients\"\n ],\n \"is_domain_connection\": true,\n \"show_as_button\": true,\n \"metadata\": {\n \"key\": \"value\"\n },\n \"authentication\": {\n \"active\": true\n },\n \"connected_accounts\": {\n \"active\": true,\n \"cross_app_access\": true\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"aa701672-a67f-47fc-9cfd-3d68353d9846","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"6e5db857-6ab6-4406-a83f-fb4332f72b48","name":"Check connection status - default","request":{"urlPathTemplate":"/connections/{id}/status","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"6e5db857-6ab6-4406-a83f-fb4332f72b48","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c65f529d-2be4-4dc7-81c0-6d696834184e","name":"Get custom domains configurations - default","request":{"urlPathTemplate":"/custom-domains","method":"GET"},"response":{"status":200,"body":"[\n {\n \"custom_domain_id\": \"custom_domain_id\",\n \"domain\": \"domain\",\n \"primary\": true,\n \"status\": \"pending_verification\",\n \"type\": \"auth0_managed_certs\",\n \"origin_domain_name\": \"origin_domain_name\",\n \"verification\": {\n \"methods\": [\n {\n \"name\": \"cname\",\n \"record\": \"record\"\n }\n ],\n \"status\": \"verified\",\n \"error_msg\": \"error_msg\",\n \"last_verified_at\": \"last_verified_at\"\n },\n \"custom_client_ip_header\": \"custom_client_ip_header\",\n \"tls_policy\": \"tls_policy\",\n \"domain_metadata\": {\n \"key\": \"value\"\n },\n \"certificate\": {\n \"status\": \"provisioning\",\n \"error_msg\": \"error_msg\",\n \"certificate_authority\": \"letsencrypt\",\n \"renews_before\": \"renews_before\"\n }\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"c65f529d-2be4-4dc7-81c0-6d696834184e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"d2917b20-da7e-4962-a75f-362f99682cf9","name":"Configure a new custom domain - default","request":{"urlPathTemplate":"/custom-domains","method":"POST"},"response":{"status":201,"body":"{\n \"custom_domain_id\": \"custom_domain_id\",\n \"domain\": \"domain\",\n \"primary\": true,\n \"status\": \"pending_verification\",\n \"type\": \"auth0_managed_certs\",\n \"verification\": {\n \"methods\": [\n {\n \"name\": \"cname\",\n \"record\": \"record\"\n }\n ],\n \"status\": \"verified\",\n \"error_msg\": \"error_msg\",\n \"last_verified_at\": \"last_verified_at\"\n },\n \"custom_client_ip_header\": \"custom_client_ip_header\",\n \"tls_policy\": \"tls_policy\",\n \"domain_metadata\": {\n \"key\": \"value\"\n },\n \"certificate\": {\n \"status\": \"provisioning\",\n \"error_msg\": \"error_msg\",\n \"certificate_authority\": \"letsencrypt\",\n \"renews_before\": \"renews_before\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"d2917b20-da7e-4962-a75f-362f99682cf9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d56d6773-eda9-4b8a-9193-025d27feecb9","name":"Get custom domain configuration - default","request":{"urlPathTemplate":"/custom-domains/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"custom_domain_id\": \"custom_domain_id\",\n \"domain\": \"domain\",\n \"primary\": true,\n \"status\": \"pending_verification\",\n \"type\": \"auth0_managed_certs\",\n \"origin_domain_name\": \"origin_domain_name\",\n \"verification\": {\n \"methods\": [\n {\n \"name\": \"cname\",\n \"record\": \"record\"\n }\n ],\n \"status\": \"verified\",\n \"error_msg\": \"error_msg\",\n \"last_verified_at\": \"last_verified_at\"\n },\n \"custom_client_ip_header\": \"custom_client_ip_header\",\n \"tls_policy\": \"tls_policy\",\n \"domain_metadata\": {\n \"key\": \"value\"\n },\n \"certificate\": {\n \"status\": \"provisioning\",\n \"error_msg\": \"error_msg\",\n \"certificate_authority\": \"letsencrypt\",\n \"renews_before\": \"renews_before\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"d56d6773-eda9-4b8a-9193-025d27feecb9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0d3570c3-79d1-49e1-85ca-aa706fb2834d","name":"Delete custom domain configuration - default","request":{"urlPathTemplate":"/custom-domains/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"0d3570c3-79d1-49e1-85ca-aa706fb2834d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"38539a1e-230b-4e70-b2f9-7ae0f252e1b6","name":"Update custom domain configuration - default","request":{"urlPathTemplate":"/custom-domains/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"custom_domain_id\": \"custom_domain_id\",\n \"domain\": \"domain\",\n \"primary\": true,\n \"status\": \"pending_verification\",\n \"type\": \"auth0_managed_certs\",\n \"verification\": {\n \"methods\": [\n {\n \"name\": \"cname\",\n \"record\": \"record\"\n }\n ],\n \"status\": \"verified\",\n \"error_msg\": \"error_msg\",\n \"last_verified_at\": \"last_verified_at\"\n },\n \"custom_client_ip_header\": \"custom_client_ip_header\",\n \"tls_policy\": \"tls_policy\",\n \"domain_metadata\": {\n \"key\": \"value\"\n },\n \"certificate\": {\n \"status\": \"provisioning\",\n \"error_msg\": \"error_msg\",\n \"certificate_authority\": \"letsencrypt\",\n \"renews_before\": \"renews_before\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"38539a1e-230b-4e70-b2f9-7ae0f252e1b6","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"cbb866f2-d5e1-4c1e-8e0e-9f50b3b5632c","name":"Test a custom domain - default","request":{"urlPathTemplate":"/custom-domains/{id}/test","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"success\": true,\n \"message\": \"message\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"cbb866f2-d5e1-4c1e-8e0e-9f50b3b5632c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"43d540a8-528e-44db-9bda-83cf1ef8a54d","name":"Verify a custom domain - default","request":{"urlPathTemplate":"/custom-domains/{id}/verify","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"custom_domain_id\": \"custom_domain_id\",\n \"domain\": \"domain\",\n \"primary\": true,\n \"status\": \"pending_verification\",\n \"type\": \"auth0_managed_certs\",\n \"cname_api_key\": \"cname_api_key\",\n \"origin_domain_name\": \"origin_domain_name\",\n \"verification\": {\n \"methods\": [\n {\n \"name\": \"cname\",\n \"record\": \"record\"\n }\n ],\n \"status\": \"verified\",\n \"error_msg\": \"error_msg\",\n \"last_verified_at\": \"last_verified_at\"\n },\n \"custom_client_ip_header\": \"custom_client_ip_header\",\n \"tls_policy\": \"tls_policy\",\n \"domain_metadata\": {\n \"key\": \"value\"\n },\n \"certificate\": {\n \"status\": \"provisioning\",\n \"error_msg\": \"error_msg\",\n \"certificate_authority\": \"letsencrypt\",\n \"renews_before\": \"renews_before\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"43d540a8-528e-44db-9bda-83cf1ef8a54d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"cfcb7751-7a75-45bf-b39f-29bac41590da","name":"Retrieve device credentials - default","request":{"urlPathTemplate":"/device-credentials","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"device_credentials\": [\n {\n \"id\": \"id\",\n \"device_name\": \"device_name\",\n \"device_id\": \"device_id\",\n \"type\": \"public_key\",\n \"user_id\": \"user_id\",\n \"client_id\": \"client_id\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"cfcb7751-7a75-45bf-b39f-29bac41590da","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"01818d23-c5cc-483a-90d7-5a5b11bf52e7","name":"Create a device public key credential - default","request":{"urlPathTemplate":"/device-credentials","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"01818d23-c5cc-483a-90d7-5a5b11bf52e7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d2da3529-65a2-4a85-a6c8-c60a55a085ad","name":"Delete a device credential - default","request":{"urlPathTemplate":"/device-credentials/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"d2da3529-65a2-4a85-a6c8-c60a55a085ad","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"27d925db-b0e4-4cad-bf10-75440adb5dea","name":"Create an email template - default","request":{"urlPathTemplate":"/email-templates","method":"POST"},"response":{"status":200,"body":"{\n \"template\": \"verify_email\",\n \"body\": \"body\",\n \"from\": \"from\",\n \"resultUrl\": \"resultUrl\",\n \"subject\": \"subject\",\n \"syntax\": \"syntax\",\n \"urlLifetimeInSeconds\": 1.1,\n \"includeEmailInRedirect\": true,\n \"enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"27d925db-b0e4-4cad-bf10-75440adb5dea","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e41992b1-8cf3-4611-9179-334debfd831a","name":"Get an email template - default","request":{"urlPathTemplate":"/email-templates/{templateName}","method":"GET","pathParameters":{"templateName":{"equalTo":"verify_email"}}},"response":{"status":200,"body":"{\n \"template\": \"verify_email\",\n \"body\": \"body\",\n \"from\": \"from\",\n \"resultUrl\": \"resultUrl\",\n \"subject\": \"subject\",\n \"syntax\": \"syntax\",\n \"urlLifetimeInSeconds\": 1.1,\n \"includeEmailInRedirect\": true,\n \"enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"e41992b1-8cf3-4611-9179-334debfd831a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4b7ee5d7-df46-44d7-8747-1db6f37bcda8","name":"Update an email template - default","request":{"urlPathTemplate":"/email-templates/{templateName}","method":"PUT","pathParameters":{"templateName":{"equalTo":"verify_email"}}},"response":{"status":200,"body":"{\n \"template\": \"verify_email\",\n \"body\": \"body\",\n \"from\": \"from\",\n \"resultUrl\": \"resultUrl\",\n \"subject\": \"subject\",\n \"syntax\": \"syntax\",\n \"urlLifetimeInSeconds\": 1.1,\n \"includeEmailInRedirect\": true,\n \"enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"4b7ee5d7-df46-44d7-8747-1db6f37bcda8","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1489d312-c6ca-4277-a1d2-01ce4c4fdad9","name":"Patch an email template - default","request":{"urlPathTemplate":"/email-templates/{templateName}","method":"PATCH","pathParameters":{"templateName":{"equalTo":"verify_email"}}},"response":{"status":200,"body":"{\n \"template\": \"verify_email\",\n \"body\": \"body\",\n \"from\": \"from\",\n \"resultUrl\": \"resultUrl\",\n \"subject\": \"subject\",\n \"syntax\": \"syntax\",\n \"urlLifetimeInSeconds\": 1.1,\n \"includeEmailInRedirect\": true,\n \"enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"1489d312-c6ca-4277-a1d2-01ce4c4fdad9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0fe7f4b8-58ff-4442-9339-c48f5185600f","name":"Get event streams - default","request":{"urlPathTemplate":"/event-streams","method":"GET"},"response":{"status":200,"body":"[\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"subscriptions\": [\n {}\n ],\n \"destination\": {\n \"type\": \"webhook\",\n \"configuration\": {\n \"webhook_endpoint\": \"webhook_endpoint\",\n \"webhook_authorization\": {\n \"method\": \"basic\",\n \"username\": \"username\"\n }\n }\n },\n \"status\": \"enabled\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"0fe7f4b8-58ff-4442-9339-c48f5185600f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"5b1a29bf-5c5c-45dd-a9fb-64f6944455e0","name":"Create an event stream - default","request":{"urlPathTemplate":"/event-streams","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"subscriptions\": [\n {\n \"event_type\": \"event_type\"\n }\n ],\n \"destination\": {\n \"type\": \"webhook\",\n \"configuration\": {\n \"webhook_endpoint\": \"webhook_endpoint\",\n \"webhook_authorization\": {\n \"method\": \"basic\",\n \"username\": \"username\"\n }\n }\n },\n \"status\": \"enabled\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"5b1a29bf-5c5c-45dd-a9fb-64f6944455e0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"85d4a52f-7433-408c-a7cc-30776d9ed641","name":"Get an event stream by ID - default","request":{"urlPathTemplate":"/event-streams/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"subscriptions\": [\n {\n \"event_type\": \"event_type\"\n }\n ],\n \"destination\": {\n \"type\": \"webhook\",\n \"configuration\": {\n \"webhook_endpoint\": \"webhook_endpoint\",\n \"webhook_authorization\": {\n \"method\": \"basic\",\n \"username\": \"username\"\n }\n }\n },\n \"status\": \"enabled\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"85d4a52f-7433-408c-a7cc-30776d9ed641","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4812fcc9-8f28-4732-96d4-8adb072fa78a","name":"Delete an event stream - default","request":{"urlPathTemplate":"/event-streams/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"4812fcc9-8f28-4732-96d4-8adb072fa78a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"08468f05-d404-462e-8fdd-ce9dca3f4e3c","name":"Update an event stream - default","request":{"urlPathTemplate":"/event-streams/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"subscriptions\": [\n {\n \"event_type\": \"event_type\"\n }\n ],\n \"destination\": {\n \"type\": \"webhook\",\n \"configuration\": {\n \"webhook_endpoint\": \"webhook_endpoint\",\n \"webhook_authorization\": {\n \"method\": \"basic\",\n \"username\": \"username\"\n }\n }\n },\n \"status\": \"enabled\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"08468f05-d404-462e-8fdd-ce9dca3f4e3c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4ba115c6-e86b-4427-9ce9-8468a24916b0","name":"Send a test event to an event stream - default","request":{"urlPathTemplate":"/event-streams/{id}/test","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":202,"body":"{\n \"id\": \"id\",\n \"event_stream_id\": \"event_stream_id\",\n \"status\": \"failed\",\n \"event_type\": \"user.created\",\n \"attempts\": [\n {\n \"status\": \"failed\",\n \"timestamp\": \"2024-01-15T09:30:00Z\",\n \"error_message\": \"error_message\"\n }\n ],\n \"event\": {\n \"id\": \"id\",\n \"source\": \"source\",\n \"specversion\": \"specversion\",\n \"type\": \"type\",\n \"time\": \"2024-01-15T09:30:00Z\",\n \"data\": \"data\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"4ba115c6-e86b-4427-9ce9-8468a24916b0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"9bee2213-71c4-41f8-9350-d50ede2f6c53","name":"Get flows - default","request":{"urlPathTemplate":"/flows","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"flows\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"executed_at\": \"executed_at\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"9bee2213-71c4-41f8-9350-d50ede2f6c53","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"6eb24c4a-01ad-47bc-bf9a-927970d1096e","name":"Create a flow - default","request":{"urlPathTemplate":"/flows","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"actions\": [\n {\n \"id\": \"id\",\n \"alias\": \"alias\",\n \"type\": \"ACTIVECAMPAIGN\",\n \"action\": \"LIST_CONTACTS\",\n \"allow_failure\": true,\n \"mask_output\": true,\n \"params\": {\n \"connection_id\": \"connection_id\",\n \"email\": \"email\"\n }\n }\n ],\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"executed_at\": \"executed_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"6eb24c4a-01ad-47bc-bf9a-927970d1096e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1eccebc1-db7b-4349-8fae-45c8537e9880","name":"Get a flow - default","request":{"urlPathTemplate":"/flows/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"actions\": [\n {\n \"id\": \"id\",\n \"alias\": \"alias\",\n \"type\": \"ACTIVECAMPAIGN\",\n \"action\": \"LIST_CONTACTS\",\n \"allow_failure\": true,\n \"mask_output\": true,\n \"params\": {\n \"connection_id\": \"connection_id\",\n \"email\": \"email\"\n }\n }\n ],\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"executed_at\": \"executed_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"1eccebc1-db7b-4349-8fae-45c8537e9880","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4dba8bf4-bec9-4e15-8591-752e9ac3644e","name":"Delete a flow - default","request":{"urlPathTemplate":"/flows/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"4dba8bf4-bec9-4e15-8591-752e9ac3644e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fc07198a-b41e-4537-aec6-1226e9691c86","name":"Update a flow - default","request":{"urlPathTemplate":"/flows/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"actions\": [\n {\n \"id\": \"id\",\n \"alias\": \"alias\",\n \"type\": \"ACTIVECAMPAIGN\",\n \"action\": \"LIST_CONTACTS\",\n \"allow_failure\": true,\n \"mask_output\": true,\n \"params\": {\n \"connection_id\": \"connection_id\",\n \"email\": \"email\"\n }\n }\n ],\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"executed_at\": \"executed_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"fc07198a-b41e-4537-aec6-1226e9691c86","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3bf65872-e8cf-4987-becb-bb082f08419f","name":"Get forms - default","request":{"urlPathTemplate":"/forms","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"forms\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"embedded_at\": \"embedded_at\",\n \"submitted_at\": \"submitted_at\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"3bf65872-e8cf-4987-becb-bb082f08419f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"6255561a-7fa0-4557-a0e7-5d3a6f40b2a1","name":"Create a form - default","request":{"urlPathTemplate":"/forms","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"messages\": {\n \"errors\": {\n \"key\": \"value\"\n },\n \"custom\": {\n \"key\": \"value\"\n }\n },\n \"languages\": {\n \"primary\": \"primary\",\n \"default\": \"default\"\n },\n \"translations\": {\n \"key\": {\n \"key\": \"value\"\n }\n },\n \"nodes\": [\n {\n \"id\": \"id\",\n \"type\": \"FLOW\",\n \"coordinates\": {\n \"x\": 1,\n \"y\": 1\n },\n \"alias\": \"alias\",\n \"config\": {\n \"flow_id\": \"flow_id\"\n }\n }\n ],\n \"start\": {\n \"hidden_fields\": [\n {\n \"key\": \"key\"\n }\n ],\n \"next_node\": \"$ending\",\n \"coordinates\": {\n \"x\": 1,\n \"y\": 1\n }\n },\n \"ending\": {\n \"redirection\": {\n \"delay\": 1,\n \"target\": \"target\"\n },\n \"after_submit\": {\n \"flow_id\": \"flow_id\"\n },\n \"coordinates\": {\n \"x\": 1,\n \"y\": 1\n },\n \"resume_flow\": true\n },\n \"style\": {\n \"css\": \"css\"\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"embedded_at\": \"embedded_at\",\n \"submitted_at\": \"submitted_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"6255561a-7fa0-4557-a0e7-5d3a6f40b2a1","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0bf329d0-420d-4f08-aec1-df5f12d67762","name":"Get a form - default","request":{"urlPathTemplate":"/forms/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"messages\": {\n \"errors\": {\n \"key\": \"value\"\n },\n \"custom\": {\n \"key\": \"value\"\n }\n },\n \"languages\": {\n \"primary\": \"primary\",\n \"default\": \"default\"\n },\n \"translations\": {\n \"key\": {\n \"key\": \"value\"\n }\n },\n \"nodes\": [\n {\n \"id\": \"id\",\n \"type\": \"FLOW\",\n \"coordinates\": {\n \"x\": 1,\n \"y\": 1\n },\n \"alias\": \"alias\",\n \"config\": {\n \"flow_id\": \"flow_id\"\n }\n }\n ],\n \"start\": {\n \"hidden_fields\": [\n {\n \"key\": \"key\"\n }\n ],\n \"next_node\": \"$ending\",\n \"coordinates\": {\n \"x\": 1,\n \"y\": 1\n }\n },\n \"ending\": {\n \"redirection\": {\n \"delay\": 1,\n \"target\": \"target\"\n },\n \"after_submit\": {\n \"flow_id\": \"flow_id\"\n },\n \"coordinates\": {\n \"x\": 1,\n \"y\": 1\n },\n \"resume_flow\": true\n },\n \"style\": {\n \"css\": \"css\"\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"embedded_at\": \"embedded_at\",\n \"submitted_at\": \"submitted_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"0bf329d0-420d-4f08-aec1-df5f12d67762","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c91995fc-fe8b-410c-9cbf-e13e1d538d1e","name":"Delete a form - default","request":{"urlPathTemplate":"/forms/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"c91995fc-fe8b-410c-9cbf-e13e1d538d1e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"944b211b-eacb-4acc-8f40-a3463ae62f37","name":"Update a form - default","request":{"urlPathTemplate":"/forms/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"messages\": {\n \"errors\": {\n \"key\": \"value\"\n },\n \"custom\": {\n \"key\": \"value\"\n }\n },\n \"languages\": {\n \"primary\": \"primary\",\n \"default\": \"default\"\n },\n \"translations\": {\n \"key\": {\n \"key\": \"value\"\n }\n },\n \"nodes\": [\n {\n \"id\": \"id\",\n \"type\": \"FLOW\",\n \"coordinates\": {\n \"x\": 1,\n \"y\": 1\n },\n \"alias\": \"alias\",\n \"config\": {\n \"flow_id\": \"flow_id\"\n }\n }\n ],\n \"start\": {\n \"hidden_fields\": [\n {\n \"key\": \"key\"\n }\n ],\n \"next_node\": \"$ending\",\n \"coordinates\": {\n \"x\": 1,\n \"y\": 1\n }\n },\n \"ending\": {\n \"redirection\": {\n \"delay\": 1,\n \"target\": \"target\"\n },\n \"after_submit\": {\n \"flow_id\": \"flow_id\"\n },\n \"coordinates\": {\n \"x\": 1,\n \"y\": 1\n },\n \"resume_flow\": true\n },\n \"style\": {\n \"css\": \"css\"\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"embedded_at\": \"embedded_at\",\n \"submitted_at\": \"submitted_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"944b211b-eacb-4acc-8f40-a3463ae62f37","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"800693b3-6319-4d73-997d-7899f5d8b842","name":"Get grants - default","request":{"urlPathTemplate":"/grants","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"grants\": [\n {\n \"id\": \"id\",\n \"clientID\": \"clientID\",\n \"user_id\": \"user_id\",\n \"audience\": \"audience\",\n \"scope\": [\n \"scope\"\n ]\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"800693b3-6319-4d73-997d-7899f5d8b842","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"42d14bbf-3fda-4f6e-82c7-0511f2cc78b4","name":"Delete a grant by user_id - default","request":{"urlPathTemplate":"/grants","method":"DELETE"},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"42d14bbf-3fda-4f6e-82c7-0511f2cc78b4","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0384a6d8-8b93-4c86-9b01-4a78b2056a0b","name":"Delete a grant by id - default","request":{"urlPathTemplate":"/grants/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"0384a6d8-8b93-4c86-9b01-4a78b2056a0b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"8e59d144-ec26-4602-a30e-51471fa41a83","name":"Get hooks - default","request":{"urlPathTemplate":"/hooks","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"hooks\": [\n {\n \"triggerId\": \"triggerId\",\n \"id\": \"id\",\n \"name\": \"name\",\n \"enabled\": true,\n \"script\": \"script\",\n \"dependencies\": {\n \"key\": \"value\"\n }\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"8e59d144-ec26-4602-a30e-51471fa41a83","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"275f3fd6-ea46-4d4e-b0b7-b3ccfa929d1b","name":"Create a hook - default","request":{"urlPathTemplate":"/hooks","method":"POST"},"response":{"status":201,"body":"{\n \"triggerId\": \"triggerId\",\n \"id\": \"id\",\n \"name\": \"name\",\n \"enabled\": true,\n \"script\": \"script\",\n \"dependencies\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"275f3fd6-ea46-4d4e-b0b7-b3ccfa929d1b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"f14ce249-5900-4b4f-acd6-a9fa7255d829","name":"Get a hook - default","request":{"urlPathTemplate":"/hooks/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"triggerId\": \"triggerId\",\n \"id\": \"id\",\n \"name\": \"name\",\n \"enabled\": true,\n \"script\": \"script\",\n \"dependencies\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"f14ce249-5900-4b4f-acd6-a9fa7255d829","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fff91330-4870-4c93-ac97-6d27a8f1fb9e","name":"Delete a hook - default","request":{"urlPathTemplate":"/hooks/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"fff91330-4870-4c93-ac97-6d27a8f1fb9e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"5b56e935-667b-4af8-be86-94a3aa61008d","name":"Update a hook - default","request":{"urlPathTemplate":"/hooks/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"triggerId\": \"triggerId\",\n \"id\": \"id\",\n \"name\": \"name\",\n \"enabled\": true,\n \"script\": \"script\",\n \"dependencies\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"5b56e935-667b-4af8-be86-94a3aa61008d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fcdce95c-c559-471a-985a-45682f16bc5a","name":"Get a job - default","request":{"urlPathTemplate":"/jobs/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"status\": \"status\",\n \"type\": \"type\",\n \"created_at\": \"created_at\",\n \"id\": \"id\",\n \"connection_id\": \"connection_id\",\n \"location\": \"location\",\n \"percentage_done\": 1,\n \"time_left_seconds\": 1,\n \"format\": \"json\",\n \"status_details\": \"status_details\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"fcdce95c-c559-471a-985a-45682f16bc5a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0ce12a9c-ca36-486e-aa2a-e41e0eb1ef44","name":"Get log streams - default","request":{"urlPathTemplate":"/log-streams","method":"GET"},"response":{"status":200,"body":"[\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"status\": \"active\",\n \"type\": \"http\",\n \"isPriority\": true,\n \"filters\": [\n {}\n ],\n \"pii_config\": {\n \"log_fields\": [\n \"first_name\"\n ],\n \"method\": \"mask\",\n \"algorithm\": \"xxhash\"\n },\n \"sink\": {\n \"httpAuthorization\": \"httpAuthorization\",\n \"httpContentFormat\": \"JSONARRAY\",\n \"httpContentType\": \"httpContentType\",\n \"httpEndpoint\": \"httpEndpoint\",\n \"httpCustomHeaders\": [\n {}\n ]\n }\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"0ce12a9c-ca36-486e-aa2a-e41e0eb1ef44","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"3cac6a38-0d9f-40e0-983f-439cbedfa617","name":"Create a log stream - default","request":{"urlPathTemplate":"/log-streams","method":"POST"},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"status\": \"active\",\n \"type\": \"http\",\n \"isPriority\": true,\n \"filters\": [\n {\n \"type\": \"category\",\n \"name\": \"auth.login.fail\"\n }\n ],\n \"pii_config\": {\n \"log_fields\": [\n \"first_name\"\n ],\n \"method\": \"mask\",\n \"algorithm\": \"xxhash\"\n },\n \"sink\": {\n \"httpAuthorization\": \"httpAuthorization\",\n \"httpContentFormat\": \"JSONARRAY\",\n \"httpContentType\": \"httpContentType\",\n \"httpEndpoint\": \"httpEndpoint\",\n \"httpCustomHeaders\": [\n {}\n ]\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"3cac6a38-0d9f-40e0-983f-439cbedfa617","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"046f0424-b1aa-49bc-bf20-db22d7a7bdf4","name":"Get log stream by ID - default","request":{"urlPathTemplate":"/log-streams/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"status\": \"active\",\n \"type\": \"http\",\n \"isPriority\": true,\n \"filters\": [\n {\n \"type\": \"category\",\n \"name\": \"auth.login.fail\"\n }\n ],\n \"pii_config\": {\n \"log_fields\": [\n \"first_name\"\n ],\n \"method\": \"mask\",\n \"algorithm\": \"xxhash\"\n },\n \"sink\": {\n \"httpAuthorization\": \"httpAuthorization\",\n \"httpContentFormat\": \"JSONARRAY\",\n \"httpContentType\": \"httpContentType\",\n \"httpEndpoint\": \"httpEndpoint\",\n \"httpCustomHeaders\": [\n {}\n ]\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"046f0424-b1aa-49bc-bf20-db22d7a7bdf4","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"9fb04f8d-0fba-4891-8126-013d70d871aa","name":"Delete log stream - default","request":{"urlPathTemplate":"/log-streams/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"9fb04f8d-0fba-4891-8126-013d70d871aa","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"8d10acdd-e185-496c-98c4-c91d469e6ed2","name":"Update a log stream - default","request":{"urlPathTemplate":"/log-streams/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"status\": \"active\",\n \"type\": \"http\",\n \"isPriority\": true,\n \"filters\": [\n {\n \"type\": \"category\",\n \"name\": \"auth.login.fail\"\n }\n ],\n \"pii_config\": {\n \"log_fields\": [\n \"first_name\"\n ],\n \"method\": \"mask\",\n \"algorithm\": \"xxhash\"\n },\n \"sink\": {\n \"httpAuthorization\": \"httpAuthorization\",\n \"httpContentFormat\": \"JSONARRAY\",\n \"httpContentType\": \"httpContentType\",\n \"httpEndpoint\": \"httpEndpoint\",\n \"httpCustomHeaders\": [\n {}\n ]\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"8d10acdd-e185-496c-98c4-c91d469e6ed2","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"dc2b7d2b-54f2-4803-8bf1-bd0cfdcb6132","name":"Search log events - default","request":{"urlPathTemplate":"/logs","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"length\": 1.1,\n \"total\": 1.1,\n \"logs\": [\n {\n \"date\": \"date\",\n \"type\": \"type\",\n \"description\": \"description\",\n \"connection\": \"connection\",\n \"connection_id\": \"connection_id\",\n \"client_id\": \"client_id\",\n \"client_name\": \"client_name\",\n \"ip\": \"ip\",\n \"hostname\": \"hostname\",\n \"user_id\": \"user_id\",\n \"user_name\": \"user_name\",\n \"audience\": \"audience\",\n \"scope\": \"scope\",\n \"strategy\": \"strategy\",\n \"strategy_type\": \"strategy_type\",\n \"log_id\": \"log_id\",\n \"isMobile\": true,\n \"details\": {\n \"key\": \"value\"\n },\n \"user_agent\": \"user_agent\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"dc2b7d2b-54f2-4803-8bf1-bd0cfdcb6132","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"b10cc251-b48a-429a-a136-810cdb7290fc","name":"Get a log event by id - default","request":{"urlPathTemplate":"/logs/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"date\": \"date\",\n \"type\": \"type\",\n \"description\": \"description\",\n \"connection\": \"connection\",\n \"connection_id\": \"connection_id\",\n \"client_id\": \"client_id\",\n \"client_name\": \"client_name\",\n \"ip\": \"ip\",\n \"hostname\": \"hostname\",\n \"user_id\": \"user_id\",\n \"user_name\": \"user_name\",\n \"audience\": \"audience\",\n \"scope\": \"scope\",\n \"strategy\": \"strategy\",\n \"strategy_type\": \"strategy_type\",\n \"log_id\": \"log_id\",\n \"isMobile\": true,\n \"details\": {\n \"key\": \"value\"\n },\n \"user_agent\": \"user_agent\",\n \"security_context\": {\n \"ja3\": \"ja3\",\n \"ja4\": \"ja4\"\n },\n \"location_info\": {\n \"country_code\": \"country_code\",\n \"country_code3\": \"country_code3\",\n \"country_name\": \"country_name\",\n \"city_name\": \"city_name\",\n \"latitude\": \"latitude\",\n \"longitude\": \"longitude\",\n \"time_zone\": \"time_zone\",\n \"continent_code\": \"continent_code\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"b10cc251-b48a-429a-a136-810cdb7290fc","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"858e0070-39b1-460a-a2d5-53d0a5c3524a","name":"Get all access control list entries for a tenant - default","request":{"urlPathTemplate":"/network-acls","method":"GET"},"response":{"status":200,"body":"{\n \"network_acls\": [\n {\n \"id\": \"id\",\n \"description\": \"description\",\n \"active\": true,\n \"priority\": 1.1,\n \"rule\": {\n \"action\": {},\n \"scope\": \"management\"\n },\n \"created_at\": \"created_at\",\n \"updated_at\": \"updated_at\"\n }\n ],\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1\n}","headers":{"Content-Type":"application/json"}},"uuid":"858e0070-39b1-460a-a2d5-53d0a5c3524a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"f8a963bf-a53b-445d-b1d7-e21a4b253957","name":"Create Access Control List - default","request":{"urlPathTemplate":"/network-acls","method":"POST"},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"f8a963bf-a53b-445d-b1d7-e21a4b253957","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fb3b0b5f-3ab2-4b19-b79b-8f10391b7deb","name":"Get a specific access control list entry for a tenant - default","request":{"urlPathTemplate":"/network-acls/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"description\": \"description\",\n \"active\": true,\n \"priority\": 1.1,\n \"rule\": {\n \"action\": {\n \"block\": true,\n \"allow\": true,\n \"log\": true,\n \"redirect\": true,\n \"redirect_uri\": \"redirect_uri\"\n },\n \"match\": {\n \"asns\": [\n 1\n ],\n \"geo_country_codes\": [\n \"geo_country_codes\"\n ],\n \"geo_subdivision_codes\": [\n \"geo_subdivision_codes\"\n ],\n \"ipv4_cidrs\": [\n \"ipv4_cidrs\"\n ],\n \"ipv6_cidrs\": [\n \"ipv6_cidrs\"\n ],\n \"ja3_fingerprints\": [\n \"ja3_fingerprints\"\n ],\n \"ja4_fingerprints\": [\n \"ja4_fingerprints\"\n ],\n \"user_agents\": [\n \"user_agents\"\n ]\n },\n \"not_match\": {\n \"asns\": [\n 1\n ],\n \"geo_country_codes\": [\n \"geo_country_codes\"\n ],\n \"geo_subdivision_codes\": [\n \"geo_subdivision_codes\"\n ],\n \"ipv4_cidrs\": [\n \"ipv4_cidrs\"\n ],\n \"ipv6_cidrs\": [\n \"ipv6_cidrs\"\n ],\n \"ja3_fingerprints\": [\n \"ja3_fingerprints\"\n ],\n \"ja4_fingerprints\": [\n \"ja4_fingerprints\"\n ],\n \"user_agents\": [\n \"user_agents\"\n ]\n },\n \"scope\": \"management\"\n },\n \"created_at\": \"created_at\",\n \"updated_at\": \"updated_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"fb3b0b5f-3ab2-4b19-b79b-8f10391b7deb","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b26d23ea-edcd-4512-a319-51a6e98131a0","name":"Update Access Control List - default","request":{"urlPathTemplate":"/network-acls/{id}","method":"PUT","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"description\": \"description\",\n \"active\": true,\n \"priority\": 1.1,\n \"rule\": {\n \"action\": {\n \"block\": true,\n \"allow\": true,\n \"log\": true,\n \"redirect\": true,\n \"redirect_uri\": \"redirect_uri\"\n },\n \"match\": {\n \"asns\": [\n 1\n ],\n \"geo_country_codes\": [\n \"geo_country_codes\"\n ],\n \"geo_subdivision_codes\": [\n \"geo_subdivision_codes\"\n ],\n \"ipv4_cidrs\": [\n \"ipv4_cidrs\"\n ],\n \"ipv6_cidrs\": [\n \"ipv6_cidrs\"\n ],\n \"ja3_fingerprints\": [\n \"ja3_fingerprints\"\n ],\n \"ja4_fingerprints\": [\n \"ja4_fingerprints\"\n ],\n \"user_agents\": [\n \"user_agents\"\n ]\n },\n \"not_match\": {\n \"asns\": [\n 1\n ],\n \"geo_country_codes\": [\n \"geo_country_codes\"\n ],\n \"geo_subdivision_codes\": [\n \"geo_subdivision_codes\"\n ],\n \"ipv4_cidrs\": [\n \"ipv4_cidrs\"\n ],\n \"ipv6_cidrs\": [\n \"ipv6_cidrs\"\n ],\n \"ja3_fingerprints\": [\n \"ja3_fingerprints\"\n ],\n \"ja4_fingerprints\": [\n \"ja4_fingerprints\"\n ],\n \"user_agents\": [\n \"user_agents\"\n ]\n },\n \"scope\": \"management\"\n },\n \"created_at\": \"created_at\",\n \"updated_at\": \"updated_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"b26d23ea-edcd-4512-a319-51a6e98131a0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"6df7bc0d-d051-4e5f-8f62-608e9d028cc6","name":"Delete Access Control List - default","request":{"urlPathTemplate":"/network-acls/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"6df7bc0d-d051-4e5f-8f62-608e9d028cc6","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"80648d37-b6ab-4ab4-ba80-17f00933453d","name":"Partial Update for an Access Control List - default","request":{"urlPathTemplate":"/network-acls/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"description\": \"description\",\n \"active\": true,\n \"priority\": 1.1,\n \"rule\": {\n \"action\": {\n \"block\": true,\n \"allow\": true,\n \"log\": true,\n \"redirect\": true,\n \"redirect_uri\": \"redirect_uri\"\n },\n \"match\": {\n \"asns\": [\n 1\n ],\n \"geo_country_codes\": [\n \"geo_country_codes\"\n ],\n \"geo_subdivision_codes\": [\n \"geo_subdivision_codes\"\n ],\n \"ipv4_cidrs\": [\n \"ipv4_cidrs\"\n ],\n \"ipv6_cidrs\": [\n \"ipv6_cidrs\"\n ],\n \"ja3_fingerprints\": [\n \"ja3_fingerprints\"\n ],\n \"ja4_fingerprints\": [\n \"ja4_fingerprints\"\n ],\n \"user_agents\": [\n \"user_agents\"\n ]\n },\n \"not_match\": {\n \"asns\": [\n 1\n ],\n \"geo_country_codes\": [\n \"geo_country_codes\"\n ],\n \"geo_subdivision_codes\": [\n \"geo_subdivision_codes\"\n ],\n \"ipv4_cidrs\": [\n \"ipv4_cidrs\"\n ],\n \"ipv6_cidrs\": [\n \"ipv6_cidrs\"\n ],\n \"ja3_fingerprints\": [\n \"ja3_fingerprints\"\n ],\n \"ja4_fingerprints\": [\n \"ja4_fingerprints\"\n ],\n \"user_agents\": [\n \"user_agents\"\n ]\n },\n \"scope\": \"management\"\n },\n \"created_at\": \"created_at\",\n \"updated_at\": \"updated_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"80648d37-b6ab-4ab4-ba80-17f00933453d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a4016e68-1c58-4a5c-b698-27ca350b937c","name":"Get organizations - default","request":{"urlPathTemplate":"/organizations","method":"GET"},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"organizations\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"token_quota\": {\n \"client_credentials\": {}\n }\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"a4016e68-1c58-4a5c-b698-27ca350b937c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"61349de2-c20a-4002-822b-9ed84e87ca1f","name":"Create an Organization - default","request":{"urlPathTemplate":"/organizations","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"branding\": {\n \"logo_url\": \"logo_url\",\n \"colors\": {\n \"primary\": \"primary\",\n \"page_background\": \"page_background\"\n }\n },\n \"metadata\": {\n \"key\": \"value\"\n },\n \"token_quota\": {\n \"client_credentials\": {\n \"enforce\": true,\n \"per_day\": 1,\n \"per_hour\": 1\n }\n },\n \"enabled_connections\": [\n {\n \"connection_id\": \"connection_id\",\n \"assign_membership_on_login\": true,\n \"show_as_button\": true,\n \"is_signup_enabled\": true\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"61349de2-c20a-4002-822b-9ed84e87ca1f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"dabd338a-8798-40ba-aaa0-8ce9b262b711","name":"Get organization by name - default","request":{"urlPathTemplate":"/organizations/name/{name}","method":"GET","pathParameters":{"name":{"equalTo":"name"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"branding\": {\n \"logo_url\": \"logo_url\",\n \"colors\": {\n \"primary\": \"primary\",\n \"page_background\": \"page_background\"\n }\n },\n \"metadata\": {\n \"key\": \"value\"\n },\n \"token_quota\": {\n \"client_credentials\": {\n \"enforce\": true,\n \"per_day\": 1,\n \"per_hour\": 1\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"dabd338a-8798-40ba-aaa0-8ce9b262b711","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"da7fe10b-f528-48cf-b4e0-8d769617a66c","name":"Get organization - default","request":{"urlPathTemplate":"/organizations/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"branding\": {\n \"logo_url\": \"logo_url\",\n \"colors\": {\n \"primary\": \"primary\",\n \"page_background\": \"page_background\"\n }\n },\n \"metadata\": {\n \"key\": \"value\"\n },\n \"token_quota\": {\n \"client_credentials\": {\n \"enforce\": true,\n \"per_day\": 1,\n \"per_hour\": 1\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"da7fe10b-f528-48cf-b4e0-8d769617a66c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"82031fa8-9043-489a-aa84-46bae3772393","name":"Delete organization - default","request":{"urlPathTemplate":"/organizations/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"82031fa8-9043-489a-aa84-46bae3772393","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a03fdbdd-77b7-4c31-9a5f-6d63cf2c017a","name":"Modify an Organization - default","request":{"urlPathTemplate":"/organizations/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"branding\": {\n \"logo_url\": \"logo_url\",\n \"colors\": {\n \"primary\": \"primary\",\n \"page_background\": \"page_background\"\n }\n },\n \"metadata\": {\n \"key\": \"value\"\n },\n \"token_quota\": {\n \"client_credentials\": {\n \"enforce\": true,\n \"per_day\": 1,\n \"per_hour\": 1\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"a03fdbdd-77b7-4c31-9a5f-6d63cf2c017a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a5b27e78-ff1e-480e-a2ff-cda4a7e2a15e","name":"Get prompt settings - default","request":{"urlPathTemplate":"/prompts","method":"GET"},"response":{"status":200,"body":"{\n \"universal_login_experience\": \"new\",\n \"identifier_first\": true,\n \"webauthn_platform_first_factor\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"a5b27e78-ff1e-480e-a2ff-cda4a7e2a15e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"170f5b5a-a3d8-415f-b2ab-64eb7e3b775b","name":"Update prompt settings - default","request":{"urlPathTemplate":"/prompts","method":"PATCH"},"response":{"status":200,"body":"{\n \"universal_login_experience\": \"new\",\n \"identifier_first\": true,\n \"webauthn_platform_first_factor\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"170f5b5a-a3d8-415f-b2ab-64eb7e3b775b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"6a045b19-b94d-495c-b30c-c1de79efc46f","name":"Get a refresh token - default","request":{"urlPathTemplate":"/refresh-tokens/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"user_id\": \"user_id\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"idle_expires_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\",\n \"device\": {\n \"initial_ip\": \"initial_ip\",\n \"initial_asn\": \"initial_asn\",\n \"initial_user_agent\": \"initial_user_agent\",\n \"last_ip\": \"last_ip\",\n \"last_asn\": \"last_asn\",\n \"last_user_agent\": \"last_user_agent\"\n },\n \"client_id\": \"client_id\",\n \"session_id\": \"session_id\",\n \"rotating\": true,\n \"resource_servers\": [\n {\n \"audience\": \"audience\",\n \"scopes\": \"scopes\"\n }\n ],\n \"last_exchanged_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"6a045b19-b94d-495c-b30c-c1de79efc46f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"9b9572e8-f0ad-4d7d-9367-b2d3e62c7cd7","name":"Delete a refresh token - default","request":{"urlPathTemplate":"/refresh-tokens/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"9b9572e8-f0ad-4d7d-9367-b2d3e62c7cd7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"8e9d39f1-8389-4238-acc7-0c1fd5f97c1b","name":"Get resource servers - default","request":{"urlPathTemplate":"/resource-servers","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"resource_servers\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"is_system\": true,\n \"identifier\": \"identifier\",\n \"scopes\": [\n {\n \"value\": \"value\"\n }\n ],\n \"signing_alg\": \"HS256\",\n \"signing_secret\": \"signing_secret\",\n \"allow_offline_access\": true,\n \"skip_consent_for_verifiable_first_party_clients\": true,\n \"token_lifetime\": 1,\n \"token_lifetime_for_web\": 1,\n \"enforce_policies\": true,\n \"token_dialect\": \"access_token\",\n \"token_encryption\": {\n \"format\": \"compact-nested-jwe\",\n \"encryption_key\": {\n \"alg\": \"RSA-OAEP-256\",\n \"pem\": \"pem\"\n }\n },\n \"consent_policy\": \"transactional-authorization-with-mfa\",\n \"proof_of_possession\": {\n \"mechanism\": \"mtls\",\n \"required\": true\n },\n \"client_id\": \"client_id\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"8e9d39f1-8389-4238-acc7-0c1fd5f97c1b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"47aa9a64-a544-47e0-9817-a2fe54866219","name":"Create a resource server - default","request":{"urlPathTemplate":"/resource-servers","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"is_system\": true,\n \"identifier\": \"identifier\",\n \"scopes\": [\n {\n \"value\": \"value\",\n \"description\": \"description\"\n }\n ],\n \"signing_alg\": \"HS256\",\n \"signing_secret\": \"signing_secret\",\n \"allow_offline_access\": true,\n \"skip_consent_for_verifiable_first_party_clients\": true,\n \"token_lifetime\": 1,\n \"token_lifetime_for_web\": 1,\n \"enforce_policies\": true,\n \"token_dialect\": \"access_token\",\n \"token_encryption\": {\n \"format\": \"compact-nested-jwe\",\n \"encryption_key\": {\n \"name\": \"name\",\n \"alg\": \"RSA-OAEP-256\",\n \"kid\": \"kid\",\n \"pem\": \"pem\"\n }\n },\n \"consent_policy\": \"transactional-authorization-with-mfa\",\n \"authorization_details\": [\n {\n \"key\": \"value\"\n }\n ],\n \"proof_of_possession\": {\n \"mechanism\": \"mtls\",\n \"required\": true\n },\n \"subject_type_authorization\": {\n \"user\": {\n \"policy\": \"allow_all\"\n },\n \"client\": {\n \"policy\": \"deny_all\"\n }\n },\n \"client_id\": \"client_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"47aa9a64-a544-47e0-9817-a2fe54866219","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"da399a32-c9a2-481c-9995-fc402c47f72a","name":"Get a resource server - default","request":{"urlPathTemplate":"/resource-servers/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"is_system\": true,\n \"identifier\": \"identifier\",\n \"scopes\": [\n {\n \"value\": \"value\",\n \"description\": \"description\"\n }\n ],\n \"signing_alg\": \"HS256\",\n \"signing_secret\": \"signing_secret\",\n \"allow_offline_access\": true,\n \"skip_consent_for_verifiable_first_party_clients\": true,\n \"token_lifetime\": 1,\n \"token_lifetime_for_web\": 1,\n \"enforce_policies\": true,\n \"token_dialect\": \"access_token\",\n \"token_encryption\": {\n \"format\": \"compact-nested-jwe\",\n \"encryption_key\": {\n \"name\": \"name\",\n \"alg\": \"RSA-OAEP-256\",\n \"kid\": \"kid\",\n \"pem\": \"pem\"\n }\n },\n \"consent_policy\": \"transactional-authorization-with-mfa\",\n \"authorization_details\": [\n {\n \"key\": \"value\"\n }\n ],\n \"proof_of_possession\": {\n \"mechanism\": \"mtls\",\n \"required\": true\n },\n \"subject_type_authorization\": {\n \"user\": {\n \"policy\": \"allow_all\"\n },\n \"client\": {\n \"policy\": \"deny_all\"\n }\n },\n \"client_id\": \"client_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"da399a32-c9a2-481c-9995-fc402c47f72a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"f46b0f05-ce0a-4b6a-9004-650a8a9d14da","name":"Delete a resource server - default","request":{"urlPathTemplate":"/resource-servers/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"f46b0f05-ce0a-4b6a-9004-650a8a9d14da","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"dd7769c9-ea3c-4d2e-bf38-bc9cd0083bc7","name":"Update a resource server - default","request":{"urlPathTemplate":"/resource-servers/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"is_system\": true,\n \"identifier\": \"identifier\",\n \"scopes\": [\n {\n \"value\": \"value\",\n \"description\": \"description\"\n }\n ],\n \"signing_alg\": \"HS256\",\n \"signing_secret\": \"signing_secret\",\n \"allow_offline_access\": true,\n \"skip_consent_for_verifiable_first_party_clients\": true,\n \"token_lifetime\": 1,\n \"token_lifetime_for_web\": 1,\n \"enforce_policies\": true,\n \"token_dialect\": \"access_token\",\n \"token_encryption\": {\n \"format\": \"compact-nested-jwe\",\n \"encryption_key\": {\n \"name\": \"name\",\n \"alg\": \"RSA-OAEP-256\",\n \"kid\": \"kid\",\n \"pem\": \"pem\"\n }\n },\n \"consent_policy\": \"transactional-authorization-with-mfa\",\n \"authorization_details\": [\n {\n \"key\": \"value\"\n }\n ],\n \"proof_of_possession\": {\n \"mechanism\": \"mtls\",\n \"required\": true\n },\n \"subject_type_authorization\": {\n \"user\": {\n \"policy\": \"allow_all\"\n },\n \"client\": {\n \"policy\": \"deny_all\"\n }\n },\n \"client_id\": \"client_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"dd7769c9-ea3c-4d2e-bf38-bc9cd0083bc7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d64f1dab-8cae-47da-98e9-b16c1a5189dc","name":"Get roles - default","request":{"urlPathTemplate":"/roles","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"roles\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"d64f1dab-8cae-47da-98e9-b16c1a5189dc","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"ddc91359-6806-4cf1-b143-e8d1bc363c3f","name":"Create a role - default","request":{"urlPathTemplate":"/roles","method":"POST"},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"ddc91359-6806-4cf1-b143-e8d1bc363c3f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"18803f36-8ee6-4051-9c5e-ab4a2a000ec7","name":"Get a role - default","request":{"urlPathTemplate":"/roles/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"18803f36-8ee6-4051-9c5e-ab4a2a000ec7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"53428abe-f9c9-49e7-ada5-7cabecc6f0f5","name":"Delete a role - default","request":{"urlPathTemplate":"/roles/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"53428abe-f9c9-49e7-ada5-7cabecc6f0f5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fb25cab0-ca38-4950-ba80-98504d41bb20","name":"Update a role - default","request":{"urlPathTemplate":"/roles/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"fb25cab0-ca38-4950-ba80-98504d41bb20","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"551dd253-310d-4f66-ab80-e07988490a37","name":"Get rules - default","request":{"urlPathTemplate":"/rules","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"rules\": [\n {\n \"name\": \"name\",\n \"id\": \"id\",\n \"enabled\": true,\n \"script\": \"script\",\n \"order\": 1.1,\n \"stage\": \"stage\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"551dd253-310d-4f66-ab80-e07988490a37","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"6eba8e54-3d94-4b5a-9f90-34ea57895fb5","name":"Create a rule - default","request":{"urlPathTemplate":"/rules","method":"POST"},"response":{"status":201,"body":"{\n \"name\": \"name\",\n \"id\": \"id\",\n \"enabled\": true,\n \"script\": \"script\",\n \"order\": 1.1,\n \"stage\": \"stage\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"6eba8e54-3d94-4b5a-9f90-34ea57895fb5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"6bd903b2-17f8-4021-9cae-4c1141223c95","name":"Get a rule - default","request":{"urlPathTemplate":"/rules/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"name\": \"name\",\n \"id\": \"id\",\n \"enabled\": true,\n \"script\": \"script\",\n \"order\": 1.1,\n \"stage\": \"stage\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"6bd903b2-17f8-4021-9cae-4c1141223c95","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"6110c86e-027f-441b-bb72-e5b0e6096803","name":"Delete a rule - default","request":{"urlPathTemplate":"/rules/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"6110c86e-027f-441b-bb72-e5b0e6096803","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3033effa-f1f9-4988-8752-203075bb6aec","name":"Update a rule - default","request":{"urlPathTemplate":"/rules/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"name\": \"name\",\n \"id\": \"id\",\n \"enabled\": true,\n \"script\": \"script\",\n \"order\": 1.1,\n \"stage\": \"stage\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"3033effa-f1f9-4988-8752-203075bb6aec","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3abfda6c-fc81-4be8-a87e-be80fcef8c2f","name":"Retrieve config variable keys for rules (get_rules-configs) - default","request":{"urlPathTemplate":"/rules-configs","method":"GET"},"response":{"status":200,"body":"[\n {\n \"key\": \"key\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"3abfda6c-fc81-4be8-a87e-be80fcef8c2f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"f90321dc-6914-4101-8af1-743cafaa62d7","name":"Set rules config for a given key - default","request":{"urlPathTemplate":"/rules-configs/{key}","method":"PUT","pathParameters":{"key":{"equalTo":"key"}}},"response":{"status":200,"body":"{\n \"key\": \"key\",\n \"value\": \"value\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"f90321dc-6914-4101-8af1-743cafaa62d7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4e06c73c-ffd7-4b88-9857-99801c652707","name":"Delete rules config for a given key - default","request":{"urlPathTemplate":"/rules-configs/{key}","method":"DELETE","pathParameters":{"key":{"equalTo":"key"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"4e06c73c-ffd7-4b88-9857-99801c652707","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"466bc78c-8022-4a7f-96e1-2a01c78c0b54","name":"Get self-service profiles - default","request":{"urlPathTemplate":"/self-service-profiles","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"self_service_profiles\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"user_attributes\": [\n {\n \"name\": \"name\",\n \"description\": \"description\",\n \"is_optional\": true\n }\n ],\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"allowed_strategies\": [\n \"oidc\"\n ],\n \"user_attribute_profile_id\": \"user_attribute_profile_id\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"466bc78c-8022-4a7f-96e1-2a01c78c0b54","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"bc8551be-c96c-4800-a5cc-dbbecc17b15b","name":"Create a self-service profile - default","request":{"urlPathTemplate":"/self-service-profiles","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"user_attributes\": [\n {\n \"name\": \"name\",\n \"description\": \"description\",\n \"is_optional\": true\n }\n ],\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"branding\": {\n \"logo_url\": \"logo_url\",\n \"colors\": {\n \"primary\": \"primary\"\n }\n },\n \"allowed_strategies\": [\n \"oidc\"\n ],\n \"user_attribute_profile_id\": \"user_attribute_profile_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"bc8551be-c96c-4800-a5cc-dbbecc17b15b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"19739c76-9199-492a-bd18-730f773b6ffb","name":"Get a self-service profile by Id - default","request":{"urlPathTemplate":"/self-service-profiles/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"user_attributes\": [\n {\n \"name\": \"name\",\n \"description\": \"description\",\n \"is_optional\": true\n }\n ],\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"branding\": {\n \"logo_url\": \"logo_url\",\n \"colors\": {\n \"primary\": \"primary\"\n }\n },\n \"allowed_strategies\": [\n \"oidc\"\n ],\n \"user_attribute_profile_id\": \"user_attribute_profile_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"19739c76-9199-492a-bd18-730f773b6ffb","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"5378d984-8d98-4586-9b4a-7dd9f2ef00af","name":"Delete a self-service profile by Id - default","request":{"urlPathTemplate":"/self-service-profiles/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"5378d984-8d98-4586-9b4a-7dd9f2ef00af","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d25c3782-1ef8-47b4-bf73-67a8f977fb17","name":"Update a self-service profile - default","request":{"urlPathTemplate":"/self-service-profiles/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\",\n \"user_attributes\": [\n {\n \"name\": \"name\",\n \"description\": \"description\",\n \"is_optional\": true\n }\n ],\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"branding\": {\n \"logo_url\": \"logo_url\",\n \"colors\": {\n \"primary\": \"primary\"\n }\n },\n \"allowed_strategies\": [\n \"oidc\"\n ],\n \"user_attribute_profile_id\": \"user_attribute_profile_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"d25c3782-1ef8-47b4-bf73-67a8f977fb17","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3eff16ca-bc50-43ac-9373-249bdaf18766","name":"Get session - default","request":{"urlPathTemplate":"/sessions/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"user_id\": \"user_id\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"authenticated_at\": \"2024-01-15T09:30:00Z\",\n \"idle_expires_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\",\n \"last_interacted_at\": \"2024-01-15T09:30:00Z\",\n \"device\": {\n \"initial_user_agent\": \"initial_user_agent\",\n \"initial_ip\": \"initial_ip\",\n \"initial_asn\": \"initial_asn\",\n \"last_user_agent\": \"last_user_agent\",\n \"last_ip\": \"last_ip\",\n \"last_asn\": \"last_asn\"\n },\n \"clients\": [\n {\n \"client_id\": \"client_id\"\n }\n ],\n \"authentication\": {\n \"methods\": [\n {}\n ]\n },\n \"cookie\": {\n \"mode\": \"non-persistent\"\n },\n \"session_metadata\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"3eff16ca-bc50-43ac-9373-249bdaf18766","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"046df2cc-1fd5-4ffb-bf25-97235e3418aa","name":"Delete session - default","request":{"urlPathTemplate":"/sessions/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"046df2cc-1fd5-4ffb-bf25-97235e3418aa","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"cde85d14-94e2-472f-93d0-ab0f6a1e29e6","name":"Update session - default","request":{"urlPathTemplate":"/sessions/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"user_id\": \"user_id\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"authenticated_at\": \"2024-01-15T09:30:00Z\",\n \"idle_expires_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\",\n \"last_interacted_at\": \"2024-01-15T09:30:00Z\",\n \"device\": {\n \"initial_user_agent\": \"initial_user_agent\",\n \"initial_ip\": \"initial_ip\",\n \"initial_asn\": \"initial_asn\",\n \"last_user_agent\": \"last_user_agent\",\n \"last_ip\": \"last_ip\",\n \"last_asn\": \"last_asn\"\n },\n \"clients\": [\n {\n \"client_id\": \"client_id\"\n }\n ],\n \"authentication\": {\n \"methods\": [\n {}\n ]\n },\n \"cookie\": {\n \"mode\": \"non-persistent\"\n },\n \"session_metadata\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"cde85d14-94e2-472f-93d0-ab0f6a1e29e6","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"eceb4045-ef5a-414d-a73f-ebbc3266db3b","name":"Revokes a session - default","request":{"urlPathTemplate":"/sessions/{id}/revoke","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"eceb4045-ef5a-414d-a73f-ebbc3266db3b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"deb6f466-7529-4d43-9ae7-ec08cdee6fc8","name":"Get active users count - default","request":{"urlPathTemplate":"/stats/active-users","method":"GET"},"response":{"status":200,"body":"1.1","headers":{"Content-Type":"application/json"}},"uuid":"deb6f466-7529-4d43-9ae7-ec08cdee6fc8","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"a1c7c8b9-a534-46f2-ae35-eb70ca7628ae","name":"Get daily stats - default","request":{"urlPathTemplate":"/stats/daily","method":"GET"},"response":{"status":200,"body":"[\n {\n \"date\": \"date\",\n \"logins\": 1,\n \"signups\": 1,\n \"leaked_passwords\": 1,\n \"updated_at\": \"updated_at\",\n \"created_at\": \"created_at\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"a1c7c8b9-a534-46f2-ae35-eb70ca7628ae","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"818f5cc7-86b3-4568-8861-9d114c5669ef","name":"Get the supplemental signals configuration for a tenant - default","request":{"urlPathTemplate":"/supplemental-signals","method":"GET"},"response":{"status":200,"body":"{\n \"akamai_enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"818f5cc7-86b3-4568-8861-9d114c5669ef","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"7ba85b66-eee6-4f11-b0e1-ae58fc016a79","name":"Update the supplemental signals configuration for a tenant - default","request":{"urlPathTemplate":"/supplemental-signals","method":"PATCH"},"response":{"status":200,"body":"{\n \"akamai_enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"7ba85b66-eee6-4f11-b0e1-ae58fc016a79","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"5b479979-e975-4c68-b8fd-ca081dfcbca7","name":"Create an email verification ticket - default","request":{"urlPathTemplate":"/tickets/email-verification","method":"POST"},"response":{"status":201,"body":"{\n \"ticket\": \"ticket\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"5b479979-e975-4c68-b8fd-ca081dfcbca7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2b3107dc-9258-4e8c-bfb4-9f4d911eefec","name":"Create a password change ticket - default","request":{"urlPathTemplate":"/tickets/password-change","method":"POST"},"response":{"status":201,"body":"{\n \"ticket\": \"ticket\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"2b3107dc-9258-4e8c-bfb4-9f4d911eefec","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"83be5ec3-d77b-4a3a-9e52-87f57af4d962","name":"Get token exchange profiles - default","request":{"urlPathTemplate":"/token-exchange-profiles","method":"GET"},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"token_exchange_profiles\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"subject_token_type\": \"subject_token_type\",\n \"action_id\": \"action_id\",\n \"type\": \"custom_authentication\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"83be5ec3-d77b-4a3a-9e52-87f57af4d962","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"98e2d250-d01b-4580-a4b1-92e13a0b54b9","name":"Create a token exchange profile - default","request":{"urlPathTemplate":"/token-exchange-profiles","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"subject_token_type\": \"subject_token_type\",\n \"action_id\": \"action_id\",\n \"type\": \"custom_authentication\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"98e2d250-d01b-4580-a4b1-92e13a0b54b9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4594d614-c499-48ab-9fee-e1d4df134a89","name":"Get a token exchange profile - default","request":{"urlPathTemplate":"/token-exchange-profiles/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"subject_token_type\": \"subject_token_type\",\n \"action_id\": \"action_id\",\n \"type\": \"custom_authentication\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"4594d614-c499-48ab-9fee-e1d4df134a89","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"172477bd-43d7-47ae-8ec8-eeb2f403f89c","name":"Delete a token exchange profile - default","request":{"urlPathTemplate":"/token-exchange-profiles/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"172477bd-43d7-47ae-8ec8-eeb2f403f89c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2d5941b9-03b1-47b9-ad3b-1466357ae3b0","name":"Update an existing token exchange profile - default","request":{"urlPathTemplate":"/token-exchange-profiles/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"2d5941b9-03b1-47b9-ad3b-1466357ae3b0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b4e9ccbb-5ef3-4c51-8149-56153dc787d4","name":"Get User Attribute Profiles - default","request":{"urlPathTemplate":"/user-attribute-profiles","method":"GET"},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"user_attribute_profiles\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"user_attributes\": {\n \"key\": {\n \"description\": \"description\",\n \"label\": \"label\",\n \"profile_required\": true,\n \"auth0_mapping\": \"auth0_mapping\"\n }\n }\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"b4e9ccbb-5ef3-4c51-8149-56153dc787d4","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"d032e452-b3cb-4a7a-8906-bb80a76c6b8f","name":"Post User Attribute Profile - default","request":{"urlPathTemplate":"/user-attribute-profiles","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"user_id\": {\n \"oidc_mapping\": \"sub\",\n \"saml_mapping\": [\n \"saml_mapping\"\n ],\n \"scim_mapping\": \"scim_mapping\"\n },\n \"user_attributes\": {\n \"key\": {\n \"description\": \"description\",\n \"label\": \"label\",\n \"profile_required\": true,\n \"auth0_mapping\": \"auth0_mapping\",\n \"oidc_mapping\": {\n \"mapping\": \"mapping\"\n },\n \"saml_mapping\": [\n \"saml_mapping\"\n ],\n \"scim_mapping\": \"scim_mapping\"\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"d032e452-b3cb-4a7a-8906-bb80a76c6b8f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"5a222f5e-5188-4dff-ae26-46d41f56c061","name":"Get User Attribute Profile Templates - default","request":{"urlPathTemplate":"/user-attribute-profiles/templates","method":"GET"},"response":{"status":200,"body":"{\n \"user_attribute_profile_templates\": [\n {\n \"id\": \"id\",\n \"display_name\": \"display_name\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"5a222f5e-5188-4dff-ae26-46d41f56c061","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"6672c8c9-01d1-4aae-9ade-20890bbff6b3","name":"Get User Attribute Profile Template - default","request":{"urlPathTemplate":"/user-attribute-profiles/templates/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"display_name\": \"display_name\",\n \"template\": {\n \"name\": \"name\",\n \"user_id\": {\n \"oidc_mapping\": \"sub\",\n \"saml_mapping\": [\n \"saml_mapping\"\n ],\n \"scim_mapping\": \"scim_mapping\"\n },\n \"user_attributes\": {\n \"key\": {\n \"description\": \"description\",\n \"label\": \"label\",\n \"profile_required\": true,\n \"auth0_mapping\": \"auth0_mapping\"\n }\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"6672c8c9-01d1-4aae-9ade-20890bbff6b3","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b09540c6-726c-42e3-b5e8-dbc7182c2147","name":"Get User Attribute Profile - default","request":{"urlPathTemplate":"/user-attribute-profiles/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"user_id\": {\n \"oidc_mapping\": \"sub\",\n \"saml_mapping\": [\n \"saml_mapping\"\n ],\n \"scim_mapping\": \"scim_mapping\"\n },\n \"user_attributes\": {\n \"key\": {\n \"description\": \"description\",\n \"label\": \"label\",\n \"profile_required\": true,\n \"auth0_mapping\": \"auth0_mapping\",\n \"oidc_mapping\": {\n \"mapping\": \"mapping\"\n },\n \"saml_mapping\": [\n \"saml_mapping\"\n ],\n \"scim_mapping\": \"scim_mapping\"\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"b09540c6-726c-42e3-b5e8-dbc7182c2147","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"ce0d7ce2-8b91-4791-be9b-2774f5efeec0","name":"Delete User Attribute Profile - default","request":{"urlPathTemplate":"/user-attribute-profiles/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"ce0d7ce2-8b91-4791-be9b-2774f5efeec0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2e6307a7-6f62-4b1f-a02b-e6414927a286","name":"Modify a user attribute profile - default","request":{"urlPathTemplate":"/user-attribute-profiles/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"user_id\": {\n \"oidc_mapping\": \"sub\",\n \"saml_mapping\": [\n \"saml_mapping\"\n ],\n \"scim_mapping\": \"scim_mapping\"\n },\n \"user_attributes\": {\n \"key\": {\n \"description\": \"description\",\n \"label\": \"label\",\n \"profile_required\": true,\n \"auth0_mapping\": \"auth0_mapping\",\n \"oidc_mapping\": {\n \"mapping\": \"mapping\"\n },\n \"saml_mapping\": [\n \"saml_mapping\"\n ],\n \"scim_mapping\": \"scim_mapping\"\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"2e6307a7-6f62-4b1f-a02b-e6414927a286","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2522dc7d-5aa2-4655-a7a9-24f79a2b8425","name":"Get blocks by identifier - default","request":{"urlPathTemplate":"/user-blocks","method":"GET"},"response":{"status":200,"body":"{\n \"blocked_for\": [\n {\n \"identifier\": \"identifier\",\n \"ip\": \"ip\",\n \"connection\": \"connection\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"2522dc7d-5aa2-4655-a7a9-24f79a2b8425","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"049ee4c7-943e-481c-8ebf-dc6d21d5260c","name":"Unblock by identifier - default","request":{"urlPathTemplate":"/user-blocks","method":"DELETE"},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"049ee4c7-943e-481c-8ebf-dc6d21d5260c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d2565899-4c2a-4b6b-93b5-caecdbadc782","name":"Get a user's blocks - default","request":{"urlPathTemplate":"/user-blocks/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"blocked_for\": [\n {\n \"identifier\": \"identifier\",\n \"ip\": \"ip\",\n \"connection\": \"connection\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"d2565899-4c2a-4b6b-93b5-caecdbadc782","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b3f82ebe-f646-4a06-9770-8ece4e55d861","name":"Unblock a user - default","request":{"urlPathTemplate":"/user-blocks/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"b3f82ebe-f646-4a06-9770-8ece4e55d861","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"8b4e8914-5be6-4e9b-896f-0b72752d9671","name":"List or Search Users - default","request":{"urlPathTemplate":"/users","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"length\": 1.1,\n \"total\": 1.1,\n \"users\": [\n {\n \"user_id\": \"user_id\",\n \"email\": \"email\",\n \"email_verified\": true,\n \"username\": \"username\",\n \"phone_number\": \"phone_number\",\n \"phone_verified\": true,\n \"created_at\": \"created_at\",\n \"updated_at\": \"updated_at\",\n \"identities\": [\n {}\n ],\n \"app_metadata\": {\n \"key\": \"value\"\n },\n \"user_metadata\": {\n \"key\": \"value\"\n },\n \"picture\": \"picture\",\n \"name\": \"name\",\n \"nickname\": \"nickname\",\n \"multifactor\": [\n \"multifactor\"\n ],\n \"last_ip\": \"last_ip\",\n \"last_login\": \"last_login\",\n \"logins_count\": 1,\n \"blocked\": true,\n \"given_name\": \"given_name\",\n \"family_name\": \"family_name\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"8b4e8914-5be6-4e9b-896f-0b72752d9671","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"4a8c54d7-9d2a-4a48-ad89-4b2481eed23a","name":"Create a User - default","request":{"urlPathTemplate":"/users","method":"POST"},"response":{"status":201,"body":"{\n \"user_id\": \"user_id\",\n \"email\": \"email\",\n \"email_verified\": true,\n \"username\": \"username\",\n \"phone_number\": \"phone_number\",\n \"phone_verified\": true,\n \"created_at\": \"created_at\",\n \"updated_at\": \"updated_at\",\n \"identities\": [\n {\n \"connection\": \"connection\",\n \"user_id\": \"user_id\",\n \"provider\": \"ad\",\n \"isSocial\": true,\n \"access_token\": \"access_token\",\n \"access_token_secret\": \"access_token_secret\",\n \"refresh_token\": \"refresh_token\"\n }\n ],\n \"app_metadata\": {\n \"key\": \"value\"\n },\n \"user_metadata\": {\n \"key\": \"value\"\n },\n \"picture\": \"picture\",\n \"name\": \"name\",\n \"nickname\": \"nickname\",\n \"multifactor\": [\n \"multifactor\"\n ],\n \"last_ip\": \"last_ip\",\n \"last_login\": \"last_login\",\n \"logins_count\": 1,\n \"blocked\": true,\n \"given_name\": \"given_name\",\n \"family_name\": \"family_name\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"4a8c54d7-9d2a-4a48-ad89-4b2481eed23a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"414f2fd9-cbe8-4b07-b181-1bc4d03f38d6","name":"Search Users by Email - default","request":{"urlPathTemplate":"/users-by-email","method":"GET"},"response":{"status":200,"body":"[\n {\n \"user_id\": \"user_id\",\n \"email\": \"email\",\n \"email_verified\": true,\n \"username\": \"username\",\n \"phone_number\": \"phone_number\",\n \"phone_verified\": true,\n \"created_at\": \"created_at\",\n \"updated_at\": \"updated_at\",\n \"identities\": [\n {}\n ],\n \"app_metadata\": {\n \"key\": \"value\"\n },\n \"user_metadata\": {\n \"key\": \"value\"\n },\n \"picture\": \"picture\",\n \"name\": \"name\",\n \"nickname\": \"nickname\",\n \"multifactor\": [\n \"multifactor\"\n ],\n \"last_ip\": \"last_ip\",\n \"last_login\": \"last_login\",\n \"logins_count\": 1,\n \"blocked\": true,\n \"given_name\": \"given_name\",\n \"family_name\": \"family_name\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"414f2fd9-cbe8-4b07-b181-1bc4d03f38d6","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"9fc639a9-4bc3-4dab-909f-41947203684a","name":"Get a User - default","request":{"urlPathTemplate":"/users/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"user_id\": \"user_id\",\n \"email\": \"email\",\n \"email_verified\": true,\n \"username\": \"username\",\n \"phone_number\": \"phone_number\",\n \"phone_verified\": true,\n \"created_at\": \"created_at\",\n \"updated_at\": \"updated_at\",\n \"identities\": [\n {\n \"connection\": \"connection\",\n \"user_id\": \"user_id\",\n \"provider\": \"ad\",\n \"isSocial\": true,\n \"access_token\": \"access_token\",\n \"access_token_secret\": \"access_token_secret\",\n \"refresh_token\": \"refresh_token\"\n }\n ],\n \"app_metadata\": {\n \"key\": \"value\"\n },\n \"user_metadata\": {\n \"key\": \"value\"\n },\n \"picture\": \"picture\",\n \"name\": \"name\",\n \"nickname\": \"nickname\",\n \"multifactor\": [\n \"multifactor\"\n ],\n \"last_ip\": \"last_ip\",\n \"last_login\": \"last_login\",\n \"logins_count\": 1,\n \"blocked\": true,\n \"given_name\": \"given_name\",\n \"family_name\": \"family_name\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"9fc639a9-4bc3-4dab-909f-41947203684a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"265181b3-7abf-472b-99f2-d2e6eb47b27e","name":"Delete a User - default","request":{"urlPathTemplate":"/users/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"265181b3-7abf-472b-99f2-d2e6eb47b27e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c65910b9-fa24-4a35-87b7-3b8e611f2d5c","name":"Update a User - default","request":{"urlPathTemplate":"/users/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"user_id\": \"user_id\",\n \"email\": \"email\",\n \"email_verified\": true,\n \"username\": \"username\",\n \"phone_number\": \"phone_number\",\n \"phone_verified\": true,\n \"created_at\": \"created_at\",\n \"updated_at\": \"updated_at\",\n \"identities\": [\n {\n \"connection\": \"connection\",\n \"user_id\": \"user_id\",\n \"provider\": \"ad\",\n \"isSocial\": true,\n \"access_token\": \"access_token\",\n \"access_token_secret\": \"access_token_secret\",\n \"refresh_token\": \"refresh_token\"\n }\n ],\n \"app_metadata\": {\n \"key\": \"value\"\n },\n \"user_metadata\": {\n \"key\": \"value\"\n },\n \"picture\": \"picture\",\n \"name\": \"name\",\n \"nickname\": \"nickname\",\n \"multifactor\": [\n \"multifactor\"\n ],\n \"last_ip\": \"last_ip\",\n \"last_login\": \"last_login\",\n \"logins_count\": 1,\n \"blocked\": true,\n \"given_name\": \"given_name\",\n \"family_name\": \"family_name\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"c65910b9-fa24-4a35-87b7-3b8e611f2d5c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1a7b88c7-c33a-4670-953b-957ea26d298e","name":"Generate New Multi-factor Authentication Recovery Code - default","request":{"urlPathTemplate":"/users/{id}/recovery-code-regeneration","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"recovery_code\": \"recovery_code\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"1a7b88c7-c33a-4670-953b-957ea26d298e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a562240d-132f-4adc-a0f6-763101460526","name":"Revokes selected resources from a user - default","request":{"urlPathTemplate":"/users/{id}/revoke-access","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"a562240d-132f-4adc-a0f6-763101460526","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"ccdc2dc5-d900-4938-9ae0-3a9466191ed1","name":"Get an action's versions - default","request":{"urlPathTemplate":"/actions/actions/{actionId}/versions","method":"GET","pathParameters":{"actionId":{"equalTo":"actionId"}}},"response":{"status":200,"body":"{\n \"total\": 1.1,\n \"page\": 1.1,\n \"per_page\": 1.1,\n \"versions\": [\n {\n \"id\": \"id\",\n \"action_id\": \"action_id\",\n \"code\": \"code\",\n \"dependencies\": [\n {}\n ],\n \"deployed\": true,\n \"runtime\": \"runtime\",\n \"secrets\": [\n {}\n ],\n \"status\": \"pending\",\n \"number\": 1.1,\n \"errors\": [\n {}\n ],\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ]\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"ccdc2dc5-d900-4938-9ae0-3a9466191ed1","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"33c0cb30-ca1f-4477-9078-8647e82f975f","name":"Get a specific version of an action - default","request":{"urlPathTemplate":"/actions/actions/{actionId}/versions/{id}","method":"GET","pathParameters":{"actionId":{"equalTo":"actionId"},"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"action_id\": \"action_id\",\n \"code\": \"code\",\n \"dependencies\": [\n {\n \"name\": \"name\",\n \"version\": \"version\",\n \"registry_url\": \"registry_url\"\n }\n ],\n \"deployed\": true,\n \"runtime\": \"runtime\",\n \"secrets\": [\n {\n \"name\": \"name\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"status\": \"pending\",\n \"number\": 1.1,\n \"errors\": [\n {\n \"id\": \"id\",\n \"msg\": \"msg\",\n \"url\": \"url\"\n }\n ],\n \"action\": {\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n },\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"supported_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\",\n \"status\": \"status\",\n \"runtimes\": [\n \"runtimes\"\n ],\n \"default_runtime\": \"default_runtime\",\n \"compatible_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\"\n }\n ],\n \"binding_policy\": \"trigger-bound\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"33c0cb30-ca1f-4477-9078-8647e82f975f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"746fbf5a-cee7-4302-ad86-14035a3912f7","name":"Roll back to a previous action version - default","request":{"urlPathTemplate":"/actions/actions/{actionId}/versions/{id}/deploy","method":"POST","pathParameters":{"actionId":{"equalTo":"actionId"},"id":{"equalTo":"id"}}},"response":{"status":202,"body":"{\n \"id\": \"id\",\n \"action_id\": \"action_id\",\n \"code\": \"code\",\n \"dependencies\": [\n {\n \"name\": \"name\",\n \"version\": \"version\",\n \"registry_url\": \"registry_url\"\n }\n ],\n \"deployed\": true,\n \"runtime\": \"runtime\",\n \"secrets\": [\n {\n \"name\": \"name\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"status\": \"pending\",\n \"number\": 1.1,\n \"errors\": [\n {\n \"id\": \"id\",\n \"msg\": \"msg\",\n \"url\": \"url\"\n }\n ],\n \"action\": {\n \"id\": \"id\",\n \"name\": \"name\",\n \"supported_triggers\": [\n {\n \"id\": \"id\"\n }\n ],\n \"all_changes_deployed\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n },\n \"built_at\": \"2024-01-15T09:30:00Z\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"supported_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\",\n \"status\": \"status\",\n \"runtimes\": [\n \"runtimes\"\n ],\n \"default_runtime\": \"default_runtime\",\n \"compatible_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\"\n }\n ],\n \"binding_policy\": \"trigger-bound\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"746fbf5a-cee7-4302-ad86-14035a3912f7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"822dd98d-546e-46d8-a976-8f2c97028432","name":"Get an execution - default","request":{"urlPathTemplate":"/actions/executions/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"trigger_id\": \"trigger_id\",\n \"status\": \"unspecified\",\n \"results\": [\n {\n \"action_name\": \"action_name\",\n \"started_at\": \"2024-01-15T09:30:00Z\",\n \"ended_at\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"822dd98d-546e-46d8-a976-8f2c97028432","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"f6c96303-6883-4084-989f-2dbadb13c1d9","name":"Get triggers - default","request":{"urlPathTemplate":"/actions/triggers","method":"GET"},"response":{"status":200,"body":"{\n \"triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\",\n \"status\": \"status\",\n \"runtimes\": [\n \"runtimes\"\n ],\n \"default_runtime\": \"default_runtime\",\n \"compatible_triggers\": [\n {\n \"id\": \"id\",\n \"version\": \"version\"\n }\n ],\n \"binding_policy\": \"trigger-bound\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"f6c96303-6883-4084-989f-2dbadb13c1d9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"eb7071fc-50a8-4dc9-a79d-ce47e23d4637","name":"Get trigger bindings - default","request":{"urlPathTemplate":"/actions/triggers/{triggerId}/bindings","method":"GET","pathParameters":{"triggerId":{"equalTo":"triggerId"}}},"response":{"status":200,"body":"{\n \"total\": 1.1,\n \"page\": 1.1,\n \"per_page\": 1.1,\n \"bindings\": [\n {\n \"id\": \"id\",\n \"trigger_id\": \"trigger_id\",\n \"display_name\": \"display_name\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"eb7071fc-50a8-4dc9-a79d-ce47e23d4637","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"677bf282-a2a0-4bc7-a065-b5de9e248673","name":"Update trigger bindings - default","request":{"urlPathTemplate":"/actions/triggers/{triggerId}/bindings","method":"PATCH","pathParameters":{"triggerId":{"equalTo":"triggerId"}}},"response":{"status":200,"body":"{\n \"bindings\": [\n {\n \"id\": \"id\",\n \"trigger_id\": \"trigger_id\",\n \"display_name\": \"display_name\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"677bf282-a2a0-4bc7-a065-b5de9e248673","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"858c0df0-350f-4619-8960-6f774c0f234a","name":"Check if an IP address is blocked - default","request":{"urlPathTemplate":"/anomaly/blocks/ips/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"858c0df0-350f-4619-8960-6f774c0f234a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3c386455-0d8c-4edf-a027-a4ac0ff2e391","name":"Remove the blocked IP address - default","request":{"urlPathTemplate":"/anomaly/blocks/ips/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"3c386455-0d8c-4edf-a027-a4ac0ff2e391","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"80b1e16c-5284-48f9-9802-ff189fca3b63","name":"Get Bot Detection settings - default","request":{"urlPathTemplate":"/attack-protection/bot-detection","method":"GET"},"response":{"status":200,"body":"{\n \"bot_detection_level\": \"low\",\n \"challenge_password_policy\": \"never\",\n \"challenge_passwordless_policy\": \"never\",\n \"challenge_password_reset_policy\": \"never\",\n \"allowlist\": [\n \"allowlist\"\n ],\n \"monitoring_mode_enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"80b1e16c-5284-48f9-9802-ff189fca3b63","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"bf92fa51-631d-42ef-bf27-8161f3bcab37","name":"Update Bot Detection settings - default","request":{"urlPathTemplate":"/attack-protection/bot-detection","method":"PATCH"},"response":{"status":200,"body":"{\n \"bot_detection_level\": \"low\",\n \"challenge_password_policy\": \"never\",\n \"challenge_passwordless_policy\": \"never\",\n \"challenge_password_reset_policy\": \"never\",\n \"allowlist\": [\n \"allowlist\"\n ],\n \"monitoring_mode_enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"bf92fa51-631d-42ef-bf27-8161f3bcab37","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3ecb5fd3-5290-46e1-80da-bbdc282e2e86","name":"Get Breached Password Detection settings - default","request":{"urlPathTemplate":"/attack-protection/breached-password-detection","method":"GET"},"response":{"status":200,"body":"{\n \"enabled\": true,\n \"shields\": [\n \"block\"\n ],\n \"admin_notification_frequency\": [\n \"immediately\"\n ],\n \"method\": \"standard\",\n \"stage\": {\n \"pre-user-registration\": {\n \"shields\": [\n \"block\"\n ]\n },\n \"pre-change-password\": {\n \"shields\": [\n \"block\"\n ]\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"3ecb5fd3-5290-46e1-80da-bbdc282e2e86","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"7f0c04d7-e36a-49ce-af70-af9df4825f56","name":"Update Breached Password Detection settings - default","request":{"urlPathTemplate":"/attack-protection/breached-password-detection","method":"PATCH"},"response":{"status":200,"body":"{\n \"enabled\": true,\n \"shields\": [\n \"block\"\n ],\n \"admin_notification_frequency\": [\n \"immediately\"\n ],\n \"method\": \"standard\",\n \"stage\": {\n \"pre-user-registration\": {\n \"shields\": [\n \"block\"\n ]\n },\n \"pre-change-password\": {\n \"shields\": [\n \"block\"\n ]\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"7f0c04d7-e36a-49ce-af70-af9df4825f56","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"7870c330-d1c9-4a9f-9745-40e1d8b2d0ac","name":"Get Brute-force settings - default","request":{"urlPathTemplate":"/attack-protection/brute-force-protection","method":"GET"},"response":{"status":200,"body":"{\n \"enabled\": true,\n \"shields\": [\n \"block\"\n ],\n \"allowlist\": [\n \"allowlist\"\n ],\n \"mode\": \"count_per_identifier_and_ip\",\n \"max_attempts\": 1\n}","headers":{"Content-Type":"application/json"}},"uuid":"7870c330-d1c9-4a9f-9745-40e1d8b2d0ac","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"23e440e9-0ef4-4ec5-96f3-0b4d84085d92","name":"Update Brute-force settings - default","request":{"urlPathTemplate":"/attack-protection/brute-force-protection","method":"PATCH"},"response":{"status":200,"body":"{\n \"enabled\": true,\n \"shields\": [\n \"block\"\n ],\n \"allowlist\": [\n \"allowlist\"\n ],\n \"mode\": \"count_per_identifier_and_ip\",\n \"max_attempts\": 1\n}","headers":{"Content-Type":"application/json"}},"uuid":"23e440e9-0ef4-4ec5-96f3-0b4d84085d92","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1cfbbf1e-0b0a-4d9e-bfe5-8d796adbfb34","name":"Get the CAPTCHA configuration for a tenant - default","request":{"urlPathTemplate":"/attack-protection/captcha","method":"GET"},"response":{"status":200,"body":"{\n \"active_provider_id\": \"active_provider_id\",\n \"arkose\": {\n \"site_key\": \"site_key\",\n \"fail_open\": true,\n \"client_subdomain\": \"client_subdomain\",\n \"verify_subdomain\": \"verify_subdomain\"\n },\n \"auth_challenge\": {\n \"fail_open\": true\n },\n \"hcaptcha\": {\n \"site_key\": \"site_key\"\n },\n \"friendly_captcha\": {\n \"site_key\": \"site_key\"\n },\n \"recaptcha_enterprise\": {\n \"site_key\": \"site_key\",\n \"project_id\": \"project_id\"\n },\n \"recaptcha_v2\": {\n \"site_key\": \"site_key\"\n },\n \"simple_captcha\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"1cfbbf1e-0b0a-4d9e-bfe5-8d796adbfb34","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"c8a6243c-e0ad-49f2-8b47-405276a8ae5e","name":"Partial Update for CAPTCHA Configuration - default","request":{"urlPathTemplate":"/attack-protection/captcha","method":"PATCH"},"response":{"status":200,"body":"{\n \"active_provider_id\": \"active_provider_id\",\n \"arkose\": {\n \"site_key\": \"site_key\",\n \"fail_open\": true,\n \"client_subdomain\": \"client_subdomain\",\n \"verify_subdomain\": \"verify_subdomain\"\n },\n \"auth_challenge\": {\n \"fail_open\": true\n },\n \"hcaptcha\": {\n \"site_key\": \"site_key\"\n },\n \"friendly_captcha\": {\n \"site_key\": \"site_key\"\n },\n \"recaptcha_enterprise\": {\n \"site_key\": \"site_key\",\n \"project_id\": \"project_id\"\n },\n \"recaptcha_v2\": {\n \"site_key\": \"site_key\"\n },\n \"simple_captcha\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"c8a6243c-e0ad-49f2-8b47-405276a8ae5e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a3ae14b8-1582-4cae-bb51-84b1d3b3fccf","name":"Get Suspicious IP Throttling settings - default","request":{"urlPathTemplate":"/attack-protection/suspicious-ip-throttling","method":"GET"},"response":{"status":200,"body":"{\n \"enabled\": true,\n \"shields\": [\n \"block\"\n ],\n \"allowlist\": [\n \"allowlist\"\n ],\n \"stage\": {\n \"pre-login\": {\n \"max_attempts\": 1,\n \"rate\": 1\n },\n \"pre-user-registration\": {\n \"max_attempts\": 1,\n \"rate\": 1\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"a3ae14b8-1582-4cae-bb51-84b1d3b3fccf","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"119c9fe7-b349-4ad0-8846-3e6be6a9661e","name":"Update Suspicious IP Throttling settings - default","request":{"urlPathTemplate":"/attack-protection/suspicious-ip-throttling","method":"PATCH"},"response":{"status":200,"body":"{\n \"enabled\": true,\n \"shields\": [\n \"block\"\n ],\n \"allowlist\": [\n \"allowlist\"\n ],\n \"stage\": {\n \"pre-login\": {\n \"max_attempts\": 1,\n \"rate\": 1\n },\n \"pre-user-registration\": {\n \"max_attempts\": 1,\n \"rate\": 1\n }\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"119c9fe7-b349-4ad0-8846-3e6be6a9661e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"bdf661b2-3819-41c2-98f8-4b9137f67189","name":"Get template for New Universal Login Experience - default","request":{"urlPathTemplate":"/branding/templates/universal-login","method":"GET"},"response":{"status":200,"body":"{\n \"body\": \"body\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"bdf661b2-3819-41c2-98f8-4b9137f67189","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"44f5b8dc-7d64-47a1-8889-79cda94f7809","name":"Set template for New Universal Login Experience - default","request":{"urlPathTemplate":"/branding/templates/universal-login","method":"PUT"},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"44f5b8dc-7d64-47a1-8889-79cda94f7809","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c2b51bd9-187b-466d-8fe6-68a2eb02e00f","name":"Delete template for New Universal Login Experience - default","request":{"urlPathTemplate":"/branding/templates/universal-login","method":"DELETE"},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"c2b51bd9-187b-466d-8fe6-68a2eb02e00f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2c7a5627-a851-4881-9e60-689c81a3122b","name":"Create branding theme - default","request":{"urlPathTemplate":"/branding/themes","method":"POST"},"response":{"status":200,"body":"{\n \"borders\": {\n \"button_border_radius\": 1.1,\n \"button_border_weight\": 1.1,\n \"buttons_style\": \"pill\",\n \"input_border_radius\": 1.1,\n \"input_border_weight\": 1.1,\n \"inputs_style\": \"pill\",\n \"show_widget_shadow\": true,\n \"widget_border_weight\": 1.1,\n \"widget_corner_radius\": 1.1\n },\n \"colors\": {\n \"base_focus_color\": \"base_focus_color\",\n \"base_hover_color\": \"base_hover_color\",\n \"body_text\": \"body_text\",\n \"captcha_widget_theme\": \"auto\",\n \"error\": \"error\",\n \"header\": \"header\",\n \"icons\": \"icons\",\n \"input_background\": \"input_background\",\n \"input_border\": \"input_border\",\n \"input_filled_text\": \"input_filled_text\",\n \"input_labels_placeholders\": \"input_labels_placeholders\",\n \"links_focused_components\": \"links_focused_components\",\n \"primary_button\": \"primary_button\",\n \"primary_button_label\": \"primary_button_label\",\n \"read_only_background\": \"read_only_background\",\n \"secondary_button_border\": \"secondary_button_border\",\n \"secondary_button_label\": \"secondary_button_label\",\n \"success\": \"success\",\n \"widget_background\": \"widget_background\",\n \"widget_border\": \"widget_border\"\n },\n \"displayName\": \"displayName\",\n \"fonts\": {\n \"body_text\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"buttons_text\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"font_url\": \"font_url\",\n \"input_labels\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"links\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"links_style\": \"normal\",\n \"reference_text_size\": 1.1,\n \"subtitle\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"title\": {\n \"bold\": true,\n \"size\": 1.1\n }\n },\n \"page_background\": {\n \"background_color\": \"background_color\",\n \"background_image_url\": \"background_image_url\",\n \"page_layout\": \"center\"\n },\n \"themeId\": \"themeId\",\n \"widget\": {\n \"header_text_alignment\": \"center\",\n \"logo_height\": 1.1,\n \"logo_position\": \"center\",\n \"logo_url\": \"logo_url\",\n \"social_buttons_layout\": \"bottom\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"2c7a5627-a851-4881-9e60-689c81a3122b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"91d16fa4-7e8b-4de2-aa78-061a5267295b","name":"Get default branding theme - default","request":{"urlPathTemplate":"/branding/themes/default","method":"GET"},"response":{"status":200,"body":"{\n \"borders\": {\n \"button_border_radius\": 1.1,\n \"button_border_weight\": 1.1,\n \"buttons_style\": \"pill\",\n \"input_border_radius\": 1.1,\n \"input_border_weight\": 1.1,\n \"inputs_style\": \"pill\",\n \"show_widget_shadow\": true,\n \"widget_border_weight\": 1.1,\n \"widget_corner_radius\": 1.1\n },\n \"colors\": {\n \"base_focus_color\": \"base_focus_color\",\n \"base_hover_color\": \"base_hover_color\",\n \"body_text\": \"body_text\",\n \"captcha_widget_theme\": \"auto\",\n \"error\": \"error\",\n \"header\": \"header\",\n \"icons\": \"icons\",\n \"input_background\": \"input_background\",\n \"input_border\": \"input_border\",\n \"input_filled_text\": \"input_filled_text\",\n \"input_labels_placeholders\": \"input_labels_placeholders\",\n \"links_focused_components\": \"links_focused_components\",\n \"primary_button\": \"primary_button\",\n \"primary_button_label\": \"primary_button_label\",\n \"read_only_background\": \"read_only_background\",\n \"secondary_button_border\": \"secondary_button_border\",\n \"secondary_button_label\": \"secondary_button_label\",\n \"success\": \"success\",\n \"widget_background\": \"widget_background\",\n \"widget_border\": \"widget_border\"\n },\n \"displayName\": \"displayName\",\n \"fonts\": {\n \"body_text\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"buttons_text\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"font_url\": \"font_url\",\n \"input_labels\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"links\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"links_style\": \"normal\",\n \"reference_text_size\": 1.1,\n \"subtitle\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"title\": {\n \"bold\": true,\n \"size\": 1.1\n }\n },\n \"page_background\": {\n \"background_color\": \"background_color\",\n \"background_image_url\": \"background_image_url\",\n \"page_layout\": \"center\"\n },\n \"themeId\": \"themeId\",\n \"widget\": {\n \"header_text_alignment\": \"center\",\n \"logo_height\": 1.1,\n \"logo_position\": \"center\",\n \"logo_url\": \"logo_url\",\n \"social_buttons_layout\": \"bottom\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"91d16fa4-7e8b-4de2-aa78-061a5267295b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"f102da1c-5323-41ec-b320-888d05f069b8","name":"Get branding theme - default","request":{"urlPathTemplate":"/branding/themes/{themeId}","method":"GET","pathParameters":{"themeId":{"equalTo":"themeId"}}},"response":{"status":200,"body":"{\n \"borders\": {\n \"button_border_radius\": 1.1,\n \"button_border_weight\": 1.1,\n \"buttons_style\": \"pill\",\n \"input_border_radius\": 1.1,\n \"input_border_weight\": 1.1,\n \"inputs_style\": \"pill\",\n \"show_widget_shadow\": true,\n \"widget_border_weight\": 1.1,\n \"widget_corner_radius\": 1.1\n },\n \"colors\": {\n \"base_focus_color\": \"base_focus_color\",\n \"base_hover_color\": \"base_hover_color\",\n \"body_text\": \"body_text\",\n \"captcha_widget_theme\": \"auto\",\n \"error\": \"error\",\n \"header\": \"header\",\n \"icons\": \"icons\",\n \"input_background\": \"input_background\",\n \"input_border\": \"input_border\",\n \"input_filled_text\": \"input_filled_text\",\n \"input_labels_placeholders\": \"input_labels_placeholders\",\n \"links_focused_components\": \"links_focused_components\",\n \"primary_button\": \"primary_button\",\n \"primary_button_label\": \"primary_button_label\",\n \"read_only_background\": \"read_only_background\",\n \"secondary_button_border\": \"secondary_button_border\",\n \"secondary_button_label\": \"secondary_button_label\",\n \"success\": \"success\",\n \"widget_background\": \"widget_background\",\n \"widget_border\": \"widget_border\"\n },\n \"displayName\": \"displayName\",\n \"fonts\": {\n \"body_text\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"buttons_text\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"font_url\": \"font_url\",\n \"input_labels\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"links\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"links_style\": \"normal\",\n \"reference_text_size\": 1.1,\n \"subtitle\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"title\": {\n \"bold\": true,\n \"size\": 1.1\n }\n },\n \"page_background\": {\n \"background_color\": \"background_color\",\n \"background_image_url\": \"background_image_url\",\n \"page_layout\": \"center\"\n },\n \"themeId\": \"themeId\",\n \"widget\": {\n \"header_text_alignment\": \"center\",\n \"logo_height\": 1.1,\n \"logo_position\": \"center\",\n \"logo_url\": \"logo_url\",\n \"social_buttons_layout\": \"bottom\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"f102da1c-5323-41ec-b320-888d05f069b8","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"215eeb29-68c9-4243-857e-d87a7c62795f","name":"Delete branding theme - default","request":{"urlPathTemplate":"/branding/themes/{themeId}","method":"DELETE","pathParameters":{"themeId":{"equalTo":"themeId"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"215eeb29-68c9-4243-857e-d87a7c62795f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2dbbd929-7e98-438f-8310-2500cb90f70c","name":"Update branding theme - default","request":{"urlPathTemplate":"/branding/themes/{themeId}","method":"PATCH","pathParameters":{"themeId":{"equalTo":"themeId"}}},"response":{"status":200,"body":"{\n \"borders\": {\n \"button_border_radius\": 1.1,\n \"button_border_weight\": 1.1,\n \"buttons_style\": \"pill\",\n \"input_border_radius\": 1.1,\n \"input_border_weight\": 1.1,\n \"inputs_style\": \"pill\",\n \"show_widget_shadow\": true,\n \"widget_border_weight\": 1.1,\n \"widget_corner_radius\": 1.1\n },\n \"colors\": {\n \"base_focus_color\": \"base_focus_color\",\n \"base_hover_color\": \"base_hover_color\",\n \"body_text\": \"body_text\",\n \"captcha_widget_theme\": \"auto\",\n \"error\": \"error\",\n \"header\": \"header\",\n \"icons\": \"icons\",\n \"input_background\": \"input_background\",\n \"input_border\": \"input_border\",\n \"input_filled_text\": \"input_filled_text\",\n \"input_labels_placeholders\": \"input_labels_placeholders\",\n \"links_focused_components\": \"links_focused_components\",\n \"primary_button\": \"primary_button\",\n \"primary_button_label\": \"primary_button_label\",\n \"read_only_background\": \"read_only_background\",\n \"secondary_button_border\": \"secondary_button_border\",\n \"secondary_button_label\": \"secondary_button_label\",\n \"success\": \"success\",\n \"widget_background\": \"widget_background\",\n \"widget_border\": \"widget_border\"\n },\n \"displayName\": \"displayName\",\n \"fonts\": {\n \"body_text\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"buttons_text\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"font_url\": \"font_url\",\n \"input_labels\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"links\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"links_style\": \"normal\",\n \"reference_text_size\": 1.1,\n \"subtitle\": {\n \"bold\": true,\n \"size\": 1.1\n },\n \"title\": {\n \"bold\": true,\n \"size\": 1.1\n }\n },\n \"page_background\": {\n \"background_color\": \"background_color\",\n \"background_image_url\": \"background_image_url\",\n \"page_layout\": \"center\"\n },\n \"themeId\": \"themeId\",\n \"widget\": {\n \"header_text_alignment\": \"center\",\n \"logo_height\": 1.1,\n \"logo_position\": \"center\",\n \"logo_url\": \"logo_url\",\n \"social_buttons_layout\": \"bottom\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"2dbbd929-7e98-438f-8310-2500cb90f70c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"520b4b30-1317-42da-89bf-a0491d1694b6","name":"Get a list of phone providers - default","request":{"urlPathTemplate":"/branding/phone/providers","method":"GET"},"response":{"status":200,"body":"{\n \"providers\": [\n {\n \"id\": \"id\",\n \"tenant\": \"tenant\",\n \"name\": \"twilio\",\n \"channel\": \"phone\",\n \"disabled\": true,\n \"configuration\": {\n \"sid\": \"sid\",\n \"delivery_methods\": [\n \"text\"\n ]\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"520b4b30-1317-42da-89bf-a0491d1694b6","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"be5761ff-7af6-40ca-95bb-4fdc3bf8eb00","name":"Configure the phone provider - default","request":{"urlPathTemplate":"/branding/phone/providers","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"tenant\": \"tenant\",\n \"name\": \"twilio\",\n \"channel\": \"phone\",\n \"disabled\": true,\n \"configuration\": {\n \"default_from\": \"default_from\",\n \"mssid\": \"mssid\",\n \"sid\": \"sid\",\n \"delivery_methods\": [\n \"text\"\n ]\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"be5761ff-7af6-40ca-95bb-4fdc3bf8eb00","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"8c639058-4844-47c5-8ad8-c0ccd33399bb","name":"Get a phone provider - default","request":{"urlPathTemplate":"/branding/phone/providers/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"tenant\": \"tenant\",\n \"name\": \"twilio\",\n \"channel\": \"phone\",\n \"disabled\": true,\n \"configuration\": {\n \"default_from\": \"default_from\",\n \"mssid\": \"mssid\",\n \"sid\": \"sid\",\n \"delivery_methods\": [\n \"text\"\n ]\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"8c639058-4844-47c5-8ad8-c0ccd33399bb","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a6175428-056a-47f4-b776-4dcf8260822c","name":"Deletes a Phone Provider - default","request":{"urlPathTemplate":"/branding/phone/providers/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"a6175428-056a-47f4-b776-4dcf8260822c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"95edda2c-d9d9-4854-9130-044ebb441bd7","name":"Update the phone provider - default","request":{"urlPathTemplate":"/branding/phone/providers/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"tenant\": \"tenant\",\n \"name\": \"twilio\",\n \"channel\": \"phone\",\n \"disabled\": true,\n \"configuration\": {\n \"default_from\": \"default_from\",\n \"mssid\": \"mssid\",\n \"sid\": \"sid\",\n \"delivery_methods\": [\n \"text\"\n ]\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"95edda2c-d9d9-4854-9130-044ebb441bd7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"eced0fdd-3915-430a-8c28-1161ab6a3313","name":"Send a test phone notification for the configured provider - default","request":{"urlPathTemplate":"/branding/phone/providers/{id}/try","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":202,"body":"{\n \"code\": 1.1,\n \"message\": \"message\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"eced0fdd-3915-430a-8c28-1161ab6a3313","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"927ee9f5-34f7-4b77-83bf-5eb0b1a61e2d","name":"Get a list of phone notification templates - default","request":{"urlPathTemplate":"/branding/phone/templates","method":"GET"},"response":{"status":200,"body":"{\n \"templates\": [\n {\n \"id\": \"id\",\n \"channel\": \"channel\",\n \"customizable\": true,\n \"tenant\": \"tenant\",\n \"content\": {},\n \"type\": \"otp_verify\",\n \"disabled\": true\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"927ee9f5-34f7-4b77-83bf-5eb0b1a61e2d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"300d3eb8-52bc-4001-8af4-a0594f4242d9","name":"Create a phone notification template - default","request":{"urlPathTemplate":"/branding/phone/templates","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"channel\": \"channel\",\n \"customizable\": true,\n \"tenant\": \"tenant\",\n \"content\": {\n \"syntax\": \"syntax\",\n \"from\": \"from\",\n \"body\": {\n \"text\": \"text\",\n \"voice\": \"voice\"\n }\n },\n \"type\": \"otp_verify\",\n \"disabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"300d3eb8-52bc-4001-8af4-a0594f4242d9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"76aa966c-5fbe-4a23-a2a4-7cbf13eb043c","name":"Get a phone notification template - default","request":{"urlPathTemplate":"/branding/phone/templates/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"channel\": \"channel\",\n \"customizable\": true,\n \"tenant\": \"tenant\",\n \"content\": {\n \"syntax\": \"syntax\",\n \"from\": \"from\",\n \"body\": {\n \"text\": \"text\",\n \"voice\": \"voice\"\n }\n },\n \"type\": \"otp_verify\",\n \"disabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"76aa966c-5fbe-4a23-a2a4-7cbf13eb043c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"97c15733-1abd-4f5e-8eda-3dc1b372e0ec","name":"Delete a phone notification template - default","request":{"urlPathTemplate":"/branding/phone/templates/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"97c15733-1abd-4f5e-8eda-3dc1b372e0ec","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2e4c517e-f1d0-4252-bfea-7b6342825fba","name":"Update a phone notification template - default","request":{"urlPathTemplate":"/branding/phone/templates/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"channel\": \"channel\",\n \"customizable\": true,\n \"tenant\": \"tenant\",\n \"content\": {\n \"syntax\": \"syntax\",\n \"from\": \"from\",\n \"body\": {\n \"text\": \"text\",\n \"voice\": \"voice\"\n }\n },\n \"type\": \"otp_verify\",\n \"disabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"2e4c517e-f1d0-4252-bfea-7b6342825fba","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"7d7a4ccb-4b23-4fb0-813d-9f0eef8f6ed4","name":"Resets a phone notification template values - default","request":{"urlPathTemplate":"/branding/phone/templates/{id}/reset","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"x\",\n \"channel\": \"channel\",\n \"customizable\": true,\n \"tenant\": \"x\",\n \"content\": {\n \"syntax\": \"syntax\",\n \"from\": \"x\",\n \"body\": {\n \"text\": \"x\",\n \"voice\": \"x\"\n }\n },\n \"type\": \"otp_verify\",\n \"disabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"7d7a4ccb-4b23-4fb0-813d-9f0eef8f6ed4","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0d9ba799-020f-40db-86d6-08de485ad618","name":"Send a test phone notification for the configured template - default","request":{"urlPathTemplate":"/branding/phone/templates/{id}/try","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":202,"body":"{\n \"message\": \"message\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"0d9ba799-020f-40db-86d6-08de485ad618","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"f3b442cc-02a6-4c76-9a8f-3c3bd4c6efde","name":"Get the organizations associated to a client grant - default","request":{"urlPathTemplate":"/client-grants/{id}/organizations","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"organizations\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"token_quota\": {\n \"client_credentials\": {}\n }\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"f3b442cc-02a6-4c76-9a8f-3c3bd4c6efde","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"318739d6-2060-4406-9548-e1dca9fc9306","name":"Get client credentials - default","request":{"urlPathTemplate":"/clients/{client_id}/credentials","method":"GET","pathParameters":{"client_id":{"equalTo":"client_id"}}},"response":{"status":200,"body":"[\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"kid\": \"kid\",\n \"alg\": \"RS256\",\n \"credential_type\": \"public_key\",\n \"subject_dn\": \"subject_dn\",\n \"thumbprint_sha256\": \"thumbprint_sha256\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"318739d6-2060-4406-9548-e1dca9fc9306","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e1b4ce2a-40cd-428d-98c4-4fe2c4dfb358","name":"Create a client credential - default","request":{"urlPathTemplate":"/clients/{client_id}/credentials","method":"POST","pathParameters":{"client_id":{"equalTo":"client_id"}}},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"kid\": \"kid\",\n \"alg\": \"RS256\",\n \"credential_type\": \"public_key\",\n \"subject_dn\": \"subject_dn\",\n \"thumbprint_sha256\": \"thumbprint_sha256\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"e1b4ce2a-40cd-428d-98c4-4fe2c4dfb358","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"84fb49da-5fa4-4f09-8176-cf14ff179829","name":"Get client credential details - default","request":{"urlPathTemplate":"/clients/{client_id}/credentials/{credential_id}","method":"GET","pathParameters":{"client_id":{"equalTo":"client_id"},"credential_id":{"equalTo":"credential_id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"kid\": \"kid\",\n \"alg\": \"RS256\",\n \"credential_type\": \"public_key\",\n \"subject_dn\": \"subject_dn\",\n \"thumbprint_sha256\": \"thumbprint_sha256\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"84fb49da-5fa4-4f09-8176-cf14ff179829","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"ac24c006-0300-485b-b881-9bfd0a38c4aa","name":"Delete a client credential - default","request":{"urlPathTemplate":"/clients/{client_id}/credentials/{credential_id}","method":"DELETE","pathParameters":{"client_id":{"equalTo":"client_id"},"credential_id":{"equalTo":"credential_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"ac24c006-0300-485b-b881-9bfd0a38c4aa","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c820cce1-37c3-4aa6-8700-119563b70d23","name":"Update a client credential - default","request":{"urlPathTemplate":"/clients/{client_id}/credentials/{credential_id}","method":"PATCH","pathParameters":{"client_id":{"equalTo":"client_id"},"credential_id":{"equalTo":"credential_id"}}},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"kid\": \"kid\",\n \"alg\": \"RS256\",\n \"credential_type\": \"public_key\",\n \"subject_dn\": \"subject_dn\",\n \"thumbprint_sha256\": \"thumbprint_sha256\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"c820cce1-37c3-4aa6-8700-119563b70d23","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"324ddd4f-5b97-4bf3-8c51-91ad2c931c47","name":"Get enabled connections for a client - default","request":{"urlPathTemplate":"/clients/{id}/connections","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"connections\": [\n {\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"options\": {\n \"key\": \"value\"\n },\n \"id\": \"id\",\n \"strategy\": \"strategy\",\n \"realms\": [\n \"realms\"\n ],\n \"is_domain_connection\": true,\n \"show_as_button\": true,\n \"authentication\": {\n \"active\": true\n },\n \"connected_accounts\": {\n \"active\": true\n }\n }\n ],\n \"next\": \"next\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"324ddd4f-5b97-4bf3-8c51-91ad2c931c47","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4cda0987-d608-47ba-b465-245ecfaabb90","name":"Get enabled clients for a connection - default","request":{"urlPathTemplate":"/connections/{id}/clients","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"clients\": [\n {\n \"client_id\": \"client_id\"\n }\n ],\n \"next\": \"next\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"4cda0987-d608-47ba-b465-245ecfaabb90","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0c56da15-4d9a-470c-9fcd-64f2c04dd3d3","name":"Update enabled clients for a connection - default","request":{"urlPathTemplate":"/connections/{id}/clients","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"0c56da15-4d9a-470c-9fcd-64f2c04dd3d3","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"feeddf21-212e-4dbc-a0eb-4a922ec0341b","name":"Get a directory provisioning configuration - default","request":{"urlPathTemplate":"/connections/{id}/directory-provisioning","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"connection_id\": \"connection_id\",\n \"connection_name\": \"connection_name\",\n \"strategy\": \"strategy\",\n \"mapping\": [\n {\n \"auth0\": \"auth0\",\n \"idp\": \"idp\"\n }\n ],\n \"synchronize_automatically\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"last_synchronization_at\": \"2024-01-15T09:30:00Z\",\n \"last_synchronization_status\": \"last_synchronization_status\",\n \"last_synchronization_error\": \"last_synchronization_error\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"feeddf21-212e-4dbc-a0eb-4a922ec0341b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3cfd3977-6fa4-44df-bdf3-78fee867315a","name":"Create a directory provisioning configuration - default","request":{"urlPathTemplate":"/connections/{id}/directory-provisioning","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"connection_id\": \"connection_id\",\n \"connection_name\": \"connection_name\",\n \"strategy\": \"strategy\",\n \"mapping\": [\n {\n \"auth0\": \"auth0\",\n \"idp\": \"idp\"\n }\n ],\n \"synchronize_automatically\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"last_synchronization_at\": \"2024-01-15T09:30:00Z\",\n \"last_synchronization_status\": \"last_synchronization_status\",\n \"last_synchronization_error\": \"last_synchronization_error\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"3cfd3977-6fa4-44df-bdf3-78fee867315a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2ee66349-1719-45a8-bbbc-65b8e4e783a3","name":"Delete a directory provisioning configuration - default","request":{"urlPathTemplate":"/connections/{id}/directory-provisioning","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"2ee66349-1719-45a8-bbbc-65b8e4e783a3","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"738a6f0e-a176-48c6-ac5b-1bcc67bc8656","name":"Patch a directory provisioning configuration - default","request":{"urlPathTemplate":"/connections/{id}/directory-provisioning","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"connection_id\": \"connection_id\",\n \"connection_name\": \"connection_name\",\n \"strategy\": \"strategy\",\n \"mapping\": [\n {\n \"auth0\": \"auth0\",\n \"idp\": \"idp\"\n }\n ],\n \"synchronize_automatically\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"last_synchronization_at\": \"2024-01-15T09:30:00Z\",\n \"last_synchronization_status\": \"last_synchronization_status\",\n \"last_synchronization_error\": \"last_synchronization_error\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"738a6f0e-a176-48c6-ac5b-1bcc67bc8656","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"181a029d-c4d1-4386-8c0d-4e517aea7579","name":"Get a connection's default directory provisioning attribute mapping - default","request":{"urlPathTemplate":"/connections/{id}/directory-provisioning/default-mapping","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"mapping\": [\n {\n \"auth0\": \"auth0\",\n \"idp\": \"idp\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"181a029d-c4d1-4386-8c0d-4e517aea7579","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"bf72570e-1315-4eaa-8145-3f400d3eccf0","name":"Get connection keys - default","request":{"urlPathTemplate":"/connections/{id}/keys","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"[\n {\n \"kid\": \"kid\",\n \"cert\": \"cert\",\n \"pkcs\": \"pkcs\",\n \"current\": true,\n \"next\": true,\n \"previous\": true,\n \"current_since\": \"current_since\",\n \"fingerprint\": \"fingerprint\",\n \"thumbprint\": \"thumbprint\",\n \"algorithm\": \"algorithm\",\n \"key_use\": \"encryption\",\n \"subject_dn\": \"subject_dn\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"bf72570e-1315-4eaa-8145-3f400d3eccf0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b11a1483-99df-4d6a-ace7-cb55bf35ba34","name":"Rotate connection keys - default","request":{"urlPathTemplate":"/connections/{id}/keys/rotate","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"kid\": \"kid\",\n \"cert\": \"cert\",\n \"pkcs\": \"pkcs\",\n \"next\": true,\n \"fingerprint\": \"fingerprint\",\n \"thumbprint\": \"thumbprint\",\n \"algorithm\": \"algorithm\",\n \"key_use\": \"encryption\",\n \"subject_dn\": \"subject_dn\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"b11a1483-99df-4d6a-ace7-cb55bf35ba34","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"30a0fe58-a2bc-4645-9d9e-c1ca9f8c3e2f","name":"Get a connection's SCIM configuration - default","request":{"urlPathTemplate":"/connections/{id}/scim-configuration","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"connection_id\": \"connection_id\",\n \"connection_name\": \"connection_name\",\n \"strategy\": \"strategy\",\n \"tenant_name\": \"tenant_name\",\n \"user_id_attribute\": \"user_id_attribute\",\n \"mapping\": [\n {\n \"auth0\": \"auth0\",\n \"scim\": \"scim\"\n }\n ],\n \"created_at\": \"created_at\",\n \"updated_on\": \"updated_on\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"30a0fe58-a2bc-4645-9d9e-c1ca9f8c3e2f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"45f92e80-8b92-4937-b29b-76fac22cf624","name":"Create a SCIM configuration - default","request":{"urlPathTemplate":"/connections/{id}/scim-configuration","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"connection_id\": \"connection_id\",\n \"connection_name\": \"connection_name\",\n \"strategy\": \"strategy\",\n \"tenant_name\": \"tenant_name\",\n \"user_id_attribute\": \"user_id_attribute\",\n \"mapping\": [\n {\n \"auth0\": \"auth0\",\n \"scim\": \"scim\"\n }\n ],\n \"created_at\": \"created_at\",\n \"updated_on\": \"updated_on\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"45f92e80-8b92-4937-b29b-76fac22cf624","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c9239c3d-f534-4c1d-a05e-64c0785f569a","name":"Delete a connection's SCIM configuration - default","request":{"urlPathTemplate":"/connections/{id}/scim-configuration","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"c9239c3d-f534-4c1d-a05e-64c0785f569a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d298cb6d-3c6a-4510-a78c-556fad17fd65","name":"Patch a connection's SCIM configuration - default","request":{"urlPathTemplate":"/connections/{id}/scim-configuration","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"connection_id\": \"connection_id\",\n \"connection_name\": \"connection_name\",\n \"strategy\": \"strategy\",\n \"tenant_name\": \"tenant_name\",\n \"user_id_attribute\": \"user_id_attribute\",\n \"mapping\": [\n {\n \"auth0\": \"auth0\",\n \"scim\": \"scim\"\n }\n ],\n \"created_at\": \"created_at\",\n \"updated_on\": \"updated_on\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"d298cb6d-3c6a-4510-a78c-556fad17fd65","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4cc31df0-e4df-450c-9fac-16b9c893e9fa","name":"Get a connection's default SCIM mapping - default","request":{"urlPathTemplate":"/connections/{id}/scim-configuration/default-mapping","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"mapping\": [\n {\n \"auth0\": \"auth0\",\n \"scim\": \"scim\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"4cc31df0-e4df-450c-9fac-16b9c893e9fa","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1d0cb62f-340c-4168-bd90-0fa1ba032e3a","name":"Delete a connection user - default","request":{"urlPathTemplate":"/connections/{id}/users","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"1d0cb62f-340c-4168-bd90-0fa1ba032e3a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"175c0550-405b-4cd6-b498-6501a695ed33","name":"Request an on-demand synchronization of the directory - default","request":{"urlPathTemplate":"/connections/{id}/directory-provisioning/synchronizations","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"connection_id\": \"connection_id\",\n \"synchronization_id\": \"synchronization_id\",\n \"status\": \"status\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"175c0550-405b-4cd6-b498-6501a695ed33","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"58eab082-4eda-42df-9764-ed787b38df1e","name":"Get a connection's SCIM tokens - default","request":{"urlPathTemplate":"/connections/{id}/scim-configuration/tokens","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"[\n {\n \"token_id\": \"token_id\",\n \"scopes\": [\n \"scopes\"\n ],\n \"created_at\": \"created_at\",\n \"valid_until\": \"valid_until\",\n \"last_used_at\": \"last_used_at\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"58eab082-4eda-42df-9764-ed787b38df1e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b55da7ed-453d-4799-b895-796f72020abb","name":"Create a SCIM Token - default","request":{"urlPathTemplate":"/connections/{id}/scim-configuration/tokens","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"token_id\": \"token_id\",\n \"token\": \"token\",\n \"scopes\": [\n \"scopes\"\n ],\n \"created_at\": \"created_at\",\n \"valid_until\": \"valid_until\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"b55da7ed-453d-4799-b895-796f72020abb","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e0eaabd0-7ebe-4b89-90e6-f0c7b43be7c9","name":"Delete a connection's SCIM token - default","request":{"urlPathTemplate":"/connections/{id}/scim-configuration/tokens/{tokenId}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"tokenId":{"equalTo":"tokenId"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"e0eaabd0-7ebe-4b89-90e6-f0c7b43be7c9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"53da06f4-1ed4-4e51-8bb8-0ce04e219464","name":"Get email provider - default","request":{"urlPathTemplate":"/emails/provider","method":"GET"},"response":{"status":200,"body":"{\n \"name\": \"name\",\n \"enabled\": true,\n \"default_from_address\": \"default_from_address\",\n \"credentials\": {\n \"api_user\": \"api_user\",\n \"region\": \"region\",\n \"smtp_host\": \"smtp_host\",\n \"smtp_port\": 1,\n \"smtp_user\": \"smtp_user\"\n },\n \"settings\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"53da06f4-1ed4-4e51-8bb8-0ce04e219464","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"d1a0f535-378f-4200-865f-23ca6cf50b9d","name":"Configure email provider - default","request":{"urlPathTemplate":"/emails/provider","method":"POST"},"response":{"status":201,"body":"{\n \"name\": \"name\",\n \"enabled\": true,\n \"default_from_address\": \"default_from_address\",\n \"credentials\": {\n \"api_user\": \"api_user\",\n \"region\": \"region\",\n \"smtp_host\": \"smtp_host\",\n \"smtp_port\": 1,\n \"smtp_user\": \"smtp_user\"\n },\n \"settings\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"d1a0f535-378f-4200-865f-23ca6cf50b9d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a57ca053-0cf9-416a-9cb3-144e7c5bd4d5","name":"Delete email provider - default","request":{"urlPathTemplate":"/emails/provider","method":"DELETE"},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"a57ca053-0cf9-416a-9cb3-144e7c5bd4d5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"36f2813e-a299-41fd-a6d6-54938ea37a15","name":"Update email provider - default","request":{"urlPathTemplate":"/emails/provider","method":"PATCH"},"response":{"status":200,"body":"{\n \"name\": \"name\",\n \"enabled\": true,\n \"default_from_address\": \"default_from_address\",\n \"credentials\": {\n \"api_user\": \"api_user\",\n \"region\": \"region\",\n \"smtp_host\": \"smtp_host\",\n \"smtp_port\": 1,\n \"smtp_user\": \"smtp_user\"\n },\n \"settings\": {\n \"key\": \"value\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"36f2813e-a299-41fd-a6d6-54938ea37a15","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c3751490-b492-4376-9596-bd7d6f5e8443","name":"Get this event stream's delivery history - default","request":{"urlPathTemplate":"/event-streams/{id}/deliveries","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"[\n {\n \"id\": \"id\",\n \"event_stream_id\": \"event_stream_id\",\n \"status\": \"failed\",\n \"event_type\": \"user.created\",\n \"attempts\": [\n {\n \"status\": \"failed\",\n \"timestamp\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"event\": {\n \"id\": \"id\",\n \"source\": \"source\",\n \"specversion\": \"specversion\",\n \"type\": \"type\",\n \"time\": \"2024-01-15T09:30:00Z\",\n \"data\": \"data\"\n }\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"c3751490-b492-4376-9596-bd7d6f5e8443","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"93fa5cb1-a92c-4b20-8483-814c91175496","name":"Get a specific event's delivery history - default","request":{"urlPathTemplate":"/event-streams/{id}/deliveries/{event_id}","method":"GET","pathParameters":{"id":{"equalTo":"id"},"event_id":{"equalTo":"event_id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"event_stream_id\": \"event_stream_id\",\n \"status\": \"failed\",\n \"event_type\": \"user.created\",\n \"attempts\": [\n {\n \"status\": \"failed\",\n \"timestamp\": \"2024-01-15T09:30:00Z\",\n \"error_message\": \"error_message\"\n }\n ],\n \"event\": {\n \"id\": \"id\",\n \"source\": \"source\",\n \"specversion\": \"specversion\",\n \"type\": \"type\",\n \"time\": \"2024-01-15T09:30:00Z\",\n \"data\": \"data\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"93fa5cb1-a92c-4b20-8483-814c91175496","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"25856d60-9bad-4777-b7f2-7b5e2656b133","name":"Redeliver failed events - default","request":{"urlPathTemplate":"/event-streams/{id}/redeliver","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":202,"body":"{\n \"date_from\": \"2024-01-15T09:30:00Z\",\n \"date_to\": \"2024-01-15T09:30:00Z\",\n \"statuses\": [\n \"failed\"\n ],\n \"event_types\": [\n \"user.created\"\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"25856d60-9bad-4777-b7f2-7b5e2656b133","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"05d8b619-8b8d-41ea-b60f-bea3298d5e33","name":"Redeliver a single failed event by ID - default","request":{"urlPathTemplate":"/event-streams/{id}/redeliver/{event_id}","method":"POST","pathParameters":{"id":{"equalTo":"id"},"event_id":{"equalTo":"event_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"05d8b619-8b8d-41ea-b60f-bea3298d5e33","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"62d121a4-93bc-4281-8659-06708ac8d781","name":"Get flow executions - default","request":{"urlPathTemplate":"/flows/{flow_id}/executions","method":"GET","pathParameters":{"flow_id":{"equalTo":"flow_id"}}},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"executions\": [\n {\n \"id\": \"id\",\n \"trace_id\": \"trace_id\",\n \"journey_id\": \"journey_id\",\n \"status\": \"status\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"started_at\": \"2024-01-15T09:30:00Z\",\n \"ended_at\": \"2024-01-15T09:30:00Z\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"62d121a4-93bc-4281-8659-06708ac8d781","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3151ee0d-c1ca-45b6-9f72-5b4138b4b90d","name":"Get a flow execution - default","request":{"urlPathTemplate":"/flows/{flow_id}/executions/{execution_id}","method":"GET","pathParameters":{"flow_id":{"equalTo":"flow_id"},"execution_id":{"equalTo":"execution_id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"trace_id\": \"trace_id\",\n \"journey_id\": \"journey_id\",\n \"status\": \"status\",\n \"debug\": {\n \"key\": \"value\"\n },\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"started_at\": \"2024-01-15T09:30:00Z\",\n \"ended_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"3151ee0d-c1ca-45b6-9f72-5b4138b4b90d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"9f81cb02-c44f-4e52-a1a3-cc26c0ae01a5","name":"Delete a flow execution - default","request":{"urlPathTemplate":"/flows/{flow_id}/executions/{execution_id}","method":"DELETE","pathParameters":{"flow_id":{"equalTo":"flow_id"},"execution_id":{"equalTo":"execution_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"9f81cb02-c44f-4e52-a1a3-cc26c0ae01a5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"ee40f82d-4bce-4a5a-8cbb-bb5eda1909ee","name":"Get Flows Vault connection list - default","request":{"urlPathTemplate":"/flows/vault/connections","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"connections\": [\n {\n \"id\": \"id\",\n \"app_id\": \"app_id\",\n \"name\": \"name\",\n \"account_name\": \"account_name\",\n \"ready\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"refreshed_at\": \"2024-01-15T09:30:00Z\",\n \"fingerprint\": \"fingerprint\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"ee40f82d-4bce-4a5a-8cbb-bb5eda1909ee","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"b56d64da-174f-4d7e-86e7-3240fb1a8174","name":"Create a Flows Vault connection - default","request":{"urlPathTemplate":"/flows/vault/connections","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"app_id\": \"app_id\",\n \"environment\": \"environment\",\n \"name\": \"name\",\n \"account_name\": \"account_name\",\n \"ready\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"refreshed_at\": \"2024-01-15T09:30:00Z\",\n \"fingerprint\": \"fingerprint\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"b56d64da-174f-4d7e-86e7-3240fb1a8174","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"6cc30ec0-8e30-44ab-b033-e2db27abc3ac","name":"Get a Flows Vault connection - default","request":{"urlPathTemplate":"/flows/vault/connections/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"app_id\": \"app_id\",\n \"environment\": \"environment\",\n \"name\": \"name\",\n \"account_name\": \"account_name\",\n \"ready\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"refreshed_at\": \"2024-01-15T09:30:00Z\",\n \"fingerprint\": \"fingerprint\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"6cc30ec0-8e30-44ab-b033-e2db27abc3ac","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"97e2e46c-2af3-4cf0-b6df-e09cd0f4151a","name":"Delete a Flows Vault connection - default","request":{"urlPathTemplate":"/flows/vault/connections/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"97e2e46c-2af3-4cf0-b6df-e09cd0f4151a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"cdbf8062-2c13-4861-9280-e1ef2af24823","name":"Update a Flows Vault connection - default","request":{"urlPathTemplate":"/flows/vault/connections/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"app_id\": \"app_id\",\n \"environment\": \"environment\",\n \"name\": \"name\",\n \"account_name\": \"account_name\",\n \"ready\": true,\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"refreshed_at\": \"2024-01-15T09:30:00Z\",\n \"fingerprint\": \"fingerprint\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"cdbf8062-2c13-4861-9280-e1ef2af24823","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a2982e98-d69b-4815-a50d-57f1267374d8","name":"Create a multi-factor authentication enrollment ticket - default","request":{"urlPathTemplate":"/guardian/enrollments/ticket","method":"POST"},"response":{"status":200,"body":"{\n \"ticket_id\": \"ticket_id\",\n \"ticket_url\": \"ticket_url\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"a2982e98-d69b-4815-a50d-57f1267374d8","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"029d8a45-40e7-4697-b2da-a0c12a4d3895","name":"Get a multi-factor authentication enrollment - default","request":{"urlPathTemplate":"/guardian/enrollments/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"status\": \"pending\",\n \"name\": \"name\",\n \"identifier\": \"identifier\",\n \"phone_number\": \"phone_number\",\n \"enrolled_at\": \"enrolled_at\",\n \"last_auth\": \"last_auth\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"029d8a45-40e7-4697-b2da-a0c12a4d3895","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d28abba4-f155-4fa4-ba9b-077e8ea016ad","name":"Delete a multi-factor authentication enrollment - default","request":{"urlPathTemplate":"/guardian/enrollments/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"d28abba4-f155-4fa4-ba9b-077e8ea016ad","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"12377456-a682-4cdc-b63d-41a188b3ce32","name":"Get Factors and multi-factor authentication details - default","request":{"urlPathTemplate":"/guardian/factors","method":"GET"},"response":{"status":200,"body":"[\n {\n \"enabled\": true,\n \"trial_expired\": true,\n \"name\": \"push-notification\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"12377456-a682-4cdc-b63d-41a188b3ce32","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"93c9905e-4981-4cb3-a7b0-026dab1704d6","name":"Update multi-factor authentication type - default","request":{"urlPathTemplate":"/guardian/factors/{name}","method":"PUT","pathParameters":{"name":{"equalTo":"push-notification"}}},"response":{"status":200,"body":"{\n \"enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"93c9905e-4981-4cb3-a7b0-026dab1704d6","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e47dd04a-f3a3-409a-a301-7732f16f3bec","name":"Get multi-factor authentication policies - default","request":{"urlPathTemplate":"/guardian/policies","method":"GET"},"response":{"status":200,"body":"[\n \"all-applications\"\n]","headers":{"Content-Type":"application/json"}},"uuid":"e47dd04a-f3a3-409a-a301-7732f16f3bec","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"8ee26dda-4638-4269-9b14-59f2907ef28b","name":"Update multi-factor authentication policies - default","request":{"urlPathTemplate":"/guardian/policies","method":"PUT"},"response":{"status":200,"body":"[\n \"all-applications\"\n]","headers":{"Content-Type":"application/json"}},"uuid":"8ee26dda-4638-4269-9b14-59f2907ef28b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"ed435b3e-66b6-47b0-882f-08d926944cad","name":"Get Enabled Phone Factors - default","request":{"urlPathTemplate":"/guardian/factors/phone/message-types","method":"GET"},"response":{"status":200,"body":"{\n \"message_types\": [\n \"sms\"\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"ed435b3e-66b6-47b0-882f-08d926944cad","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"92b96146-6175-4994-87af-ac137f73595d","name":"Update the Enabled Phone Factors - default","request":{"urlPathTemplate":"/guardian/factors/phone/message-types","method":"PUT"},"response":{"status":200,"body":"{\n \"message_types\": [\n \"sms\"\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"92b96146-6175-4994-87af-ac137f73595d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"bd1421c2-3dbe-4603-b96c-02e53872498b","name":"Get Twilio configuration - default","request":{"urlPathTemplate":"/guardian/factors/phone/providers/twilio","method":"GET"},"response":{"status":200,"body":"{\n \"from\": \"from\",\n \"messaging_service_sid\": \"messaging_service_sid\",\n \"auth_token\": \"auth_token\",\n \"sid\": \"sid\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"bd1421c2-3dbe-4603-b96c-02e53872498b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"92ac09b5-25bb-4b34-8fad-73bbd1a12984","name":"Update Twilio configuration - default","request":{"urlPathTemplate":"/guardian/factors/phone/providers/twilio","method":"PUT"},"response":{"status":200,"body":"{\n \"from\": \"from\",\n \"messaging_service_sid\": \"messaging_service_sid\",\n \"auth_token\": \"auth_token\",\n \"sid\": \"sid\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"92ac09b5-25bb-4b34-8fad-73bbd1a12984","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"5c310715-a914-4928-9142-141be90dd71e","name":"Get phone provider configuration - default","request":{"urlPathTemplate":"/guardian/factors/phone/selected-provider","method":"GET"},"response":{"status":200,"body":"{\n \"provider\": \"auth0\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"5c310715-a914-4928-9142-141be90dd71e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"555dfcb1-93af-4dcf-8241-1114028c32b4","name":"Update phone provider configuration - default","request":{"urlPathTemplate":"/guardian/factors/phone/selected-provider","method":"PUT"},"response":{"status":200,"body":"{\n \"provider\": \"auth0\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"555dfcb1-93af-4dcf-8241-1114028c32b4","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0e83b2df-19bf-4909-b1c4-0522a7f929a3","name":"Get Enrollment and Verification Phone Templates - default","request":{"urlPathTemplate":"/guardian/factors/phone/templates","method":"GET"},"response":{"status":200,"body":"{\n \"enrollment_message\": \"enrollment_message\",\n \"verification_message\": \"verification_message\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"0e83b2df-19bf-4909-b1c4-0522a7f929a3","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"d55307be-4c05-42f6-888f-c5a6ee1d2ae2","name":"Update Enrollment and Verification Phone Templates - default","request":{"urlPathTemplate":"/guardian/factors/phone/templates","method":"PUT"},"response":{"status":200,"body":"{\n \"enrollment_message\": \"enrollment_message\",\n \"verification_message\": \"verification_message\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"d55307be-4c05-42f6-888f-c5a6ee1d2ae2","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"11ed0ad4-9dc8-48ea-bc9c-9824179b9f32","name":"Get APNS push notification configuration - default","request":{"urlPathTemplate":"/guardian/factors/push-notification/providers/apns","method":"GET"},"response":{"status":200,"body":"{\n \"bundle_id\": \"bundle_id\",\n \"sandbox\": true,\n \"enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"11ed0ad4-9dc8-48ea-bc9c-9824179b9f32","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"fe724506-7b4f-4529-9a37-62629576864c","name":"Update APNs provider configuration - default","request":{"urlPathTemplate":"/guardian/factors/push-notification/providers/apns","method":"PATCH"},"response":{"status":200,"body":"{\n \"sandbox\": true,\n \"bundle_id\": \"bundle_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"fe724506-7b4f-4529-9a37-62629576864c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3e797ad0-d477-4cb8-8016-1e6e16c45357","name":"Updates FCM configuration - default","request":{"urlPathTemplate":"/guardian/factors/push-notification/providers/fcm","method":"PATCH"},"response":{"status":200,"body":"{\n \"key\": \"value\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"3e797ad0-d477-4cb8-8016-1e6e16c45357","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"ec207d8e-6926-4701-bfbc-e563ac76befe","name":"Updates FCMV1 configuration - default","request":{"urlPathTemplate":"/guardian/factors/push-notification/providers/fcmv1","method":"PATCH"},"response":{"status":200,"body":"{\n \"key\": \"value\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"ec207d8e-6926-4701-bfbc-e563ac76befe","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a03df5fb-b6e0-4345-9c83-e920d88114c9","name":"Get AWS SNS configuration - default","request":{"urlPathTemplate":"/guardian/factors/push-notification/providers/sns","method":"GET"},"response":{"status":200,"body":"{\n \"aws_access_key_id\": \"aws_access_key_id\",\n \"aws_secret_access_key\": \"aws_secret_access_key\",\n \"aws_region\": \"aws_region\",\n \"sns_apns_platform_application_arn\": \"sns_apns_platform_application_arn\",\n \"sns_gcm_platform_application_arn\": \"sns_gcm_platform_application_arn\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"a03df5fb-b6e0-4345-9c83-e920d88114c9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"6e8e169e-036c-4ebe-8171-a3aeb7c68ad5","name":"Update AWS SNS configuration - default","request":{"urlPathTemplate":"/guardian/factors/push-notification/providers/sns","method":"PUT"},"response":{"status":200,"body":"{\n \"aws_access_key_id\": \"aws_access_key_id\",\n \"aws_secret_access_key\": \"aws_secret_access_key\",\n \"aws_region\": \"aws_region\",\n \"sns_apns_platform_application_arn\": \"sns_apns_platform_application_arn\",\n \"sns_gcm_platform_application_arn\": \"sns_gcm_platform_application_arn\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"6e8e169e-036c-4ebe-8171-a3aeb7c68ad5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"79a10ee8-bacd-486b-b5f3-4f23e2382c4b","name":"Update AWS SNS configuration - default","request":{"urlPathTemplate":"/guardian/factors/push-notification/providers/sns","method":"PATCH"},"response":{"status":200,"body":"{\n \"aws_access_key_id\": \"aws_access_key_id\",\n \"aws_secret_access_key\": \"aws_secret_access_key\",\n \"aws_region\": \"aws_region\",\n \"sns_apns_platform_application_arn\": \"sns_apns_platform_application_arn\",\n \"sns_gcm_platform_application_arn\": \"sns_gcm_platform_application_arn\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"79a10ee8-bacd-486b-b5f3-4f23e2382c4b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0496348c-7357-4623-8514-fb741a753c75","name":"Get push notification provider - default","request":{"urlPathTemplate":"/guardian/factors/push-notification/selected-provider","method":"GET"},"response":{"status":200,"body":"{\n \"provider\": \"guardian\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"0496348c-7357-4623-8514-fb741a753c75","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"7285a311-6499-4a95-a8cc-6701a6997bf5","name":"Update Push Notification configuration - default","request":{"urlPathTemplate":"/guardian/factors/push-notification/selected-provider","method":"PUT"},"response":{"status":200,"body":"{\n \"provider\": \"guardian\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"7285a311-6499-4a95-a8cc-6701a6997bf5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e8ca19da-0184-44a0-868c-f020f73cbcbe","name":"Get Twilio SMS configuration - default","request":{"urlPathTemplate":"/guardian/factors/sms/providers/twilio","method":"GET"},"response":{"status":200,"body":"{\n \"from\": \"from\",\n \"messaging_service_sid\": \"messaging_service_sid\",\n \"auth_token\": \"auth_token\",\n \"sid\": \"sid\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"e8ca19da-0184-44a0-868c-f020f73cbcbe","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"8e51f842-c731-4fc6-9f28-42d20d05f8a7","name":"Update Twilio SMS configuration - default","request":{"urlPathTemplate":"/guardian/factors/sms/providers/twilio","method":"PUT"},"response":{"status":200,"body":"{\n \"from\": \"from\",\n \"messaging_service_sid\": \"messaging_service_sid\",\n \"auth_token\": \"auth_token\",\n \"sid\": \"sid\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"8e51f842-c731-4fc6-9f28-42d20d05f8a7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a9bd6f03-210a-4eba-9f63-48eb355c59a5","name":"Get SMS configuration - default","request":{"urlPathTemplate":"/guardian/factors/sms/selected-provider","method":"GET"},"response":{"status":200,"body":"{\n \"provider\": \"auth0\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"a9bd6f03-210a-4eba-9f63-48eb355c59a5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"69919759-0017-4dd6-8df8-a40088848ddb","name":"Update SMS configuration - default","request":{"urlPathTemplate":"/guardian/factors/sms/selected-provider","method":"PUT"},"response":{"status":200,"body":"{\n \"provider\": \"auth0\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"69919759-0017-4dd6-8df8-a40088848ddb","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1731b364-a171-42f2-8475-62bdb634879d","name":"Get SMS enrollment and verification templates - default","request":{"urlPathTemplate":"/guardian/factors/sms/templates","method":"GET"},"response":{"status":200,"body":"{\n \"enrollment_message\": \"enrollment_message\",\n \"verification_message\": \"verification_message\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"1731b364-a171-42f2-8475-62bdb634879d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"2b0be931-6224-442e-92ca-1b5dfe5c06ba","name":"Update SMS enrollment and verification templates - default","request":{"urlPathTemplate":"/guardian/factors/sms/templates","method":"PUT"},"response":{"status":200,"body":"{\n \"enrollment_message\": \"enrollment_message\",\n \"verification_message\": \"verification_message\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"2b0be931-6224-442e-92ca-1b5dfe5c06ba","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"47cb059e-e754-4e4c-804b-52d84dd12162","name":"Get DUO Configuration - default","request":{"urlPathTemplate":"/guardian/factors/duo/settings","method":"GET"},"response":{"status":200,"body":"{\n \"ikey\": \"ikey\",\n \"skey\": \"skey\",\n \"host\": \"host\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"47cb059e-e754-4e4c-804b-52d84dd12162","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"59380cca-acd7-464e-86e0-1017e022aaa0","name":"Update the DUO Configuration - default","request":{"urlPathTemplate":"/guardian/factors/duo/settings","method":"PUT"},"response":{"status":200,"body":"{\n \"ikey\": \"ikey\",\n \"skey\": \"skey\",\n \"host\": \"host\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"59380cca-acd7-464e-86e0-1017e022aaa0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"38a5aa65-75f0-471c-ab5e-10b544359b3c","name":"Update the DUO Configuration - default","request":{"urlPathTemplate":"/guardian/factors/duo/settings","method":"PATCH"},"response":{"status":200,"body":"{\n \"ikey\": \"ikey\",\n \"skey\": \"skey\",\n \"host\": \"host\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"38a5aa65-75f0-471c-ab5e-10b544359b3c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fcdfec44-0fb3-42b6-a292-48e9fb13271a","name":"Get hook secrets - default","request":{"urlPathTemplate":"/hooks/{id}/secrets","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"key\": \"value\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"fcdfec44-0fb3-42b6-a292-48e9fb13271a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a4e022c8-8ee2-4d3b-a52d-18c34a18c1e2","name":"Add hook secrets - default","request":{"urlPathTemplate":"/hooks/{id}/secrets","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"a4e022c8-8ee2-4d3b-a52d-18c34a18c1e2","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1e6e250b-ded1-4ca6-831a-83d54b71295e","name":"Delete hook secrets - default","request":{"urlPathTemplate":"/hooks/{id}/secrets","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"1e6e250b-ded1-4ca6-831a-83d54b71295e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"81e2c92a-69de-446b-82c8-7f320f9e1060","name":"Update hook secrets - default","request":{"urlPathTemplate":"/hooks/{id}/secrets","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"81e2c92a-69de-446b-82c8-7f320f9e1060","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a93c6324-dab3-4581-8117-74e0dc2c05b3","name":"Create export users job - default","request":{"urlPathTemplate":"/jobs/users-exports","method":"POST"},"response":{"status":200,"body":"{\n \"status\": \"status\",\n \"type\": \"type\",\n \"created_at\": \"created_at\",\n \"id\": \"id\",\n \"connection_id\": \"connection_id\",\n \"format\": \"json\",\n \"limit\": 1,\n \"fields\": [\n {\n \"name\": \"name\",\n \"export_as\": \"export_as\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"a93c6324-dab3-4581-8117-74e0dc2c05b3","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"d7d59bf9-f846-4967-a50c-0d5e2daaf044","name":"Create import users job - default","request":{"urlPathTemplate":"/jobs/users-imports","method":"POST"},"response":{"status":202,"body":"{\n \"status\": \"status\",\n \"type\": \"type\",\n \"created_at\": \"created_at\",\n \"id\": \"id\",\n \"connection_id\": \"connection_id\",\n \"external_id\": \"external_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"d7d59bf9-f846-4967-a50c-0d5e2daaf044","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1ec86184-b7ac-4cff-9fa1-e78fcdcaa954","name":"Send an email address verification email - default","request":{"urlPathTemplate":"/jobs/verification-email","method":"POST"},"response":{"status":201,"body":"{\n \"status\": \"status\",\n \"type\": \"type\",\n \"created_at\": \"created_at\",\n \"id\": \"id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"1ec86184-b7ac-4cff-9fa1-e78fcdcaa954","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1ddcb674-4117-4538-98e8-5723fdb083e8","name":"Get job error details - default","request":{"urlPathTemplate":"/jobs/{id}/errors","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"[\n {\n \"user\": {\n \"key\": \"value\"\n },\n \"errors\": [\n {}\n ]\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"1ddcb674-4117-4538-98e8-5723fdb083e8","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"70e1c2da-e7db-401a-b166-be0b5da6139c","name":"Get custom signing keys - default","request":{"urlPathTemplate":"/keys/custom-signing","method":"GET"},"response":{"status":200,"body":"{\n \"keys\": [\n {\n \"kty\": \"EC\",\n \"kid\": \"kid\",\n \"use\": \"sig\",\n \"key_ops\": [\n \"verify\"\n ],\n \"alg\": \"RS256\",\n \"n\": \"n\",\n \"e\": \"e\",\n \"crv\": \"P-256\",\n \"x\": \"x\",\n \"y\": \"y\",\n \"x5u\": \"x5u\",\n \"x5c\": [\n \"x5c\"\n ],\n \"x5t\": \"x5t\",\n \"x5t#S256\": \"x5t#S256\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"70e1c2da-e7db-401a-b166-be0b5da6139c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"3b40098d-d649-4030-bc12-31606e807e15","name":"Create or replace custom signing keys - default","request":{"urlPathTemplate":"/keys/custom-signing","method":"PUT"},"response":{"status":200,"body":"{\n \"keys\": [\n {\n \"kty\": \"EC\",\n \"kid\": \"kid\",\n \"use\": \"sig\",\n \"key_ops\": [\n \"verify\"\n ],\n \"alg\": \"RS256\",\n \"n\": \"n\",\n \"e\": \"e\",\n \"crv\": \"P-256\",\n \"x\": \"x\",\n \"y\": \"y\",\n \"x5u\": \"x5u\",\n \"x5c\": [\n \"x5c\"\n ],\n \"x5t\": \"x5t\",\n \"x5t#S256\": \"x5t#S256\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"3b40098d-d649-4030-bc12-31606e807e15","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"f9b82290-1c82-4a29-891c-cee6ec28bcc5","name":"Delete custom signing keys - default","request":{"urlPathTemplate":"/keys/custom-signing","method":"DELETE"},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"f9b82290-1c82-4a29-891c-cee6ec28bcc5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c09166ed-9d73-4607-92f6-ae884592a5e5","name":"Get all encryption keys - default","request":{"urlPathTemplate":"/keys/encryption","method":"GET"},"response":{"status":200,"body":"{\n \"start\": 1,\n \"limit\": 1,\n \"total\": 1,\n \"keys\": [\n {\n \"kid\": \"kid\",\n \"type\": \"customer-provided-root-key\",\n \"state\": \"pre-activation\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"parent_kid\": \"parent_kid\",\n \"public_key\": \"public_key\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"c09166ed-9d73-4607-92f6-ae884592a5e5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"b0a9c75d-5268-41dd-849a-da3c0cfcb04b","name":"Create the new encryption key - default","request":{"urlPathTemplate":"/keys/encryption","method":"POST"},"response":{"status":201,"body":"{\n \"kid\": \"kid\",\n \"type\": \"customer-provided-root-key\",\n \"state\": \"pre-activation\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"parent_kid\": \"parent_kid\",\n \"public_key\": \"public_key\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"b0a9c75d-5268-41dd-849a-da3c0cfcb04b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"974880c1-1ef6-4001-a614-aa43c37b4420","name":"Rekey the key hierarchy - default","request":{"urlPathTemplate":"/keys/encryption/rekey","method":"POST"},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"974880c1-1ef6-4001-a614-aa43c37b4420","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"77bab061-9dae-4268-84d0-0b63e263f1ab","name":"Get the encryption key by its key id - default","request":{"urlPathTemplate":"/keys/encryption/{kid}","method":"GET","pathParameters":{"kid":{"equalTo":"kid"}}},"response":{"status":200,"body":"{\n \"kid\": \"kid\",\n \"type\": \"customer-provided-root-key\",\n \"state\": \"pre-activation\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"parent_kid\": \"parent_kid\",\n \"public_key\": \"public_key\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"77bab061-9dae-4268-84d0-0b63e263f1ab","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"86a3fc30-c02a-4c36-ac4c-7900289870b8","name":"Import the encryption key - default","request":{"urlPathTemplate":"/keys/encryption/{kid}","method":"POST","pathParameters":{"kid":{"equalTo":"kid"}}},"response":{"status":201,"body":"{\n \"kid\": \"kid\",\n \"type\": \"customer-provided-root-key\",\n \"state\": \"pre-activation\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"parent_kid\": \"parent_kid\",\n \"public_key\": \"public_key\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"86a3fc30-c02a-4c36-ac4c-7900289870b8","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"cb3a536a-7775-4fcf-a037-f10b16d2fe1d","name":"Delete the encryption key by its key id - default","request":{"urlPathTemplate":"/keys/encryption/{kid}","method":"DELETE","pathParameters":{"kid":{"equalTo":"kid"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"cb3a536a-7775-4fcf-a037-f10b16d2fe1d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"cf0b4ec6-52f1-4f55-974a-9eadd755c04f","name":"Create the public wrapping key - default","request":{"urlPathTemplate":"/keys/encryption/{kid}/wrapping-key","method":"POST","pathParameters":{"kid":{"equalTo":"kid"}}},"response":{"status":201,"body":"{\n \"public_key\": \"public_key\",\n \"algorithm\": \"CKM_RSA_AES_KEY_WRAP\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"cf0b4ec6-52f1-4f55-974a-9eadd755c04f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1bde50a3-a51e-41b4-9018-8f46bd597774","name":"Get all Application Signing Keys - default","request":{"urlPathTemplate":"/keys/signing","method":"GET"},"response":{"status":200,"body":"[\n {\n \"kid\": \"kid\",\n \"cert\": \"cert\",\n \"pkcs7\": \"pkcs7\",\n \"current\": true,\n \"next\": true,\n \"previous\": true,\n \"current_since\": \"current_since\",\n \"current_until\": \"current_until\",\n \"fingerprint\": \"fingerprint\",\n \"thumbprint\": \"thumbprint\",\n \"revoked\": true,\n \"revoked_at\": \"revoked_at\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"1bde50a3-a51e-41b4-9018-8f46bd597774","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"e9d4827d-c55c-4b09-a761-24a551052257","name":"Rotate the Application Signing Key - default","request":{"urlPathTemplate":"/keys/signing/rotate","method":"POST"},"response":{"status":201,"body":"{\n \"cert\": \"cert\",\n \"kid\": \"kid\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"e9d4827d-c55c-4b09-a761-24a551052257","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"adec0e81-f58d-4f1f-9071-2c1f28b236e1","name":"Get an Application Signing Key by its key id - default","request":{"urlPathTemplate":"/keys/signing/{kid}","method":"GET","pathParameters":{"kid":{"equalTo":"kid"}}},"response":{"status":200,"body":"{\n \"kid\": \"kid\",\n \"cert\": \"cert\",\n \"pkcs7\": \"pkcs7\",\n \"current\": true,\n \"next\": true,\n \"previous\": true,\n \"current_since\": \"current_since\",\n \"current_until\": \"current_until\",\n \"fingerprint\": \"fingerprint\",\n \"thumbprint\": \"thumbprint\",\n \"revoked\": true,\n \"revoked_at\": \"revoked_at\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"adec0e81-f58d-4f1f-9071-2c1f28b236e1","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"cab3e5d7-c549-4ce9-aa51-648a2d61b321","name":"Revoke an Application Signing Key by its key id - default","request":{"urlPathTemplate":"/keys/signing/{kid}/revoke","method":"PUT","pathParameters":{"kid":{"equalTo":"kid"}}},"response":{"status":200,"body":"{\n \"cert\": \"cert\",\n \"kid\": \"kid\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"cab3e5d7-c549-4ce9-aa51-648a2d61b321","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3bd5c630-fb83-4b4e-a903-67268e3218e0","name":"Get client grants associated to an organization - default","request":{"urlPathTemplate":"/organizations/{id}/client-grants","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"client_grants\": [\n {\n \"id\": \"id\",\n \"client_id\": \"client_id\",\n \"audience\": \"audience\",\n \"scope\": [\n \"scope\"\n ],\n \"organization_usage\": \"deny\",\n \"allow_any_organization\": true\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"3bd5c630-fb83-4b4e-a903-67268e3218e0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e4a9924e-c625-4ff3-a5ed-44c5e7f20053","name":"Associate a client grant with an organization - default","request":{"urlPathTemplate":"/organizations/{id}/client-grants","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"client_id\": \"client_id\",\n \"audience\": \"audience\",\n \"scope\": [\n \"scope\"\n ],\n \"organization_usage\": \"deny\",\n \"allow_any_organization\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"e4a9924e-c625-4ff3-a5ed-44c5e7f20053","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"36ae6d81-83b3-4c2c-8f37-5e921d4740ad","name":"Remove a client grant from an organization - default","request":{"urlPathTemplate":"/organizations/{id}/client-grants/{grant_id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"grant_id":{"equalTo":"grant_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"36ae6d81-83b3-4c2c-8f37-5e921d4740ad","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2edde951-0b04-4e05-9389-658b85c37299","name":"Retrieve all organization discovery domains - default","request":{"urlPathTemplate":"/organizations/{id}/discovery-domains","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"domains\": [\n {\n \"id\": \"id\",\n \"domain\": \"domain\",\n \"status\": \"pending\",\n \"verification_txt\": \"verification_txt\",\n \"verification_host\": \"verification_host\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"2edde951-0b04-4e05-9389-658b85c37299","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fdfc20b0-5e2b-4eb6-98af-e0f922aefac7","name":"Create an organization discovery domain - default","request":{"urlPathTemplate":"/organizations/{id}/discovery-domains","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"domain\": \"domain\",\n \"status\": \"pending\",\n \"verification_txt\": \"verification_txt\",\n \"verification_host\": \"verification_host\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"fdfc20b0-5e2b-4eb6-98af-e0f922aefac7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4cb0d18e-2a9a-4d6c-a1f3-f2c3e5c3c496","name":"Retrieve an organization discovery domain by ID - default","request":{"urlPathTemplate":"/organizations/{id}/discovery-domains/{discovery_domain_id}","method":"GET","pathParameters":{"id":{"equalTo":"id"},"discovery_domain_id":{"equalTo":"discovery_domain_id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"domain\": \"domain\",\n \"status\": \"pending\",\n \"verification_txt\": \"verification_txt\",\n \"verification_host\": \"verification_host\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"4cb0d18e-2a9a-4d6c-a1f3-f2c3e5c3c496","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"803a298e-d6f6-4370-8e03-37d06547eeef","name":"Delete an organization discovery domain - default","request":{"urlPathTemplate":"/organizations/{id}/discovery-domains/{discovery_domain_id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"discovery_domain_id":{"equalTo":"discovery_domain_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"803a298e-d6f6-4370-8e03-37d06547eeef","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fca95551-032d-44de-a3cf-849f98ec2177","name":"Update an organization discovery domain - default","request":{"urlPathTemplate":"/organizations/{id}/discovery-domains/{discovery_domain_id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"},"discovery_domain_id":{"equalTo":"discovery_domain_id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"domain\": \"domain\",\n \"status\": \"pending\",\n \"verification_txt\": \"verification_txt\",\n \"verification_host\": \"verification_host\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"fca95551-032d-44de-a3cf-849f98ec2177","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"47767c5f-78ac-42c3-affe-a5d3e1ed6800","name":"Get connections enabled for an organization - default","request":{"urlPathTemplate":"/organizations/{id}/enabled_connections","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"enabled_connections\": [\n {\n \"connection_id\": \"connection_id\",\n \"assign_membership_on_login\": true,\n \"show_as_button\": true,\n \"is_signup_enabled\": true\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"47767c5f-78ac-42c3-affe-a5d3e1ed6800","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c311c287-5333-41bd-819e-e813c541ed66","name":"Add connections to an organization - default","request":{"urlPathTemplate":"/organizations/{id}/enabled_connections","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"connection_id\": \"connection_id\",\n \"assign_membership_on_login\": true,\n \"show_as_button\": true,\n \"is_signup_enabled\": true,\n \"connection\": {\n \"name\": \"name\",\n \"strategy\": \"strategy\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"c311c287-5333-41bd-819e-e813c541ed66","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c455a9b2-1f8f-45e1-8100-df1d73cd097d","name":"Get an enabled connection for an organization - default","request":{"urlPathTemplate":"/organizations/{id}/enabled_connections/{connectionId}","method":"GET","pathParameters":{"id":{"equalTo":"id"},"connectionId":{"equalTo":"connectionId"}}},"response":{"status":200,"body":"{\n \"connection_id\": \"connection_id\",\n \"assign_membership_on_login\": true,\n \"show_as_button\": true,\n \"is_signup_enabled\": true,\n \"connection\": {\n \"name\": \"name\",\n \"strategy\": \"strategy\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"c455a9b2-1f8f-45e1-8100-df1d73cd097d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0dc9106a-150c-40d8-9000-176bd6350a98","name":"Delete connections from an organization - default","request":{"urlPathTemplate":"/organizations/{id}/enabled_connections/{connectionId}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"connectionId":{"equalTo":"connectionId"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"0dc9106a-150c-40d8-9000-176bd6350a98","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"9a371d52-abea-44dc-a464-f04f63a601b0","name":"Update the Connection of an Organization - default","request":{"urlPathTemplate":"/organizations/{id}/enabled_connections/{connectionId}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"},"connectionId":{"equalTo":"connectionId"}}},"response":{"status":200,"body":"{\n \"connection_id\": \"connection_id\",\n \"assign_membership_on_login\": true,\n \"show_as_button\": true,\n \"is_signup_enabled\": true,\n \"connection\": {\n \"name\": \"name\",\n \"strategy\": \"strategy\"\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"9a371d52-abea-44dc-a464-f04f63a601b0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"7fb2e068-8caf-4234-aa52-3b51c9f37300","name":"Get invitations to an organization - default","request":{"urlPathTemplate":"/organizations/{id}/invitations","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"invitations\": [\n {\n \"id\": \"id\",\n \"organization_id\": \"organization_id\",\n \"inviter\": {\n \"name\": \"name\"\n },\n \"invitee\": {\n \"email\": \"email\"\n },\n \"invitation_url\": \"invitation_url\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\",\n \"client_id\": \"client_id\",\n \"connection_id\": \"connection_id\",\n \"app_metadata\": {\n \"key\": \"value\"\n },\n \"user_metadata\": {\n \"key\": \"value\"\n },\n \"roles\": [\n \"roles\"\n ],\n \"ticket_id\": \"ticket_id\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"7fb2e068-8caf-4234-aa52-3b51c9f37300","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"49ad8742-5d95-4969-87cf-09427959682f","name":"Create invitations to an organization - default","request":{"urlPathTemplate":"/organizations/{id}/invitations","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"organization_id\": \"organization_id\",\n \"inviter\": {\n \"name\": \"name\"\n },\n \"invitee\": {\n \"email\": \"email\"\n },\n \"invitation_url\": \"invitation_url\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\",\n \"client_id\": \"client_id\",\n \"connection_id\": \"connection_id\",\n \"app_metadata\": {\n \"key\": \"value\"\n },\n \"user_metadata\": {\n \"key\": \"value\"\n },\n \"roles\": [\n \"roles\"\n ],\n \"ticket_id\": \"ticket_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"49ad8742-5d95-4969-87cf-09427959682f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2bf04456-d49c-45d6-aedf-19598f4c6df8","name":"Get a specific invitation to an Organization - default","request":{"urlPathTemplate":"/organizations/{id}/invitations/{invitation_id}","method":"GET","pathParameters":{"id":{"equalTo":"id"},"invitation_id":{"equalTo":"invitation_id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"organization_id\": \"organization_id\",\n \"inviter\": {\n \"name\": \"name\"\n },\n \"invitee\": {\n \"email\": \"email\"\n },\n \"invitation_url\": \"invitation_url\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\",\n \"client_id\": \"client_id\",\n \"connection_id\": \"connection_id\",\n \"app_metadata\": {\n \"key\": \"value\"\n },\n \"user_metadata\": {\n \"key\": \"value\"\n },\n \"roles\": [\n \"roles\"\n ],\n \"ticket_id\": \"ticket_id\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"2bf04456-d49c-45d6-aedf-19598f4c6df8","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1a1c3283-fac9-4185-bcb8-3a9053a43163","name":"Delete an invitation to an Organization - default","request":{"urlPathTemplate":"/organizations/{id}/invitations/{invitation_id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"invitation_id":{"equalTo":"invitation_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"1a1c3283-fac9-4185-bcb8-3a9053a43163","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b33d5e95-cdf1-4d3a-b019-7fa6e46267a0","name":"Get members who belong to an organization - default","request":{"urlPathTemplate":"/organizations/{id}/members","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"members\": [\n {\n \"user_id\": \"user_id\",\n \"picture\": \"picture\",\n \"name\": \"name\",\n \"email\": \"email\",\n \"roles\": [\n {}\n ]\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"b33d5e95-cdf1-4d3a-b019-7fa6e46267a0","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"8536454b-53b8-4272-8829-062f2cb9092d","name":"Add members to an organization - default","request":{"urlPathTemplate":"/organizations/{id}/members","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"8536454b-53b8-4272-8829-062f2cb9092d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"71dcfc22-87b0-4591-921b-7d7088bd16ae","name":"Delete members from an organization - default","request":{"urlPathTemplate":"/organizations/{id}/members","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"71dcfc22-87b0-4591-921b-7d7088bd16ae","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2c099b94-dfed-4bf8-b370-25ceade844b1","name":"Get user roles assigned to an Organization member - default","request":{"urlPathTemplate":"/organizations/{id}/members/{user_id}/roles","method":"GET","pathParameters":{"id":{"equalTo":"id"},"user_id":{"equalTo":"user_id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"roles\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"2c099b94-dfed-4bf8-b370-25ceade844b1","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"8a5dc31c-084d-4753-9c95-0a0ddd2294da","name":"Assign user roles to an Organization member - default","request":{"urlPathTemplate":"/organizations/{id}/members/{user_id}/roles","method":"POST","pathParameters":{"id":{"equalTo":"id"},"user_id":{"equalTo":"user_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"8a5dc31c-084d-4753-9c95-0a0ddd2294da","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"245dc825-fc94-49ca-9547-a4b30ac4485a","name":"Delete user roles from an Organization member - default","request":{"urlPathTemplate":"/organizations/{id}/members/{user_id}/roles","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"user_id":{"equalTo":"user_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"245dc825-fc94-49ca-9547-a4b30ac4485a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"f02cb8dc-cee0-4470-b69b-596e4d0653f9","name":"Get render setting configurations for all screens - default","request":{"urlPathTemplate":"/prompts/rendering","method":"GET"},"response":{"status":200,"body":"{\n \"configs\": [\n {\n \"rendering_mode\": \"advanced\",\n \"context_configuration\": [\n \"context_configuration\"\n ],\n \"default_head_tags_disabled\": true,\n \"use_page_template\": true,\n \"head_tags\": [\n {}\n ]\n }\n ],\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1\n}","headers":{"Content-Type":"application/json"}},"uuid":"f02cb8dc-cee0-4470-b69b-596e4d0653f9","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"d0abb404-e603-4992-9c65-19a5766a9462","name":"Update render settings for multiple screens - default","request":{"urlPathTemplate":"/prompts/rendering","method":"PATCH"},"response":{"status":200,"body":"{\n \"configs\": [\n {\n \"prompt\": \"login\",\n \"screen\": \"login\",\n \"rendering_mode\": \"advanced\",\n \"context_configuration\": [\n \"branding.settings\"\n ],\n \"default_head_tags_disabled\": true,\n \"use_page_template\": true,\n \"head_tags\": [\n {}\n ]\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"d0abb404-e603-4992-9c65-19a5766a9462","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b6f4a3c0-8032-487e-be5c-24b52aea56c3","name":"Get render settings for a screen - default","request":{"urlPathTemplate":"/prompts/{prompt}/screen/{screen}/rendering","method":"GET","pathParameters":{"prompt":{"equalTo":"login"},"screen":{"equalTo":"login"}}},"response":{"status":200,"body":"{\n \"tenant\": \"tenant\",\n \"prompt\": \"prompt\",\n \"screen\": \"screen\",\n \"rendering_mode\": \"advanced\",\n \"context_configuration\": [\n \"context_configuration\"\n ],\n \"default_head_tags_disabled\": true,\n \"use_page_template\": true,\n \"head_tags\": [\n {\n \"tag\": \"tag\",\n \"attributes\": {\n \"key\": \"value\"\n },\n \"content\": \"content\"\n }\n ],\n \"filters\": {\n \"match_type\": \"includes_any\",\n \"clients\": [\n {\n \"id\": \"id\"\n }\n ],\n \"organizations\": [\n {\n \"id\": \"id\"\n }\n ],\n \"domains\": [\n {\n \"id\": \"id\"\n }\n ]\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"b6f4a3c0-8032-487e-be5c-24b52aea56c3","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"248d2934-0ee0-434c-a9a5-df7501ef901c","name":"Update render settings for a screen - default","request":{"urlPathTemplate":"/prompts/{prompt}/screen/{screen}/rendering","method":"PATCH","pathParameters":{"prompt":{"equalTo":"login"},"screen":{"equalTo":"login"}}},"response":{"status":200,"body":"{\n \"rendering_mode\": \"advanced\",\n \"context_configuration\": [\n \"context_configuration\"\n ],\n \"default_head_tags_disabled\": true,\n \"use_page_template\": true,\n \"head_tags\": [\n {\n \"tag\": \"tag\",\n \"attributes\": {\n \"key\": \"value\"\n },\n \"content\": \"content\"\n }\n ],\n \"filters\": {\n \"match_type\": \"includes_any\",\n \"clients\": [\n {\n \"id\": \"id\"\n }\n ],\n \"organizations\": [\n {\n \"id\": \"id\"\n }\n ],\n \"domains\": [\n {\n \"id\": \"id\"\n }\n ]\n }\n}","headers":{"Content-Type":"application/json"}},"uuid":"248d2934-0ee0-434c-a9a5-df7501ef901c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1cd54de8-b246-4b0a-863b-f5fa0184e206","name":"Get custom text for a prompt - default","request":{"urlPathTemplate":"/prompts/{prompt}/custom-text/{language}","method":"GET","pathParameters":{"prompt":{"equalTo":"login"},"language":{"equalTo":"am"}}},"response":{"status":200,"body":"{\n \"key\": \"value\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"1cd54de8-b246-4b0a-863b-f5fa0184e206","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"bff89979-efc7-413e-8aaf-a45d84f1793b","name":"Set custom text for a specific prompt - default","request":{"urlPathTemplate":"/prompts/{prompt}/custom-text/{language}","method":"PUT","pathParameters":{"prompt":{"equalTo":"login"},"language":{"equalTo":"am"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"bff89979-efc7-413e-8aaf-a45d84f1793b","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e2ccf6be-be59-4e7f-90f9-dd24529c4981","name":"Get partials for a prompt - default","request":{"urlPathTemplate":"/prompts/{prompt}/partials","method":"GET","pathParameters":{"prompt":{"equalTo":"login"}}},"response":{"status":200,"body":"{\n \"key\": \"value\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"e2ccf6be-be59-4e7f-90f9-dd24529c4981","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c9517422-8a42-4204-8156-cda9b385f017","name":"Set partials for a prompt - default","request":{"urlPathTemplate":"/prompts/{prompt}/partials","method":"PUT","pathParameters":{"prompt":{"equalTo":"login"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"c9517422-8a42-4204-8156-cda9b385f017","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"cb391545-5076-433d-8b32-b19ed3d73939","name":"Get risk assessment settings - default","request":{"urlPathTemplate":"/risk-assessments/settings","method":"GET"},"response":{"status":200,"body":"{\n \"enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"cb391545-5076-433d-8b32-b19ed3d73939","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"8018c245-2f30-469f-992f-dc1668cccd75","name":"Update risk assessment settings - default","request":{"urlPathTemplate":"/risk-assessments/settings","method":"PATCH"},"response":{"status":200,"body":"{\n \"enabled\": true\n}","headers":{"Content-Type":"application/json"}},"uuid":"8018c245-2f30-469f-992f-dc1668cccd75","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b25bc47f-4ec8-4cd8-b419-5323232b8bb8","name":"Get new device assessor - default","request":{"urlPathTemplate":"/risk-assessments/settings/new-device","method":"GET"},"response":{"status":200,"body":"{\n \"remember_for\": 1\n}","headers":{"Content-Type":"application/json"}},"uuid":"b25bc47f-4ec8-4cd8-b419-5323232b8bb8","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"07a0ab5c-d2e9-4e3d-899b-3f9a833c3813","name":"Update new device assessor - default","request":{"urlPathTemplate":"/risk-assessments/settings/new-device","method":"PATCH"},"response":{"status":200,"body":"{\n \"remember_for\": 1\n}","headers":{"Content-Type":"application/json"}},"uuid":"07a0ab5c-d2e9-4e3d-899b-3f9a833c3813","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"bf10686c-2651-4040-8299-93e4bbc9834d","name":"Get permissions granted by role - default","request":{"urlPathTemplate":"/roles/{id}/permissions","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"permissions\": [\n {\n \"resource_server_identifier\": \"resource_server_identifier\",\n \"permission_name\": \"permission_name\",\n \"resource_server_name\": \"resource_server_name\",\n \"description\": \"description\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"bf10686c-2651-4040-8299-93e4bbc9834d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"23e27895-e8da-4c4d-bec9-94df0205eb5c","name":"Associate permissions with a role - default","request":{"urlPathTemplate":"/roles/{id}/permissions","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"23e27895-e8da-4c4d-bec9-94df0205eb5c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"b94e86fc-05a4-43a3-a57f-ecd7e72ca50a","name":"Remove permissions from a role - default","request":{"urlPathTemplate":"/roles/{id}/permissions","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"b94e86fc-05a4-43a3-a57f-ecd7e72ca50a","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c87640fd-900b-400f-93f0-9ccb6702a609","name":"Get a role's users - default","request":{"urlPathTemplate":"/roles/{id}/users","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"users\": [\n {\n \"user_id\": \"user_id\",\n \"picture\": \"picture\",\n \"name\": \"name\",\n \"email\": \"email\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"c87640fd-900b-400f-93f0-9ccb6702a609","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3715bf7c-6aeb-4cbb-b3a0-57d86272ae3f","name":"Assign users to a role - default","request":{"urlPathTemplate":"/roles/{id}/users","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"3715bf7c-6aeb-4cbb-b3a0-57d86272ae3f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"f6173c4f-82c6-420c-a40d-889a713cb3e7","name":"Get custom text for a self-service profile - default","request":{"urlPathTemplate":"/self-service-profiles/{id}/custom-text/{language}/{page}","method":"GET","pathParameters":{"id":{"equalTo":"id"},"language":{"equalTo":"en"},"page":{"equalTo":"get-started"}}},"response":{"status":200,"body":"{\n \"key\": \"value\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"f6173c4f-82c6-420c-a40d-889a713cb3e7","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"52a78cce-bea7-4f10-be84-5b860989a20e","name":"Set custom text for a self-service profile - default","request":{"urlPathTemplate":"/self-service-profiles/{id}/custom-text/{language}/{page}","method":"PUT","pathParameters":{"id":{"equalTo":"id"},"language":{"equalTo":"en"},"page":{"equalTo":"get-started"}}},"response":{"status":200,"body":"{\n \"key\": \"value\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"52a78cce-bea7-4f10-be84-5b860989a20e","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"47229b19-16ff-4ccd-8fd2-7f925b1743c4","name":"Create an SSO access ticket to initiate the Self Service SSO Flow - default","request":{"urlPathTemplate":"/self-service-profiles/{id}/sso-ticket","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"ticket\": \"ticket\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"47229b19-16ff-4ccd-8fd2-7f925b1743c4","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"e406adeb-54e0-4218-9e0c-edbfbf0a64bf","name":"Revoke an SSO access ticket - default","request":{"urlPathTemplate":"/self-service-profiles/{profileId}/sso-ticket/{id}/revoke","method":"POST","pathParameters":{"profileId":{"equalTo":"profileId"},"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"e406adeb-54e0-4218-9e0c-edbfbf0a64bf","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"12199f5c-a53a-4405-8a5f-a83867b89865","name":"Get tenant settings - default","request":{"urlPathTemplate":"/tenants/settings","method":"GET"},"response":{"status":200,"body":"{\n \"change_password\": {\n \"enabled\": true,\n \"html\": \"html\"\n },\n \"guardian_mfa_page\": {\n \"enabled\": true,\n \"html\": \"html\"\n },\n \"default_audience\": \"default_audience\",\n \"default_directory\": \"default_directory\",\n \"error_page\": {\n \"html\": \"html\",\n \"show_log_link\": true,\n \"url\": \"url\"\n },\n \"device_flow\": {\n \"charset\": \"base20\",\n \"mask\": \"mask\"\n },\n \"default_token_quota\": {\n \"clients\": {\n \"client_credentials\": {}\n },\n \"organizations\": {\n \"client_credentials\": {}\n }\n },\n \"flags\": {\n \"change_pwd_flow_v1\": true,\n \"enable_apis_section\": true,\n \"disable_impersonation\": true,\n \"enable_client_connections\": true,\n \"enable_pipeline2\": true,\n \"allow_legacy_delegation_grant_types\": true,\n \"allow_legacy_ro_grant_types\": true,\n \"allow_legacy_tokeninfo_endpoint\": true,\n \"enable_legacy_profile\": true,\n \"enable_idtoken_api2\": true,\n \"enable_public_signup_user_exists_error\": true,\n \"enable_sso\": true,\n \"allow_changing_enable_sso\": true,\n \"disable_clickjack_protection_headers\": true,\n \"no_disclose_enterprise_connections\": true,\n \"enforce_client_authentication_on_passwordless_start\": true,\n \"enable_adfs_waad_email_verification\": true,\n \"revoke_refresh_token_grant\": true,\n \"dashboard_log_streams_next\": true,\n \"dashboard_insights_view\": true,\n \"disable_fields_map_fix\": true,\n \"mfa_show_factor_list_on_enrollment\": true,\n \"remove_alg_from_jwks\": true,\n \"improved_signup_bot_detection_in_classic\": true,\n \"genai_trial\": true,\n \"enable_dynamic_client_registration\": true,\n \"disable_management_api_sms_obfuscation\": true,\n \"trust_azure_adfs_email_verified_connection_property\": true,\n \"custom_domains_provisioning\": true\n },\n \"friendly_name\": \"friendly_name\",\n \"picture_url\": \"picture_url\",\n \"support_email\": \"support_email\",\n \"support_url\": \"support_url\",\n \"allowed_logout_urls\": [\n \"allowed_logout_urls\"\n ],\n \"session_lifetime\": 1.1,\n \"idle_session_lifetime\": 1.1,\n \"ephemeral_session_lifetime\": 1.1,\n \"idle_ephemeral_session_lifetime\": 1.1,\n \"sandbox_version\": \"sandbox_version\",\n \"legacy_sandbox_version\": \"legacy_sandbox_version\",\n \"sandbox_versions_available\": [\n \"sandbox_versions_available\"\n ],\n \"default_redirection_uri\": \"default_redirection_uri\",\n \"enabled_locales\": [\n \"am\"\n ],\n \"session_cookie\": {\n \"mode\": \"persistent\"\n },\n \"sessions\": {\n \"oidc_logout_prompt_enabled\": true\n },\n \"oidc_logout\": {\n \"rp_logout_end_session_endpoint_discovery\": true\n },\n \"allow_organization_name_in_authentication_api\": true,\n \"customize_mfa_in_postlogin_action\": true,\n \"acr_values_supported\": [\n \"acr_values_supported\"\n ],\n \"mtls\": {\n \"enable_endpoint_aliases\": true\n },\n \"pushed_authorization_requests_supported\": true,\n \"authorization_response_iss_parameter_supported\": true,\n \"skip_non_verifiable_callback_uri_confirmation_prompt\": true,\n \"resource_parameter_profile\": \"audience\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"12199f5c-a53a-4405-8a5f-a83867b89865","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"48a056e4-f2d6-45a2-9b0a-3b7d173c8597","name":"Update tenant settings - default","request":{"urlPathTemplate":"/tenants/settings","method":"PATCH"},"response":{"status":200,"body":"{\n \"change_password\": {\n \"enabled\": true,\n \"html\": \"html\"\n },\n \"guardian_mfa_page\": {\n \"enabled\": true,\n \"html\": \"html\"\n },\n \"default_audience\": \"default_audience\",\n \"default_directory\": \"default_directory\",\n \"error_page\": {\n \"html\": \"html\",\n \"show_log_link\": true,\n \"url\": \"url\"\n },\n \"device_flow\": {\n \"charset\": \"base20\",\n \"mask\": \"mask\"\n },\n \"default_token_quota\": {\n \"clients\": {\n \"client_credentials\": {}\n },\n \"organizations\": {\n \"client_credentials\": {}\n }\n },\n \"flags\": {\n \"change_pwd_flow_v1\": true,\n \"enable_apis_section\": true,\n \"disable_impersonation\": true,\n \"enable_client_connections\": true,\n \"enable_pipeline2\": true,\n \"allow_legacy_delegation_grant_types\": true,\n \"allow_legacy_ro_grant_types\": true,\n \"allow_legacy_tokeninfo_endpoint\": true,\n \"enable_legacy_profile\": true,\n \"enable_idtoken_api2\": true,\n \"enable_public_signup_user_exists_error\": true,\n \"enable_sso\": true,\n \"allow_changing_enable_sso\": true,\n \"disable_clickjack_protection_headers\": true,\n \"no_disclose_enterprise_connections\": true,\n \"enforce_client_authentication_on_passwordless_start\": true,\n \"enable_adfs_waad_email_verification\": true,\n \"revoke_refresh_token_grant\": true,\n \"dashboard_log_streams_next\": true,\n \"dashboard_insights_view\": true,\n \"disable_fields_map_fix\": true,\n \"mfa_show_factor_list_on_enrollment\": true,\n \"remove_alg_from_jwks\": true,\n \"improved_signup_bot_detection_in_classic\": true,\n \"genai_trial\": true,\n \"enable_dynamic_client_registration\": true,\n \"disable_management_api_sms_obfuscation\": true,\n \"trust_azure_adfs_email_verified_connection_property\": true,\n \"custom_domains_provisioning\": true\n },\n \"friendly_name\": \"friendly_name\",\n \"picture_url\": \"picture_url\",\n \"support_email\": \"support_email\",\n \"support_url\": \"support_url\",\n \"allowed_logout_urls\": [\n \"allowed_logout_urls\"\n ],\n \"session_lifetime\": 1.1,\n \"idle_session_lifetime\": 1.1,\n \"ephemeral_session_lifetime\": 1.1,\n \"idle_ephemeral_session_lifetime\": 1.1,\n \"sandbox_version\": \"sandbox_version\",\n \"legacy_sandbox_version\": \"legacy_sandbox_version\",\n \"sandbox_versions_available\": [\n \"sandbox_versions_available\"\n ],\n \"default_redirection_uri\": \"default_redirection_uri\",\n \"enabled_locales\": [\n \"am\"\n ],\n \"session_cookie\": {\n \"mode\": \"persistent\"\n },\n \"sessions\": {\n \"oidc_logout_prompt_enabled\": true\n },\n \"oidc_logout\": {\n \"rp_logout_end_session_endpoint_discovery\": true\n },\n \"allow_organization_name_in_authentication_api\": true,\n \"customize_mfa_in_postlogin_action\": true,\n \"acr_values_supported\": [\n \"acr_values_supported\"\n ],\n \"mtls\": {\n \"enable_endpoint_aliases\": true\n },\n \"pushed_authorization_requests_supported\": true,\n \"authorization_response_iss_parameter_supported\": true,\n \"skip_non_verifiable_callback_uri_confirmation_prompt\": true,\n \"resource_parameter_profile\": \"audience\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"48a056e4-f2d6-45a2-9b0a-3b7d173c8597","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3d87eb15-86f8-42c9-b9bf-b1bdcb1d72d5","name":"Get a list of authentication methods - default","request":{"urlPathTemplate":"/users/{id}/authentication-methods","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"authenticators\": [\n {\n \"id\": \"id\",\n \"type\": \"recovery-code\",\n \"confirmed\": true,\n \"name\": \"name\",\n \"authentication_methods\": [\n {}\n ],\n \"preferred_authentication_method\": \"voice\",\n \"link_id\": \"link_id\",\n \"phone_number\": \"phone_number\",\n \"email\": \"email\",\n \"key_id\": \"key_id\",\n \"public_key\": \"public_key\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"enrolled_at\": \"2024-01-15T09:30:00Z\",\n \"last_auth_at\": \"2024-01-15T09:30:00Z\",\n \"credential_device_type\": \"credential_device_type\",\n \"credential_backed_up\": true,\n \"identity_user_id\": \"identity_user_id\",\n \"user_agent\": \"user_agent\",\n \"aaguid\": \"aaguid\",\n \"relying_party_identifier\": \"relying_party_identifier\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"3d87eb15-86f8-42c9-b9bf-b1bdcb1d72d5","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a786d309-f573-4722-9c1a-4336dcb2ca34","name":"Creates an authentication method for a given user - default","request":{"urlPathTemplate":"/users/{id}/authentication-methods","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"type\": \"phone\",\n \"name\": \"name\",\n \"totp_secret\": \"totp_secret\",\n \"phone_number\": \"phone_number\",\n \"email\": \"email\",\n \"authentication_methods\": [\n {\n \"type\": \"totp\",\n \"id\": \"id\"\n }\n ],\n \"preferred_authentication_method\": \"voice\",\n \"key_id\": \"key_id\",\n \"public_key\": \"public_key\",\n \"aaguid\": \"aaguid\",\n \"relying_party_identifier\": \"relying_party_identifier\",\n \"created_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"a786d309-f573-4722-9c1a-4336dcb2ca34","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"de90147a-4c08-43b0-9e64-3c7afab7fe48","name":"Update all authentication methods by replacing them with the given ones - default","request":{"urlPathTemplate":"/users/{id}/authentication-methods","method":"PUT","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"[\n {\n \"id\": \"id\",\n \"type\": \"phone\",\n \"name\": \"name\",\n \"totp_secret\": \"totp_secret\",\n \"phone_number\": \"phone_number\",\n \"email\": \"email\",\n \"authentication_methods\": [\n {}\n ],\n \"preferred_authentication_method\": \"voice\",\n \"key_id\": \"key_id\",\n \"public_key\": \"public_key\",\n \"aaguid\": \"aaguid\",\n \"relying_party_identifier\": \"relying_party_identifier\",\n \"created_at\": \"2024-01-15T09:30:00Z\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"de90147a-4c08-43b0-9e64-3c7afab7fe48","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0fd546c5-9e1f-4319-b6f2-9ee49c498250","name":"Delete all authentication methods for the given user - default","request":{"urlPathTemplate":"/users/{id}/authentication-methods","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"0fd546c5-9e1f-4319-b6f2-9ee49c498250","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"a3ee9cc4-e4af-46b6-9fcc-371bb0db0e03","name":"Get an authentication method by ID - default","request":{"urlPathTemplate":"/users/{id}/authentication-methods/{authentication_method_id}","method":"GET","pathParameters":{"id":{"equalTo":"id"},"authentication_method_id":{"equalTo":"authentication_method_id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"type\": \"recovery-code\",\n \"confirmed\": true,\n \"name\": \"name\",\n \"authentication_methods\": [\n {\n \"type\": \"totp\",\n \"id\": \"id\"\n }\n ],\n \"preferred_authentication_method\": \"voice\",\n \"link_id\": \"link_id\",\n \"phone_number\": \"phone_number\",\n \"email\": \"email\",\n \"key_id\": \"key_id\",\n \"public_key\": \"public_key\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"enrolled_at\": \"2024-01-15T09:30:00Z\",\n \"last_auth_at\": \"2024-01-15T09:30:00Z\",\n \"credential_device_type\": \"credential_device_type\",\n \"credential_backed_up\": true,\n \"identity_user_id\": \"identity_user_id\",\n \"user_agent\": \"user_agent\",\n \"aaguid\": \"aaguid\",\n \"relying_party_identifier\": \"relying_party_identifier\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"a3ee9cc4-e4af-46b6-9fcc-371bb0db0e03","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"add53361-2a24-44ea-93fe-fd31b9981468","name":"Delete an authentication method by ID - default","request":{"urlPathTemplate":"/users/{id}/authentication-methods/{authentication_method_id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"authentication_method_id":{"equalTo":"authentication_method_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"add53361-2a24-44ea-93fe-fd31b9981468","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1cfc820b-23ae-4b7b-8b10-d9e1c2825e51","name":"Update an authentication method - default","request":{"urlPathTemplate":"/users/{id}/authentication-methods/{authentication_method_id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"},"authentication_method_id":{"equalTo":"authentication_method_id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"type\": \"phone\",\n \"name\": \"name\",\n \"totp_secret\": \"totp_secret\",\n \"phone_number\": \"phone_number\",\n \"email\": \"email\",\n \"authentication_methods\": [\n {\n \"type\": \"totp\",\n \"id\": \"id\"\n }\n ],\n \"preferred_authentication_method\": \"voice\",\n \"key_id\": \"key_id\",\n \"public_key\": \"public_key\",\n \"aaguid\": \"aaguid\",\n \"relying_party_identifier\": \"relying_party_identifier\",\n \"created_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"1cfc820b-23ae-4b7b-8b10-d9e1c2825e51","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"59e259ee-3764-496e-9875-949a218233be","name":"Delete All Authenticators - default","request":{"urlPathTemplate":"/users/{id}/authenticators","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"59e259ee-3764-496e-9875-949a218233be","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0f4d4b1f-e7f1-42bd-8a14-64c2e7348b16","name":"Get a User's Connected Accounts - default","request":{"urlPathTemplate":"/users/{id}/connected-accounts","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"connected_accounts\": [\n {\n \"id\": \"id\",\n \"connection\": \"connection\",\n \"connection_id\": \"connection_id\",\n \"strategy\": \"strategy\",\n \"access_type\": \"offline\",\n \"scopes\": [\n \"scopes\"\n ],\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"next\": \"next\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"0f4d4b1f-e7f1-42bd-8a14-64c2e7348b16","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"4fb03086-4c19-4d4d-a060-b0f30cbed64f","name":"Get the First Confirmed Multi-factor Authentication Enrollment - default","request":{"urlPathTemplate":"/users/{id}/enrollments","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"[\n {\n \"id\": \"id\",\n \"status\": \"pending\",\n \"type\": \"type\",\n \"name\": \"name\",\n \"identifier\": \"identifier\",\n \"phone_number\": \"phone_number\",\n \"auth_method\": \"authenticator\",\n \"enrolled_at\": \"2024-01-15T09:30:00Z\",\n \"last_auth\": \"2024-01-15T09:30:00Z\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"4fb03086-4c19-4d4d-a060-b0f30cbed64f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"7df16d6a-51ec-415e-a605-f161474b5a60","name":"Get tokensets for a user - default","request":{"urlPathTemplate":"/users/{id}/federated-connections-tokensets","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"[\n {\n \"id\": \"id\",\n \"connection\": \"connection\",\n \"scope\": \"scope\",\n \"expires_at\": \"2024-01-15T09:30:00Z\",\n \"issued_at\": \"2024-01-15T09:30:00Z\",\n \"last_used_at\": \"2024-01-15T09:30:00Z\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"7df16d6a-51ec-415e-a605-f161474b5a60","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2dd7f5e1-dfec-4564-8331-8dd9d7ecfa93","name":"Deletes a tokenset for federated connections by id. - default","request":{"urlPathTemplate":"/users/{id}/federated-connections-tokensets/{tokenset_id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"tokenset_id":{"equalTo":"tokenset_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"2dd7f5e1-dfec-4564-8331-8dd9d7ecfa93","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0333210f-005f-4731-9928-1487697620ba","name":"Link a User Account - default","request":{"urlPathTemplate":"/users/{id}/identities","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":201,"body":"[\n {\n \"connection\": \"connection\",\n \"user_id\": \"user_id\",\n \"provider\": \"provider\",\n \"profileData\": {\n \"email\": \"email\",\n \"email_verified\": true,\n \"name\": \"name\",\n \"username\": \"username\",\n \"given_name\": \"given_name\",\n \"phone_number\": \"phone_number\",\n \"phone_verified\": true,\n \"family_name\": \"family_name\"\n },\n \"isSocial\": true,\n \"access_token\": \"access_token\",\n \"access_token_secret\": \"access_token_secret\",\n \"refresh_token\": \"refresh_token\"\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"0333210f-005f-4731-9928-1487697620ba","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"2dc23165-ddbe-4c7a-8f82-ed8cb6afed3c","name":"Unlink a User Identity - default","request":{"urlPathTemplate":"/users/{id}/identities/{provider}/{user_id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"provider":{"equalTo":"ad"},"user_id":{"equalTo":"user_id"}}},"response":{"status":200,"body":"[\n {\n \"connection\": \"connection\",\n \"user_id\": \"user_id\",\n \"provider\": \"provider\",\n \"isSocial\": true,\n \"access_token\": \"access_token\",\n \"access_token_secret\": \"access_token_secret\",\n \"refresh_token\": \"refresh_token\",\n \"profileData\": {\n \"email\": \"email\",\n \"email_verified\": true,\n \"name\": \"name\",\n \"username\": \"username\",\n \"given_name\": \"given_name\",\n \"phone_number\": \"phone_number\",\n \"phone_verified\": true,\n \"family_name\": \"family_name\"\n }\n }\n]","headers":{"Content-Type":"application/json"}},"uuid":"2dc23165-ddbe-4c7a-8f82-ed8cb6afed3c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"bb12a5f2-c0fc-41b9-874a-4d0b151ca508","name":"Get user's log events - default","request":{"urlPathTemplate":"/users/{id}/logs","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"length\": 1.1,\n \"total\": 1.1,\n \"logs\": [\n {\n \"date\": \"date\",\n \"type\": \"type\",\n \"description\": \"description\",\n \"connection\": \"connection\",\n \"connection_id\": \"connection_id\",\n \"client_id\": \"client_id\",\n \"client_name\": \"client_name\",\n \"ip\": \"ip\",\n \"hostname\": \"hostname\",\n \"user_id\": \"user_id\",\n \"user_name\": \"user_name\",\n \"audience\": \"audience\",\n \"scope\": \"scope\",\n \"strategy\": \"strategy\",\n \"strategy_type\": \"strategy_type\",\n \"log_id\": \"log_id\",\n \"isMobile\": true,\n \"details\": {\n \"key\": \"value\"\n },\n \"user_agent\": \"user_agent\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"bb12a5f2-c0fc-41b9-874a-4d0b151ca508","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"8224b345-c369-4d08-b366-81060009c441","name":"Invalidate All Remembered Browsers for Multi-factor Authentication - default","request":{"urlPathTemplate":"/users/{id}/multifactor/actions/invalidate-remember-browser","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"8224b345-c369-4d08-b366-81060009c441","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"86847e95-c858-46df-b005-c0f0392ae95c","name":"Delete a User's Multi-factor Provider - default","request":{"urlPathTemplate":"/users/{id}/multifactor/{provider}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"},"provider":{"equalTo":"duo"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"86847e95-c858-46df-b005-c0f0392ae95c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"3a825384-1ed6-44a5-9a15-b2be0438a1d6","name":"List user's organizations - default","request":{"urlPathTemplate":"/users/{id}/organizations","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"organizations\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"display_name\": \"display_name\",\n \"token_quota\": {\n \"client_credentials\": {}\n }\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"3a825384-1ed6-44a5-9a15-b2be0438a1d6","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"58cc0983-45ee-47d2-8a5c-b6e215c83942","name":"Get a User's Permissions - default","request":{"urlPathTemplate":"/users/{id}/permissions","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"permissions\": [\n {\n \"resource_server_identifier\": \"resource_server_identifier\",\n \"permission_name\": \"permission_name\",\n \"resource_server_name\": \"resource_server_name\",\n \"description\": \"description\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"58cc0983-45ee-47d2-8a5c-b6e215c83942","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"812e845d-b47e-41b3-ad6b-edf602577cc4","name":"Assign Permissions to a User - default","request":{"urlPathTemplate":"/users/{id}/permissions","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"812e845d-b47e-41b3-ad6b-edf602577cc4","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"6829e581-25db-4d58-99ad-1fd675c362f1","name":"Remove Permissions from a User - default","request":{"urlPathTemplate":"/users/{id}/permissions","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"6829e581-25db-4d58-99ad-1fd675c362f1","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0bf944f2-8c7e-474c-82eb-9e21bb625219","name":"Clear risk assessment assessors for a specific user - default","request":{"urlPathTemplate":"/users/{id}/risk-assessments/clear","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"0bf944f2-8c7e-474c-82eb-9e21bb625219","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"96a14af0-6c21-49ec-af86-512e672dd464","name":"Get a user's roles - default","request":{"urlPathTemplate":"/users/{id}/roles","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"start\": 1.1,\n \"limit\": 1.1,\n \"total\": 1.1,\n \"roles\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"description\": \"description\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"96a14af0-6c21-49ec-af86-512e672dd464","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"fcc9270b-77f1-4374-b64e-ce2381665996","name":"Assign roles to a user - default","request":{"urlPathTemplate":"/users/{id}/roles","method":"POST","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"fcc9270b-77f1-4374-b64e-ce2381665996","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"c727015f-123f-4f98-9b24-25828361a4ab","name":"Removes roles from a user - default","request":{"urlPathTemplate":"/users/{id}/roles","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"c727015f-123f-4f98-9b24-25828361a4ab","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"28b46c14-5cc3-42ad-8808-0072fb3249ba","name":"Get refresh tokens for a user - default","request":{"urlPathTemplate":"/users/{user_id}/refresh-tokens","method":"GET","pathParameters":{"user_id":{"equalTo":"user_id"}}},"response":{"status":200,"body":"{\n \"tokens\": [\n {\n \"id\": \"id\",\n \"user_id\": \"user_id\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"idle_expires_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\",\n \"client_id\": \"client_id\",\n \"session_id\": \"session_id\",\n \"rotating\": true,\n \"resource_servers\": [\n {}\n ],\n \"last_exchanged_at\": \"2024-01-15T09:30:00Z\"\n }\n ],\n \"next\": \"next\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"28b46c14-5cc3-42ad-8808-0072fb3249ba","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"1f25d8aa-36f6-4ba8-9865-27c99731105f","name":"Delete refresh tokens for a user - default","request":{"urlPathTemplate":"/users/{user_id}/refresh-tokens","method":"DELETE","pathParameters":{"user_id":{"equalTo":"user_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"1f25d8aa-36f6-4ba8-9865-27c99731105f","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"dd1c4072-54e4-4dbc-82d9-ca1c27916f1d","name":"Get sessions for user - default","request":{"urlPathTemplate":"/users/{user_id}/sessions","method":"GET","pathParameters":{"user_id":{"equalTo":"user_id"}}},"response":{"status":200,"body":"{\n \"sessions\": [\n {\n \"id\": \"id\",\n \"user_id\": \"user_id\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\",\n \"authenticated_at\": \"2024-01-15T09:30:00Z\",\n \"idle_expires_at\": \"2024-01-15T09:30:00Z\",\n \"expires_at\": \"2024-01-15T09:30:00Z\",\n \"last_interacted_at\": \"2024-01-15T09:30:00Z\",\n \"clients\": [\n {}\n ],\n \"session_metadata\": {\n \"key\": \"value\"\n }\n }\n ],\n \"next\": \"next\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"dd1c4072-54e4-4dbc-82d9-ca1c27916f1d","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"0691684c-d746-4411-aa18-4de52a90a463","name":"Delete sessions for user - default","request":{"urlPathTemplate":"/users/{user_id}/sessions","method":"DELETE","pathParameters":{"user_id":{"equalTo":"user_id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"0691684c-d746-4411-aa18-4de52a90a463","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"7424dc01-51cd-4cc9-b47d-082a7931e487","name":"List verifiable credentials template for tenant. - default","request":{"urlPathTemplate":"/verifiable-credentials/verification/templates","method":"GET"},"response":{"status":200,"body":"{\n \"next\": \"next\",\n \"templates\": [\n {\n \"id\": \"id\",\n \"name\": \"name\",\n \"type\": \"type\",\n \"dialect\": \"dialect\",\n \"presentation\": {\n \"org.iso.18013.5.1.mDL\": {\n \"org.iso.18013.5.1\": {}\n }\n },\n \"custom_certificate_authority\": \"custom_certificate_authority\",\n \"well_known_trusted_issuers\": \"well_known_trusted_issuers\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n }\n ]\n}","headers":{"Content-Type":"application/json"}},"uuid":"7424dc01-51cd-4cc9-b47d-082a7931e487","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}},"postServeActions":[]},{"id":"65b53386-72a6-4ac3-afba-c41377b10e93","name":"Create a verifiable credential template. - default","request":{"urlPathTemplate":"/verifiable-credentials/verification/templates","method":"POST"},"response":{"status":201,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"type\": \"type\",\n \"dialect\": \"dialect\",\n \"presentation\": {\n \"org.iso.18013.5.1.mDL\": {\n \"org.iso.18013.5.1\": {}\n }\n },\n \"custom_certificate_authority\": \"custom_certificate_authority\",\n \"well_known_trusted_issuers\": \"well_known_trusted_issuers\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"65b53386-72a6-4ac3-afba-c41377b10e93","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"bac80375-0249-4659-a3d4-3cad535b4a20","name":"Get a verifiable credential template by ID. - default","request":{"urlPathTemplate":"/verifiable-credentials/verification/templates/{id}","method":"GET","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"type\": \"type\",\n \"dialect\": \"dialect\",\n \"presentation\": {\n \"org.iso.18013.5.1.mDL\": {\n \"org.iso.18013.5.1\": {}\n }\n },\n \"custom_certificate_authority\": \"custom_certificate_authority\",\n \"well_known_trusted_issuers\": \"well_known_trusted_issuers\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"bac80375-0249-4659-a3d4-3cad535b4a20","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"ca7ff9f3-642c-4fae-92b4-0e4e95f34d4c","name":"Delete a verifiable credential template by ID. - default","request":{"urlPathTemplate":"/verifiable-credentials/verification/templates/{id}","method":"DELETE","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"\"\"","headers":{"Content-Type":"application/json"}},"uuid":"ca7ff9f3-642c-4fae-92b4-0e4e95f34d4c","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}},{"id":"9934fba5-6f64-4698-89dd-6123d0878561","name":"Update a verifiable credential template by ID. - default","request":{"urlPathTemplate":"/verifiable-credentials/verification/templates/{id}","method":"PATCH","pathParameters":{"id":{"equalTo":"id"}}},"response":{"status":200,"body":"{\n \"id\": \"id\",\n \"name\": \"name\",\n \"type\": \"type\",\n \"dialect\": \"dialect\",\n \"presentation\": {\n \"org.iso.18013.5.1.mDL\": {\n \"org.iso.18013.5.1\": {}\n }\n },\n \"custom_certificate_authority\": \"custom_certificate_authority\",\n \"well_known_trusted_issuers\": \"well_known_trusted_issuers\",\n \"created_at\": \"2024-01-15T09:30:00Z\",\n \"updated_at\": \"2024-01-15T09:30:00Z\"\n}","headers":{"Content-Type":"application/json"}},"uuid":"9934fba5-6f64-4698-89dd-6123d0878561","persistent":true,"priority":3,"metadata":{"mocklab":{"created":{"at":"2020-01-01T00:00:00.000Z","via":"SYSTEM"}}}}],"meta":{"total":368}}
\ No newline at end of file
From 25958f4e16073509b1b6ab0aee2c8f2f9e27b6b3 Mon Sep 17 00:00:00 2001
From: Snehil Kishore