diff --git a/.fern/metadata.json b/.fern/metadata.json
index 3ce9b76e..116c2979 100644
--- a/.fern/metadata.json
+++ b/.fern/metadata.json
@@ -55,5 +55,5 @@
}
]
},
- "originGitCommit": "b989ef0a4d6a8c90b4a9e3935f9c1fa5144a7098"
+ "originGitCommit": "64f71eb5677230e7df074ef6b4478e0f51a3b616"
}
\ No newline at end of file
diff --git a/.fern/replay.lock b/.fern/replay.lock
index 1688e8e5..5c027d88 100644
--- a/.fern/replay.lock
+++ b/.fern/replay.lock
@@ -24,7 +24,13 @@ generations:
cli_version: unknown
generator_versions:
fernapi/fern-python-sdk: 4.42.0
-current_generation: 9a1aed5baf8ba11a6319713529deadb212aa38de
+ - commit_sha: 50965d3c84d178394d7276feaf440e1180077570
+ tree_hash: 80f079181bbb8c25740527893363c3c3365293e5
+ timestamp: 2026-07-13T08:25:02.899Z
+ cli_version: unknown
+ generator_versions:
+ fernapi/fern-python-sdk: 4.42.0
+current_generation: 50965d3c84d178394d7276feaf440e1180077570
patches:
- id: patch-1b45413e
content_hash: sha256:39ab43ecd30a8791dc5eef09812657f167c0c1dfe33609c89795b12015738682
diff --git a/pyproject.toml b/pyproject.toml
index a0468adc..775388c5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ dynamic = ["version"]
[tool.poetry]
name = "elevenlabs"
-version = "2.57.0"
+version = "2.58.0"
description = ""
readme = "README.md"
authors = []
diff --git a/reference.md b/reference.md
index 795a7037..14bc7dda 100644
--- a/reference.md
+++ b/reference.md
@@ -6791,6 +6791,84 @@ client.service_accounts.list()
+
+
+
+
+client.service_accounts.create(...)
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from elevenlabs import ElevenLabs
+
+client = ElevenLabs(
+ api_key="YOUR_API_KEY",
+)
+client.service_accounts.create(
+ name="name",
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**name:** `str`
+
+
+
+
+
+-
+
+**default_sharing_groups:** `typing.Optional[typing.Sequence[DefaultSharingGroupConfig]]` — List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer).
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
@@ -30938,6 +31016,14 @@ client.workspace.invites.create(
-
+**usage_limit:** `typing.Optional[int]` — Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
+
+
+
+
+-
+
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -31024,6 +31110,14 @@ client.workspace.invites.create_batch(
-
+**usage_limit:** `typing.Optional[int]` — Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
+
+
+
+
+-
+
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -31107,6 +31201,66 @@ client.workspace.invites.delete(
## Workspace Members
+client.workspace.members.list()
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from elevenlabs import ElevenLabs
+
+client = ElevenLabs(
+ api_key="YOUR_API_KEY",
+)
+client.workspace.members.list()
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
+
+
+
+
client.workspace.members.update(...)
-
diff --git a/src/elevenlabs/__init__.py b/src/elevenlabs/__init__.py
index dbc0e273..500d08c0 100644
--- a/src/elevenlabs/__init__.py
+++ b/src/elevenlabs/__init__.py
@@ -574,6 +574,8 @@
DashboardCriteriaChartModel,
DashboardDataCollectionChartModel,
DataCollectionResultCommonModel,
+ DefaultSharingGroupConfig,
+ DefaultSharingGroupConfigPermissionLevel,
DefaultSharingGroupResponseModel,
DefaultSharingGroupResponseModelPermissionLevel,
DeleteAgentProcedureParams,
@@ -1501,10 +1503,14 @@
TextNormalisationType,
TextToDialogueWebsocketApplyTextNormalizationEnum,
TextToDialogueWebsocketAudioChunk,
+ TextToDialogueWebsocketAudioChunkMulti,
TextToDialogueWebsocketClientMessage,
+ TextToDialogueWebsocketClientMessageMulti,
TextToDialogueWebsocketError,
TextToDialogueWebsocketFinal,
TextToDialogueWebsocketFinalAudioForTurn,
+ TextToDialogueWebsocketFinalAudioForTurnMulti,
+ TextToDialogueWebsocketFinalMulti,
TextToDialogueWebsocketOutputFormatEnum,
TextToDialogueWebsocketVoiceInput,
TextToDialogueWebsocketVoiceSettings,
@@ -1871,12 +1877,14 @@
WorkspaceAuditLogsPageResponse,
WorkspaceBatchCallsResponse,
WorkspaceCreateApiKeyResponseModel,
+ WorkspaceCreateServiceAccountResponseModel,
WorkspaceCreateWebhookResponseModel,
WorkspaceGroupByNameResponseModel,
WorkspaceGroupPermission,
WorkspaceGroupResponseModel,
WorkspaceGroupResponseModelGroupPvcLimit,
WorkspaceGroupResponseModelGroupUsageLimit,
+ WorkspaceMemberResponseModel,
WorkspaceResourceType,
WorkspaceServiceAccountListResponseModel,
WorkspaceServiceAccountResponseModel,
@@ -1920,6 +1928,7 @@
usage,
user,
v_1_speech_to_text_realtime,
+ v_1_text_to_dialogue_multi_stream_input,
v_1_text_to_dialogue_stream_input,
v_1_text_to_speech_voice_id_multi_stream_input,
v_1_text_to_speech_voice_id_stream_input,
@@ -2033,6 +2042,7 @@
)
from .text_to_voice import VoiceDesignRequestModelModelId
from .v_1_speech_to_text_realtime import ReceiveTranscription, TextToSpeechCommitStrategy
+ from .v_1_text_to_dialogue_multi_stream_input import ReceiveTextToDialogueWebsocketMessageMulti
from .v_1_text_to_dialogue_stream_input import ReceiveTextToDialogueWebsocketMessage
from .v_1_text_to_speech_voice_id_multi_stream_input import ReceiveMessageMulti, SendMessageMulti
from .v_1_text_to_speech_voice_id_stream_input import ReceiveMessage, SendMessage
@@ -2646,6 +2656,8 @@
"DashboardCriteriaChartModel": ".types",
"DashboardDataCollectionChartModel": ".types",
"DataCollectionResultCommonModel": ".types",
+ "DefaultSharingGroupConfig": ".types",
+ "DefaultSharingGroupConfigPermissionLevel": ".types",
"DefaultSharingGroupResponseModel": ".types",
"DefaultSharingGroupResponseModelPermissionLevel": ".types",
"DeleteAgentProcedureParams": ".types",
@@ -3389,6 +3401,7 @@
"ReceiveMessage": ".v_1_text_to_speech_voice_id_stream_input",
"ReceiveMessageMulti": ".v_1_text_to_speech_voice_id_multi_stream_input",
"ReceiveTextToDialogueWebsocketMessage": ".v_1_text_to_dialogue_stream_input",
+ "ReceiveTextToDialogueWebsocketMessageMulti": ".v_1_text_to_dialogue_multi_stream_input",
"ReceiveTranscription": ".v_1_speech_to_text_realtime",
"ReceiveTranslateStreamMessage": ".v_1_translate_realtime",
"ReceiveUpstreamMessage": ".speech_engine_upstream",
@@ -3628,10 +3641,14 @@
"TextToDialogueConvertWithTimestampsRequestOutputFormat": ".text_to_dialogue",
"TextToDialogueWebsocketApplyTextNormalizationEnum": ".types",
"TextToDialogueWebsocketAudioChunk": ".types",
+ "TextToDialogueWebsocketAudioChunkMulti": ".types",
"TextToDialogueWebsocketClientMessage": ".types",
+ "TextToDialogueWebsocketClientMessageMulti": ".types",
"TextToDialogueWebsocketError": ".types",
"TextToDialogueWebsocketFinal": ".types",
"TextToDialogueWebsocketFinalAudioForTurn": ".types",
+ "TextToDialogueWebsocketFinalAudioForTurnMulti": ".types",
+ "TextToDialogueWebsocketFinalMulti": ".types",
"TextToDialogueWebsocketOutputFormatEnum": ".types",
"TextToDialogueWebsocketVoiceInput": ".types",
"TextToDialogueWebsocketVoiceSettings": ".types",
@@ -4011,12 +4028,14 @@
"WorkspaceAuditLogsPageResponse": ".types",
"WorkspaceBatchCallsResponse": ".types",
"WorkspaceCreateApiKeyResponseModel": ".types",
+ "WorkspaceCreateServiceAccountResponseModel": ".types",
"WorkspaceCreateWebhookResponseModel": ".types",
"WorkspaceGroupByNameResponseModel": ".types",
"WorkspaceGroupPermission": ".types",
"WorkspaceGroupResponseModel": ".types",
"WorkspaceGroupResponseModelGroupPvcLimit": ".types",
"WorkspaceGroupResponseModelGroupUsageLimit": ".types",
+ "WorkspaceMemberResponseModel": ".types",
"WorkspaceResourceType": ".types",
"WorkspaceServiceAccountListResponseModel": ".types",
"WorkspaceServiceAccountResponseModel": ".types",
@@ -4053,6 +4072,7 @@
"usage": ".usage",
"user": ".user",
"v_1_speech_to_text_realtime": ".v_1_speech_to_text_realtime",
+ "v_1_text_to_dialogue_multi_stream_input": ".v_1_text_to_dialogue_multi_stream_input",
"v_1_text_to_dialogue_stream_input": ".v_1_text_to_dialogue_stream_input",
"v_1_text_to_speech_voice_id_multi_stream_input": ".v_1_text_to_speech_voice_id_multi_stream_input",
"v_1_text_to_speech_voice_id_stream_input": ".v_1_text_to_speech_voice_id_stream_input",
@@ -4688,6 +4708,8 @@ def __dir__():
"DashboardCriteriaChartModel",
"DashboardDataCollectionChartModel",
"DataCollectionResultCommonModel",
+ "DefaultSharingGroupConfig",
+ "DefaultSharingGroupConfigPermissionLevel",
"DefaultSharingGroupResponseModel",
"DefaultSharingGroupResponseModelPermissionLevel",
"DeleteAgentProcedureParams",
@@ -5431,6 +5453,7 @@ def __dir__():
"ReceiveMessage",
"ReceiveMessageMulti",
"ReceiveTextToDialogueWebsocketMessage",
+ "ReceiveTextToDialogueWebsocketMessageMulti",
"ReceiveTranscription",
"ReceiveTranslateStreamMessage",
"ReceiveUpstreamMessage",
@@ -5670,10 +5693,14 @@ def __dir__():
"TextToDialogueConvertWithTimestampsRequestOutputFormat",
"TextToDialogueWebsocketApplyTextNormalizationEnum",
"TextToDialogueWebsocketAudioChunk",
+ "TextToDialogueWebsocketAudioChunkMulti",
"TextToDialogueWebsocketClientMessage",
+ "TextToDialogueWebsocketClientMessageMulti",
"TextToDialogueWebsocketError",
"TextToDialogueWebsocketFinal",
"TextToDialogueWebsocketFinalAudioForTurn",
+ "TextToDialogueWebsocketFinalAudioForTurnMulti",
+ "TextToDialogueWebsocketFinalMulti",
"TextToDialogueWebsocketOutputFormatEnum",
"TextToDialogueWebsocketVoiceInput",
"TextToDialogueWebsocketVoiceSettings",
@@ -6053,12 +6080,14 @@ def __dir__():
"WorkspaceAuditLogsPageResponse",
"WorkspaceBatchCallsResponse",
"WorkspaceCreateApiKeyResponseModel",
+ "WorkspaceCreateServiceAccountResponseModel",
"WorkspaceCreateWebhookResponseModel",
"WorkspaceGroupByNameResponseModel",
"WorkspaceGroupPermission",
"WorkspaceGroupResponseModel",
"WorkspaceGroupResponseModelGroupPvcLimit",
"WorkspaceGroupResponseModelGroupUsageLimit",
+ "WorkspaceMemberResponseModel",
"WorkspaceResourceType",
"WorkspaceServiceAccountListResponseModel",
"WorkspaceServiceAccountResponseModel",
@@ -6095,6 +6124,7 @@ def __dir__():
"usage",
"user",
"v_1_speech_to_text_realtime",
+ "v_1_text_to_dialogue_multi_stream_input",
"v_1_text_to_dialogue_stream_input",
"v_1_text_to_speech_voice_id_multi_stream_input",
"v_1_text_to_speech_voice_id_stream_input",
diff --git a/src/elevenlabs/core/client_wrapper.py b/src/elevenlabs/core/client_wrapper.py
index 6c309ae5..bb310b3a 100644
--- a/src/elevenlabs/core/client_wrapper.py
+++ b/src/elevenlabs/core/client_wrapper.py
@@ -22,10 +22,10 @@ def __init__(
def get_headers(self) -> typing.Dict[str, str]:
headers: typing.Dict[str, str] = {
- "User-Agent": "elevenlabs/2.57.0",
+ "User-Agent": "elevenlabs/2.58.0",
"X-Fern-Language": "Python",
"X-Fern-SDK-Name": "elevenlabs",
- "X-Fern-SDK-Version": "2.57.0",
+ "X-Fern-SDK-Version": "2.58.0",
**(self.get_custom_headers() or {}),
}
if self._api_key is not None:
diff --git a/src/elevenlabs/service_accounts/client.py b/src/elevenlabs/service_accounts/client.py
index 0856d553..f7c81d38 100644
--- a/src/elevenlabs/service_accounts/client.py
+++ b/src/elevenlabs/service_accounts/client.py
@@ -6,11 +6,15 @@
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
+from ..types.default_sharing_group_config import DefaultSharingGroupConfig
+from ..types.workspace_create_service_account_response_model import WorkspaceCreateServiceAccountResponseModel
from ..types.workspace_service_account_list_response_model import WorkspaceServiceAccountListResponseModel
from .raw_client import AsyncRawServiceAccountsClient, RawServiceAccountsClient
if typing.TYPE_CHECKING:
from .api_keys.client import ApiKeysClient, AsyncApiKeysClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
class ServiceAccountsClient:
@@ -58,6 +62,47 @@ def list(
_response = self._raw_client.list(request_options=request_options)
return _response.data
+ def create(
+ self,
+ *,
+ name: str,
+ default_sharing_groups: typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WorkspaceCreateServiceAccountResponseModel:
+ """
+ Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100.
+
+ Parameters
+ ----------
+ name : str
+
+ default_sharing_groups : typing.Optional[typing.Sequence[DefaultSharingGroupConfig]]
+ List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ WorkspaceCreateServiceAccountResponseModel
+ Successful Response
+
+ Examples
+ --------
+ from elevenlabs import ElevenLabs
+
+ client = ElevenLabs(
+ api_key="YOUR_API_KEY",
+ )
+ client.service_accounts.create(
+ name="name",
+ )
+ """
+ _response = self._raw_client.create(
+ name=name, default_sharing_groups=default_sharing_groups, request_options=request_options
+ )
+ return _response.data
+
@property
def api_keys(self):
if self._api_keys is None:
@@ -120,6 +165,55 @@ async def main() -> None:
_response = await self._raw_client.list(request_options=request_options)
return _response.data
+ async def create(
+ self,
+ *,
+ name: str,
+ default_sharing_groups: typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WorkspaceCreateServiceAccountResponseModel:
+ """
+ Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100.
+
+ Parameters
+ ----------
+ name : str
+
+ default_sharing_groups : typing.Optional[typing.Sequence[DefaultSharingGroupConfig]]
+ List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ WorkspaceCreateServiceAccountResponseModel
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from elevenlabs import AsyncElevenLabs
+
+ client = AsyncElevenLabs(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.service_accounts.create(
+ name="name",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create(
+ name=name, default_sharing_groups=default_sharing_groups, request_options=request_options
+ )
+ return _response.data
+
@property
def api_keys(self):
if self._api_keys is None:
diff --git a/src/elevenlabs/service_accounts/raw_client.py b/src/elevenlabs/service_accounts/raw_client.py
index b70155d2..42b8fd69 100644
--- a/src/elevenlabs/service_accounts/raw_client.py
+++ b/src/elevenlabs/service_accounts/raw_client.py
@@ -7,10 +7,16 @@
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.http_response import AsyncHttpResponse, HttpResponse
from ..core.request_options import RequestOptions
+from ..core.serialization import convert_and_respect_annotation_metadata
from ..core.unchecked_base_model import construct_type
from ..errors.unprocessable_entity_error import UnprocessableEntityError
+from ..types.default_sharing_group_config import DefaultSharingGroupConfig
+from ..types.workspace_create_service_account_response_model import WorkspaceCreateServiceAccountResponseModel
from ..types.workspace_service_account_list_response_model import WorkspaceServiceAccountListResponseModel
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
class RawServiceAccountsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
@@ -63,6 +69,74 @@ def list(
raise ApiError(status_code=_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,
+ default_sharing_groups: typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[WorkspaceCreateServiceAccountResponseModel]:
+ """
+ Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100.
+
+ Parameters
+ ----------
+ name : str
+
+ default_sharing_groups : typing.Optional[typing.Sequence[DefaultSharingGroupConfig]]
+ List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[WorkspaceCreateServiceAccountResponseModel]
+ Successful Response
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "v1/service-accounts",
+ method="POST",
+ json={
+ "name": name,
+ "default_sharing_groups": convert_and_respect_annotation_metadata(
+ object_=default_sharing_groups,
+ annotation=typing.Sequence[DefaultSharingGroupConfig],
+ direction="write",
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ WorkspaceCreateServiceAccountResponseModel,
+ construct_type(
+ type_=WorkspaceCreateServiceAccountResponseModel, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ construct_type(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_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 AsyncRawServiceAccountsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -114,3 +188,71 @@ async def list(
except JSONDecodeError:
raise ApiError(status_code=_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,
+ default_sharing_groups: typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[WorkspaceCreateServiceAccountResponseModel]:
+ """
+ Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100.
+
+ Parameters
+ ----------
+ name : str
+
+ default_sharing_groups : typing.Optional[typing.Sequence[DefaultSharingGroupConfig]]
+ List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer).
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[WorkspaceCreateServiceAccountResponseModel]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "v1/service-accounts",
+ method="POST",
+ json={
+ "name": name,
+ "default_sharing_groups": convert_and_respect_annotation_metadata(
+ object_=default_sharing_groups,
+ annotation=typing.Sequence[DefaultSharingGroupConfig],
+ direction="write",
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ WorkspaceCreateServiceAccountResponseModel,
+ construct_type(
+ type_=WorkspaceCreateServiceAccountResponseModel, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ construct_type(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_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/elevenlabs/types/__init__.py b/src/elevenlabs/types/__init__.py
index 42ec8f6a..e393b528 100644
--- a/src/elevenlabs/types/__init__.py
+++ b/src/elevenlabs/types/__init__.py
@@ -663,6 +663,8 @@
from .dashboard_criteria_chart_model import DashboardCriteriaChartModel
from .dashboard_data_collection_chart_model import DashboardDataCollectionChartModel
from .data_collection_result_common_model import DataCollectionResultCommonModel
+ from .default_sharing_group_config import DefaultSharingGroupConfig
+ from .default_sharing_group_config_permission_level import DefaultSharingGroupConfigPermissionLevel
from .default_sharing_group_response_model import DefaultSharingGroupResponseModel
from .default_sharing_group_response_model_permission_level import DefaultSharingGroupResponseModelPermissionLevel
from .delete_agent_procedure_params import DeleteAgentProcedureParams
@@ -1686,10 +1688,14 @@
TextToDialogueWebsocketApplyTextNormalizationEnum,
)
from .text_to_dialogue_websocket_audio_chunk import TextToDialogueWebsocketAudioChunk
+ from .text_to_dialogue_websocket_audio_chunk_multi import TextToDialogueWebsocketAudioChunkMulti
from .text_to_dialogue_websocket_client_message import TextToDialogueWebsocketClientMessage
+ from .text_to_dialogue_websocket_client_message_multi import TextToDialogueWebsocketClientMessageMulti
from .text_to_dialogue_websocket_error import TextToDialogueWebsocketError
from .text_to_dialogue_websocket_final import TextToDialogueWebsocketFinal
from .text_to_dialogue_websocket_final_audio_for_turn import TextToDialogueWebsocketFinalAudioForTurn
+ from .text_to_dialogue_websocket_final_audio_for_turn_multi import TextToDialogueWebsocketFinalAudioForTurnMulti
+ from .text_to_dialogue_websocket_final_multi import TextToDialogueWebsocketFinalMulti
from .text_to_dialogue_websocket_output_format_enum import TextToDialogueWebsocketOutputFormatEnum
from .text_to_dialogue_websocket_voice_input import TextToDialogueWebsocketVoiceInput
from .text_to_dialogue_websocket_voice_settings import TextToDialogueWebsocketVoiceSettings
@@ -2112,12 +2118,14 @@
from .workspace_audit_logs_page_response import WorkspaceAuditLogsPageResponse
from .workspace_batch_calls_response import WorkspaceBatchCallsResponse
from .workspace_create_api_key_response_model import WorkspaceCreateApiKeyResponseModel
+ from .workspace_create_service_account_response_model import WorkspaceCreateServiceAccountResponseModel
from .workspace_create_webhook_response_model import WorkspaceCreateWebhookResponseModel
from .workspace_group_by_name_response_model import WorkspaceGroupByNameResponseModel
from .workspace_group_permission import WorkspaceGroupPermission
from .workspace_group_response_model import WorkspaceGroupResponseModel
from .workspace_group_response_model_group_pvc_limit import WorkspaceGroupResponseModelGroupPvcLimit
from .workspace_group_response_model_group_usage_limit import WorkspaceGroupResponseModelGroupUsageLimit
+ from .workspace_member_response_model import WorkspaceMemberResponseModel
from .workspace_resource_type import WorkspaceResourceType
from .workspace_service_account_list_response_model import WorkspaceServiceAccountListResponseModel
from .workspace_service_account_response_model import WorkspaceServiceAccountResponseModel
@@ -2689,6 +2697,8 @@
"DashboardCriteriaChartModel": ".dashboard_criteria_chart_model",
"DashboardDataCollectionChartModel": ".dashboard_data_collection_chart_model",
"DataCollectionResultCommonModel": ".data_collection_result_common_model",
+ "DefaultSharingGroupConfig": ".default_sharing_group_config",
+ "DefaultSharingGroupConfigPermissionLevel": ".default_sharing_group_config_permission_level",
"DefaultSharingGroupResponseModel": ".default_sharing_group_response_model",
"DefaultSharingGroupResponseModelPermissionLevel": ".default_sharing_group_response_model_permission_level",
"DeleteAgentProcedureParams": ".delete_agent_procedure_params",
@@ -3616,10 +3626,14 @@
"TextNormalisationType": ".text_normalisation_type",
"TextToDialogueWebsocketApplyTextNormalizationEnum": ".text_to_dialogue_websocket_apply_text_normalization_enum",
"TextToDialogueWebsocketAudioChunk": ".text_to_dialogue_websocket_audio_chunk",
+ "TextToDialogueWebsocketAudioChunkMulti": ".text_to_dialogue_websocket_audio_chunk_multi",
"TextToDialogueWebsocketClientMessage": ".text_to_dialogue_websocket_client_message",
+ "TextToDialogueWebsocketClientMessageMulti": ".text_to_dialogue_websocket_client_message_multi",
"TextToDialogueWebsocketError": ".text_to_dialogue_websocket_error",
"TextToDialogueWebsocketFinal": ".text_to_dialogue_websocket_final",
"TextToDialogueWebsocketFinalAudioForTurn": ".text_to_dialogue_websocket_final_audio_for_turn",
+ "TextToDialogueWebsocketFinalAudioForTurnMulti": ".text_to_dialogue_websocket_final_audio_for_turn_multi",
+ "TextToDialogueWebsocketFinalMulti": ".text_to_dialogue_websocket_final_multi",
"TextToDialogueWebsocketOutputFormatEnum": ".text_to_dialogue_websocket_output_format_enum",
"TextToDialogueWebsocketVoiceInput": ".text_to_dialogue_websocket_voice_input",
"TextToDialogueWebsocketVoiceSettings": ".text_to_dialogue_websocket_voice_settings",
@@ -3986,12 +4000,14 @@
"WorkspaceAuditLogsPageResponse": ".workspace_audit_logs_page_response",
"WorkspaceBatchCallsResponse": ".workspace_batch_calls_response",
"WorkspaceCreateApiKeyResponseModel": ".workspace_create_api_key_response_model",
+ "WorkspaceCreateServiceAccountResponseModel": ".workspace_create_service_account_response_model",
"WorkspaceCreateWebhookResponseModel": ".workspace_create_webhook_response_model",
"WorkspaceGroupByNameResponseModel": ".workspace_group_by_name_response_model",
"WorkspaceGroupPermission": ".workspace_group_permission",
"WorkspaceGroupResponseModel": ".workspace_group_response_model",
"WorkspaceGroupResponseModelGroupPvcLimit": ".workspace_group_response_model_group_pvc_limit",
"WorkspaceGroupResponseModelGroupUsageLimit": ".workspace_group_response_model_group_usage_limit",
+ "WorkspaceMemberResponseModel": ".workspace_member_response_model",
"WorkspaceResourceType": ".workspace_resource_type",
"WorkspaceServiceAccountListResponseModel": ".workspace_service_account_list_response_model",
"WorkspaceServiceAccountResponseModel": ".workspace_service_account_response_model",
@@ -4587,6 +4603,8 @@ def __dir__():
"DashboardCriteriaChartModel",
"DashboardDataCollectionChartModel",
"DataCollectionResultCommonModel",
+ "DefaultSharingGroupConfig",
+ "DefaultSharingGroupConfigPermissionLevel",
"DefaultSharingGroupResponseModel",
"DefaultSharingGroupResponseModelPermissionLevel",
"DeleteAgentProcedureParams",
@@ -5514,10 +5532,14 @@ def __dir__():
"TextNormalisationType",
"TextToDialogueWebsocketApplyTextNormalizationEnum",
"TextToDialogueWebsocketAudioChunk",
+ "TextToDialogueWebsocketAudioChunkMulti",
"TextToDialogueWebsocketClientMessage",
+ "TextToDialogueWebsocketClientMessageMulti",
"TextToDialogueWebsocketError",
"TextToDialogueWebsocketFinal",
"TextToDialogueWebsocketFinalAudioForTurn",
+ "TextToDialogueWebsocketFinalAudioForTurnMulti",
+ "TextToDialogueWebsocketFinalMulti",
"TextToDialogueWebsocketOutputFormatEnum",
"TextToDialogueWebsocketVoiceInput",
"TextToDialogueWebsocketVoiceSettings",
@@ -5884,12 +5906,14 @@ def __dir__():
"WorkspaceAuditLogsPageResponse",
"WorkspaceBatchCallsResponse",
"WorkspaceCreateApiKeyResponseModel",
+ "WorkspaceCreateServiceAccountResponseModel",
"WorkspaceCreateWebhookResponseModel",
"WorkspaceGroupByNameResponseModel",
"WorkspaceGroupPermission",
"WorkspaceGroupResponseModel",
"WorkspaceGroupResponseModelGroupPvcLimit",
"WorkspaceGroupResponseModelGroupUsageLimit",
+ "WorkspaceMemberResponseModel",
"WorkspaceResourceType",
"WorkspaceServiceAccountListResponseModel",
"WorkspaceServiceAccountResponseModel",
diff --git a/src/elevenlabs/types/character_metadata_response_model.py b/src/elevenlabs/types/character_metadata_response_model.py
index 67cb463c..5c0a7470 100644
--- a/src/elevenlabs/types/character_metadata_response_model.py
+++ b/src/elevenlabs/types/character_metadata_response_model.py
@@ -12,6 +12,7 @@
class CharacterMetadataResponseModel(UncheckedBaseModel):
description: typing.Optional[str] = None
sample_message: typing.Optional[str] = None
+ voice_creation_prompt_suggestion: typing.Optional[str] = None
gender: typing.Optional[CharacterGender] = None
age: typing.Optional[CharacterAge] = None
accent: typing.Optional[str] = None
diff --git a/src/elevenlabs/types/custom_guardrail_config.py b/src/elevenlabs/types/custom_guardrail_config.py
index 736a6598..404dbbc7 100644
--- a/src/elevenlabs/types/custom_guardrail_config.py
+++ b/src/elevenlabs/types/custom_guardrail_config.py
@@ -34,7 +34,7 @@ class CustomGuardrailConfig(UncheckedBaseModel):
history_message_count: typing.Optional[int] = pydantic.Field(default=None)
"""
- How many recent customer messages to include in the guardrail's history, plus the agent replies that follow them (and tool calls and results when history_include_tool_calls is enabled). Only customer messages count toward the limit. 0 (default) shows none; 1 shows the customer's latest message onward. When > 0, the guardrail prompt can refer to this history as ; the reply under evaluation appears as and may repeat at the end of the history.
+ How much recent history the guardrail sees before the reply it evaluates, counted in user messages (the agent replies between them are included too). The guardrail always gets a single transcript ending in the evaluated reply, marked 'AGENT [current reply]:'. 0 (default) adds no prior history (just that line); 1 adds the latest user message onward.
"""
trigger_action: typing.Optional[CustomGuardrailConfigTriggerAction] = None
diff --git a/src/elevenlabs/types/default_sharing_group_config.py b/src/elevenlabs/types/default_sharing_group_config.py
new file mode 100644
index 00000000..bf5f402a
--- /dev/null
+++ b/src/elevenlabs/types/default_sharing_group_config.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
+from ..core.unchecked_base_model import UncheckedBaseModel
+from .default_sharing_group_config_permission_level import DefaultSharingGroupConfigPermissionLevel
+
+
+class DefaultSharingGroupConfig(UncheckedBaseModel):
+ group_id: str = pydantic.Field()
+ """
+ The ID of the group to share with
+ """
+
+ permission_level: DefaultSharingGroupConfigPermissionLevel = pydantic.Field()
+ """
+ The permission level to grant to the group
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/elevenlabs/types/default_sharing_group_config_permission_level.py b/src/elevenlabs/types/default_sharing_group_config_permission_level.py
new file mode 100644
index 00000000..8b0950e8
--- /dev/null
+++ b/src/elevenlabs/types/default_sharing_group_config_permission_level.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+DefaultSharingGroupConfigPermissionLevel = typing.Union[typing.Literal["admin", "editor", "viewer"], typing.Any]
diff --git a/src/elevenlabs/types/get_conversation_response_model.py b/src/elevenlabs/types/get_conversation_response_model.py
index b991343b..072e6055 100644
--- a/src/elevenlabs/types/get_conversation_response_model.py
+++ b/src/elevenlabs/types/get_conversation_response_model.py
@@ -36,6 +36,7 @@ class GetConversationResponseModel(UncheckedBaseModel):
has_audio: bool
has_user_audio: bool
has_response_audio: bool
+ has_auxiliary_audio: bool
transcript: typing.List[ConversationHistoryTranscriptResponseModel]
tag_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
"""
diff --git a/src/elevenlabs/types/text_to_dialogue_websocket_audio_chunk_multi.py b/src/elevenlabs/types/text_to_dialogue_websocket_audio_chunk_multi.py
new file mode 100644
index 00000000..577ec9b3
--- /dev/null
+++ b/src/elevenlabs/types/text_to_dialogue_websocket_audio_chunk_multi.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
+from ..core.unchecked_base_model import UncheckedBaseModel
+from .dialogue_text_alignment import DialogueTextAlignment
+
+
+class TextToDialogueWebsocketAudioChunkMulti(UncheckedBaseModel):
+ """
+ Server chunk containing encoded audio for a specific context and optional alignment metadata.
+ """
+
+ audio: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Base64-encoded audio bytes for the selected `output_format`.
+ """
+
+ alignment: typing.Optional[DialogueTextAlignment] = pydantic.Field(default=None)
+ """
+ Present when `sync_alignment` query parameter is `true` and the model returned timing data for the chunk.
+ """
+
+ normalized_alignment: typing.Optional[DialogueTextAlignment] = pydantic.Field(default=None)
+ """
+ Reserved for future use; currently unused by the server.
+ """
+
+ context_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The context this audio chunk belongs 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/elevenlabs/types/text_to_dialogue_websocket_client_message_multi.py b/src/elevenlabs/types/text_to_dialogue_websocket_client_message_multi.py
new file mode 100644
index 00000000..55c8665a
--- /dev/null
+++ b/src/elevenlabs/types/text_to_dialogue_websocket_client_message_multi.py
@@ -0,0 +1,97 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from ..core.unchecked_base_model import UncheckedBaseModel
+from .pronunciation_dictionary_locator import PronunciationDictionaryLocator
+from .text_to_dialogue_websocket_voice_input import TextToDialogueWebsocketVoiceInput
+from .text_to_dialogue_websocket_voice_settings import TextToDialogueWebsocketVoiceSettings
+
+
+class TextToDialogueWebsocketClientMessageMulti(UncheckedBaseModel):
+ """
+ All fields are optional unless noted for a context's **first** message.
+
+ **Every message**
+ - `context_id` is required, except on a message containing only `close_socket`.
+
+ **First message for a context**
+ - `voices`: non-empty array of voice IDs (maximum 10 per context for `eleven_v3`; exactly 1 for `eleven_v3_conversational`).
+ - Credentials if not supplied via `xi-api-key` / `Authorization` headers or `single_use_token` query parameter (accepted on the first message of the connection only).
+
+ **Subsequent messages for a context**
+ - Do not resend `voices`, `voice_settings`, `pronunciation_dictionary_locators`, or credential fields.
+ """
+
+ context_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Identifier for an independent dialogue stream within the socket. The first message with a new `context_id` creates that context. Required on every message except one containing only `close_socket`.
+ """
+
+ inputs: typing.Optional[typing.List[TextToDialogueWebsocketVoiceInput]] = pydantic.Field(default=None)
+ """
+ Dialogue lines to append to this context for synthesis. Each `voice_id` must be registered for this context.
+ """
+
+ flush: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Force generation of this context's buffered text without closing it.
+ """
+
+ close_context: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Flush this context's remaining audio, emit its `is_final` message, and close it. Other contexts stay open.
+ """
+
+ close_socket: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Flush all contexts, emit their remaining audio and `is_final` messages, and close the WebSocket.
+ """
+
+ keep_alive: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Resets this context's 20s inactivity timer; performs no synthesis.
+ """
+
+ xi_api_key: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ API key for the first message of the connection if not provided via the `xi-api-key` header.
+ """
+
+ authorization: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Bearer token for the first message of the connection if not provided via the `Authorization` header.
+ """
+
+ single_use_token: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Single-use token for the first message of the connection if not provided via the `single_use_token` query parameter.
+ """
+
+ voices: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Voice IDs to load for this context (first message for the context only, required on that message).
+ """
+
+ voice_settings: typing.Optional[TextToDialogueWebsocketVoiceSettings] = pydantic.Field(default=None)
+ """
+ Optional voice settings for this context (first message for the context only).
+ """
+
+ pronunciation_dictionary_locators: typing.Optional[typing.List[PronunciationDictionaryLocator]] = pydantic.Field(
+ default=None
+ )
+ """
+ Optional pronunciation dictionaries for this context (first message for the context 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/elevenlabs/types/text_to_dialogue_websocket_final_audio_for_turn_multi.py b/src/elevenlabs/types/text_to_dialogue_websocket_final_audio_for_turn_multi.py
new file mode 100644
index 00000000..27e8f08e
--- /dev/null
+++ b/src/elevenlabs/types/text_to_dialogue_websocket_final_audio_for_turn_multi.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
+from ..core.unchecked_base_model import UncheckedBaseModel
+
+
+class TextToDialogueWebsocketFinalAudioForTurnMulti(UncheckedBaseModel):
+ is_final_audio_for_turn: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Indicates that the final audio for a given turn of this context has been sent.
+ """
+
+ context_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The context whose turn has finished.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/elevenlabs/types/text_to_dialogue_websocket_final_multi.py b/src/elevenlabs/types/text_to_dialogue_websocket_final_multi.py
new file mode 100644
index 00000000..9f33c09f
--- /dev/null
+++ b/src/elevenlabs/types/text_to_dialogue_websocket_final_multi.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
+from ..core.unchecked_base_model import UncheckedBaseModel
+
+
+class TextToDialogueWebsocketFinalMulti(UncheckedBaseModel):
+ is_final: typing.Literal[True] = pydantic.Field(default=True)
+ """
+ Marks the end of this context's closing flush sequence.
+ """
+
+ context_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The context that has been finalized.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/elevenlabs/types/workspace_create_service_account_response_model.py b/src/elevenlabs/types/workspace_create_service_account_response_model.py
new file mode 100644
index 00000000..603b9bd8
--- /dev/null
+++ b/src/elevenlabs/types/workspace_create_service_account_response_model.py
@@ -0,0 +1,22 @@
+# 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 ..core.unchecked_base_model import UncheckedBaseModel
+
+
+class WorkspaceCreateServiceAccountResponseModel(UncheckedBaseModel):
+ service_account_user_id: typing_extensions.Annotated[str, FieldMetadata(alias="service-account-user-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/elevenlabs/types/workspace_member_response_model.py b/src/elevenlabs/types/workspace_member_response_model.py
new file mode 100644
index 00000000..a093bf25
--- /dev/null
+++ b/src/elevenlabs/types/workspace_member_response_model.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
+from ..core.unchecked_base_model import UncheckedBaseModel
+from .seat_type import SeatType
+
+
+class WorkspaceMemberResponseModel(UncheckedBaseModel):
+ """
+ Public workspace member fields exposed via GET /v1/workspace/members.
+ """
+
+ user_id: str = pydantic.Field()
+ """
+ The user ID of the workspace member.
+ """
+
+ email: str = pydantic.Field()
+ """
+ The email address of the workspace member.
+ """
+
+ first_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The first name of the workspace member, if available.
+ """
+
+ seat_type: typing.Optional[SeatType] = pydantic.Field(default=None)
+ """
+ The seat type (role) of the workspace member.
+ """
+
+ is_owner: bool = pydantic.Field()
+ """
+ Whether the member is the workspace owner.
+ """
+
+ is_locked: bool = pydantic.Field()
+ """
+ Whether the member's account is locked in this workspace.
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/__init__.py b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/__init__.py
new file mode 100644
index 00000000..607837da
--- /dev/null
+++ b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/__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 ReceiveTextToDialogueWebsocketMessageMulti
+_dynamic_imports: typing.Dict[str, str] = {"ReceiveTextToDialogueWebsocketMessageMulti": ".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__ = ["ReceiveTextToDialogueWebsocketMessageMulti"]
diff --git a/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/__init__.py b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/__init__.py
new file mode 100644
index 00000000..18a83b97
--- /dev/null
+++ b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/__init__.py
@@ -0,0 +1,36 @@
+# 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 .receive_text_to_dialogue_websocket_message_multi import ReceiveTextToDialogueWebsocketMessageMulti
+_dynamic_imports: typing.Dict[str, str] = {
+ "ReceiveTextToDialogueWebsocketMessageMulti": ".receive_text_to_dialogue_websocket_message_multi"
+}
+
+
+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__ = ["ReceiveTextToDialogueWebsocketMessageMulti"]
diff --git a/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/receive_text_to_dialogue_websocket_message_multi.py b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/receive_text_to_dialogue_websocket_message_multi.py
new file mode 100644
index 00000000..0f1af1cd
--- /dev/null
+++ b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/receive_text_to_dialogue_websocket_message_multi.py
@@ -0,0 +1,15 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from ...types.text_to_dialogue_websocket_audio_chunk_multi import TextToDialogueWebsocketAudioChunkMulti
+from ...types.text_to_dialogue_websocket_error import TextToDialogueWebsocketError
+from ...types.text_to_dialogue_websocket_final_audio_for_turn_multi import TextToDialogueWebsocketFinalAudioForTurnMulti
+from ...types.text_to_dialogue_websocket_final_multi import TextToDialogueWebsocketFinalMulti
+
+ReceiveTextToDialogueWebsocketMessageMulti = typing.Union[
+ TextToDialogueWebsocketAudioChunkMulti,
+ TextToDialogueWebsocketFinalAudioForTurnMulti,
+ TextToDialogueWebsocketFinalMulti,
+ TextToDialogueWebsocketError,
+]
diff --git a/src/elevenlabs/workspace/invites/client.py b/src/elevenlabs/workspace/invites/client.py
index 8fbbbe07..4c9f6662 100644
--- a/src/elevenlabs/workspace/invites/client.py
+++ b/src/elevenlabs/workspace/invites/client.py
@@ -35,6 +35,7 @@ def create(
workspace_permission: typing.Optional[str] = OMIT,
seat_type: typing.Optional[SeatType] = OMIT,
group_ids: typing.Optional[typing.Sequence[str]] = OMIT,
+ usage_limit: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AddWorkspaceInviteResponseModel:
"""
@@ -54,6 +55,9 @@ def create(
group_ids : typing.Optional[typing.Sequence[str]]
The group ids of the user
+ usage_limit : typing.Optional[int]
+ Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -78,6 +82,7 @@ def create(
workspace_permission=workspace_permission,
seat_type=seat_type,
group_ids=group_ids,
+ usage_limit=usage_limit,
request_options=request_options,
)
return _response.data
@@ -88,6 +93,7 @@ def create_batch(
emails: typing.Sequence[str],
seat_type: typing.Optional[SeatType] = OMIT,
group_ids: typing.Optional[typing.Sequence[str]] = OMIT,
+ usage_limit: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AddWorkspaceInviteResponseModel:
"""
@@ -104,6 +110,9 @@ def create_batch(
group_ids : typing.Optional[typing.Sequence[str]]
The group ids of the user
+ usage_limit : typing.Optional[int]
+ Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -124,7 +133,11 @@ def create_batch(
)
"""
_response = self._raw_client.create_batch(
- emails=emails, seat_type=seat_type, group_ids=group_ids, request_options=request_options
+ emails=emails,
+ seat_type=seat_type,
+ group_ids=group_ids,
+ usage_limit=usage_limit,
+ request_options=request_options,
)
return _response.data
@@ -184,6 +197,7 @@ async def create(
workspace_permission: typing.Optional[str] = OMIT,
seat_type: typing.Optional[SeatType] = OMIT,
group_ids: typing.Optional[typing.Sequence[str]] = OMIT,
+ usage_limit: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AddWorkspaceInviteResponseModel:
"""
@@ -203,6 +217,9 @@ async def create(
group_ids : typing.Optional[typing.Sequence[str]]
The group ids of the user
+ usage_limit : typing.Optional[int]
+ Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -235,6 +252,7 @@ async def main() -> None:
workspace_permission=workspace_permission,
seat_type=seat_type,
group_ids=group_ids,
+ usage_limit=usage_limit,
request_options=request_options,
)
return _response.data
@@ -245,6 +263,7 @@ async def create_batch(
emails: typing.Sequence[str],
seat_type: typing.Optional[SeatType] = OMIT,
group_ids: typing.Optional[typing.Sequence[str]] = OMIT,
+ usage_limit: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AddWorkspaceInviteResponseModel:
"""
@@ -261,6 +280,9 @@ async def create_batch(
group_ids : typing.Optional[typing.Sequence[str]]
The group ids of the user
+ usage_limit : typing.Optional[int]
+ Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -289,7 +311,11 @@ async def main() -> None:
asyncio.run(main())
"""
_response = await self._raw_client.create_batch(
- emails=emails, seat_type=seat_type, group_ids=group_ids, request_options=request_options
+ emails=emails,
+ seat_type=seat_type,
+ group_ids=group_ids,
+ usage_limit=usage_limit,
+ request_options=request_options,
)
return _response.data
diff --git a/src/elevenlabs/workspace/invites/raw_client.py b/src/elevenlabs/workspace/invites/raw_client.py
index 1831093f..07322ac2 100644
--- a/src/elevenlabs/workspace/invites/raw_client.py
+++ b/src/elevenlabs/workspace/invites/raw_client.py
@@ -28,6 +28,7 @@ def create(
workspace_permission: typing.Optional[str] = OMIT,
seat_type: typing.Optional[SeatType] = OMIT,
group_ids: typing.Optional[typing.Sequence[str]] = OMIT,
+ usage_limit: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> HttpResponse[AddWorkspaceInviteResponseModel]:
"""
@@ -47,6 +48,9 @@ def create(
group_ids : typing.Optional[typing.Sequence[str]]
The group ids of the user
+ usage_limit : typing.Optional[int]
+ Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -63,6 +67,7 @@ def create(
"workspace_permission": workspace_permission,
"seat_type": seat_type,
"group_ids": group_ids,
+ "usage_limit": usage_limit,
},
headers={
"content-type": "application/json",
@@ -102,6 +107,7 @@ def create_batch(
emails: typing.Sequence[str],
seat_type: typing.Optional[SeatType] = OMIT,
group_ids: typing.Optional[typing.Sequence[str]] = OMIT,
+ usage_limit: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> HttpResponse[AddWorkspaceInviteResponseModel]:
"""
@@ -118,6 +124,9 @@ def create_batch(
group_ids : typing.Optional[typing.Sequence[str]]
The group ids of the user
+ usage_limit : typing.Optional[int]
+ Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -133,6 +142,7 @@ def create_batch(
"emails": emails,
"seat_type": seat_type,
"group_ids": group_ids,
+ "usage_limit": usage_limit,
},
headers={
"content-type": "application/json",
@@ -235,6 +245,7 @@ async def create(
workspace_permission: typing.Optional[str] = OMIT,
seat_type: typing.Optional[SeatType] = OMIT,
group_ids: typing.Optional[typing.Sequence[str]] = OMIT,
+ usage_limit: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AsyncHttpResponse[AddWorkspaceInviteResponseModel]:
"""
@@ -254,6 +265,9 @@ async def create(
group_ids : typing.Optional[typing.Sequence[str]]
The group ids of the user
+ usage_limit : typing.Optional[int]
+ Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -270,6 +284,7 @@ async def create(
"workspace_permission": workspace_permission,
"seat_type": seat_type,
"group_ids": group_ids,
+ "usage_limit": usage_limit,
},
headers={
"content-type": "application/json",
@@ -309,6 +324,7 @@ async def create_batch(
emails: typing.Sequence[str],
seat_type: typing.Optional[SeatType] = OMIT,
group_ids: typing.Optional[typing.Sequence[str]] = OMIT,
+ usage_limit: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AsyncHttpResponse[AddWorkspaceInviteResponseModel]:
"""
@@ -325,6 +341,9 @@ async def create_batch(
group_ids : typing.Optional[typing.Sequence[str]]
The group ids of the user
+ usage_limit : typing.Optional[int]
+ Monthly credit usage limit for the invitee. Omit or set to null for no custom cap.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -340,6 +359,7 @@ async def create_batch(
"emails": emails,
"seat_type": seat_type,
"group_ids": group_ids,
+ "usage_limit": usage_limit,
},
headers={
"content-type": "application/json",
diff --git a/src/elevenlabs/workspace/members/client.py b/src/elevenlabs/workspace/members/client.py
index ef28b5b3..0c171e18 100644
--- a/src/elevenlabs/workspace/members/client.py
+++ b/src/elevenlabs/workspace/members/client.py
@@ -6,6 +6,7 @@
from ...core.request_options import RequestOptions
from ...types.seat_type import SeatType
from ...types.update_workspace_member_response_model import UpdateWorkspaceMemberResponseModel
+from ...types.workspace_member_response_model import WorkspaceMemberResponseModel
from .raw_client import AsyncRawMembersClient, RawMembersClient
# this is used as the default value for optional parameters
@@ -27,6 +28,34 @@ def with_raw_response(self) -> RawMembersClient:
"""
return self._raw_client
+ def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[WorkspaceMemberResponseModel]:
+ """
+ Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[WorkspaceMemberResponseModel]
+ Successful Response
+
+ Examples
+ --------
+ from elevenlabs import ElevenLabs
+
+ client = ElevenLabs(
+ api_key="YOUR_API_KEY",
+ )
+ client.workspace.members.list()
+ """
+ _response = self._raw_client.list(request_options=request_options)
+ return _response.data
+
def update(
self,
*,
@@ -97,6 +126,42 @@ def with_raw_response(self) -> AsyncRawMembersClient:
"""
return self._raw_client
+ async def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[WorkspaceMemberResponseModel]:
+ """
+ Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ typing.List[WorkspaceMemberResponseModel]
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from elevenlabs import AsyncElevenLabs
+
+ client = AsyncElevenLabs(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.workspace.members.list()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.list(request_options=request_options)
+ return _response.data
+
async def update(
self,
*,
diff --git a/src/elevenlabs/workspace/members/raw_client.py b/src/elevenlabs/workspace/members/raw_client.py
index 4f5def77..efc7271d 100644
--- a/src/elevenlabs/workspace/members/raw_client.py
+++ b/src/elevenlabs/workspace/members/raw_client.py
@@ -11,6 +11,7 @@
from ...errors.unprocessable_entity_error import UnprocessableEntityError
from ...types.seat_type import SeatType
from ...types.update_workspace_member_response_model import UpdateWorkspaceMemberResponseModel
+from ...types.workspace_member_response_model import WorkspaceMemberResponseModel
# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)
@@ -20,6 +21,53 @@ class RawMembersClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
+ def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[typing.List[WorkspaceMemberResponseModel]]:
+ """
+ Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[typing.List[WorkspaceMemberResponseModel]]
+ Successful Response
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "v1/workspace/members",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[WorkspaceMemberResponseModel],
+ construct_type(
+ type_=typing.List[WorkspaceMemberResponseModel], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ construct_type(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_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,
*,
@@ -100,6 +148,53 @@ class AsyncRawMembersClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
+ async def list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[typing.List[WorkspaceMemberResponseModel]]:
+ """
+ Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission.
+
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[typing.List[WorkspaceMemberResponseModel]]
+ Successful Response
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "v1/workspace/members",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ typing.List[WorkspaceMemberResponseModel],
+ construct_type(
+ type_=typing.List[WorkspaceMemberResponseModel], # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ typing.Any,
+ construct_type(
+ type_=typing.Any, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_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,
*,