diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 8d395546..8318f22f 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "4.98.0"
+ ".": "4.99.0"
}
\ No newline at end of file
diff --git a/.stats.yml b/.stats.yml
index b0d5eb05..1dc79ab6 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 1028
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/telnyx%2Ftelnyx-69dc36f47cc644b1e8545a6bb4710ef7114039fb14979dfe9a99c5c38d077cf9.yml
-openapi_spec_hash: 96bb6b6903356ad6d5181a8635cdbe1d
-config_hash: 4509ecd06ed7f91d4e57b8e084216074
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/telnyx%2Ftelnyx-832968186670a31afff89bd833c23949b290f9b59b0336e8ea56bb8c9da89ed2.yml
+openapi_spec_hash: ba9edee70674bb1eba2b983d06ecdd97
+config_hash: b6ba7e605cce12826014008cad46406c
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2745cdde..354151c7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,18 @@
# Changelog
+## 4.99.0 (2026-04-08)
+
+Full Changelog: [v4.98.0...v4.99.0](https://github.com/team-telnyx/telnyx-python/compare/v4.98.0...v4.99.0)
+
+### Features
+
+* TELAPPS-5707: Add privacy parameter to Call Control dial and transfer ([994a4ae](https://github.com/team-telnyx/telnyx-python/commit/994a4ae45ea23d56e53d9b63c0900ff194579b81))
+
+
+### Reverts
+
+* revert stainless.yml changes from pronunciation dictionaries commit ([62f4c82](https://github.com/team-telnyx/telnyx-python/commit/62f4c82b7231098bac5254a4a4ae05ec0c5550a4))
+
## 4.98.0 (2026-04-08)
Full Changelog: [v4.97.0...v4.98.0](https://github.com/team-telnyx/telnyx-python/compare/v4.97.0...v4.98.0)
diff --git a/api.md b/api.md
index 440c7fc2..2687f632 100644
--- a/api.md
+++ b/api.md
@@ -581,6 +581,8 @@ from telnyx.types.ai import (
InferenceEmbeddingWebhookToolParams,
InsightSettings,
MessagingSettings,
+ Observability,
+ ObservabilityReq,
PrivacySettings,
RetrievalTool,
TelephonySettings,
@@ -5520,17 +5522,17 @@ Types:
```python
from telnyx.types.enterprises import (
EnterpriseReputationPublic,
- ReputationCreateResponse,
- ReputationListResponse,
+ ReputationRetrieveResponse,
+ ReputationEnableResponse,
ReputationUpdateFrequencyResponse,
)
```
Methods:
-- client.enterprises.reputation.create(enterprise_id, \*\*params) -> ReputationCreateResponse
-- client.enterprises.reputation.list(enterprise_id) -> ReputationListResponse
-- client.enterprises.reputation.delete_all(enterprise_id) -> None
+- client.enterprises.reputation.retrieve(enterprise_id) -> ReputationRetrieveResponse
+- client.enterprises.reputation.disable(enterprise_id) -> None
+- client.enterprises.reputation.enable(enterprise_id, \*\*params) -> ReputationEnableResponse
- client.enterprises.reputation.update_frequency(enterprise_id, \*\*params) -> ReputationUpdateFrequencyResponse
### Numbers
@@ -5538,15 +5540,15 @@ Methods:
Types:
```python
-from telnyx.types.enterprises.reputation import NumberCreateResponse, NumberRetrieveResponse
+from telnyx.types.enterprises.reputation import NumberRetrieveResponse, NumberAssociateResponse
```
Methods:
-- client.enterprises.reputation.numbers.create(enterprise_id, \*\*params) -> NumberCreateResponse
- client.enterprises.reputation.numbers.retrieve(phone_number, \*, enterprise_id, \*\*params) -> NumberRetrieveResponse
- client.enterprises.reputation.numbers.list(enterprise_id, \*\*params) -> SyncDefaultFlatPagination[ReputationPhoneNumberWithReputationData]
-- client.enterprises.reputation.numbers.delete(phone_number, \*, enterprise_id) -> None
+- client.enterprises.reputation.numbers.associate(enterprise_id, \*\*params) -> NumberAssociateResponse
+- client.enterprises.reputation.numbers.disassociate(phone_number, \*, enterprise_id) -> None
# Reputation
diff --git a/pyproject.toml b/pyproject.toml
index 501be16f..1eb87268 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "telnyx"
-version = "4.98.0"
+version = "4.99.0"
description = "The official Python library for the telnyx API"
dynamic = ["readme"]
license = "MIT"
diff --git a/src/telnyx/_version.py b/src/telnyx/_version.py
index c388396a..fd9f8eb0 100644
--- a/src/telnyx/_version.py
+++ b/src/telnyx/_version.py
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
__title__ = "telnyx"
-__version__ = "4.98.0" # x-release-please-version
+__version__ = "4.99.0" # x-release-please-version
diff --git a/src/telnyx/resources/ai/assistants/assistants.py b/src/telnyx/resources/ai/assistants/assistants.py
index 9c109740..07f49d18 100644
--- a/src/telnyx/resources/ai/assistants/assistants.py
+++ b/src/telnyx/resources/ai/assistants/assistants.py
@@ -83,6 +83,7 @@
from ....types.ai.insight_settings_param import InsightSettingsParam
from ....types.ai.privacy_settings_param import PrivacySettingsParam
from ....types.ai.assistant_chat_response import AssistantChatResponse
+from ....types.ai.observability_req_param import ObservabilityReqParam
from ....types.ai.messaging_settings_param import MessagingSettingsParam
from ....types.ai.telephony_settings_param import TelephonySettingsParam
from ....types.ai.assistant_delete_response import AssistantDeleteResponse
@@ -158,7 +159,7 @@ def create(
insight_settings: InsightSettingsParam | Omit = omit,
llm_api_key_ref: str | Omit = omit,
messaging_settings: MessagingSettingsParam | Omit = omit,
- observability_settings: assistant_create_params.ObservabilitySettings | Omit = omit,
+ observability_settings: ObservabilityReqParam | Omit = omit,
privacy_settings: PrivacySettingsParam | Omit = omit,
telephony_settings: TelephonySettingsParam | Omit = omit,
tool_ids: SequenceNotStr[str] | Omit = omit,
@@ -313,7 +314,7 @@ def update(
messaging_settings: MessagingSettingsParam | Omit = omit,
model: str | Omit = omit,
name: str | Omit = omit,
- observability_settings: assistant_update_params.ObservabilitySettings | Omit = omit,
+ observability_settings: ObservabilityReqParam | Omit = omit,
privacy_settings: PrivacySettingsParam | Omit = omit,
promote_to_main: bool | Omit = omit,
telephony_settings: TelephonySettingsParam | Omit = omit,
@@ -765,7 +766,7 @@ async def create(
insight_settings: InsightSettingsParam | Omit = omit,
llm_api_key_ref: str | Omit = omit,
messaging_settings: MessagingSettingsParam | Omit = omit,
- observability_settings: assistant_create_params.ObservabilitySettings | Omit = omit,
+ observability_settings: ObservabilityReqParam | Omit = omit,
privacy_settings: PrivacySettingsParam | Omit = omit,
telephony_settings: TelephonySettingsParam | Omit = omit,
tool_ids: SequenceNotStr[str] | Omit = omit,
@@ -920,7 +921,7 @@ async def update(
messaging_settings: MessagingSettingsParam | Omit = omit,
model: str | Omit = omit,
name: str | Omit = omit,
- observability_settings: assistant_update_params.ObservabilitySettings | Omit = omit,
+ observability_settings: ObservabilityReqParam | Omit = omit,
privacy_settings: PrivacySettingsParam | Omit = omit,
promote_to_main: bool | Omit = omit,
telephony_settings: TelephonySettingsParam | Omit = omit,
diff --git a/src/telnyx/resources/ai/assistants/versions.py b/src/telnyx/resources/ai/assistants/versions.py
index f2e092bd..766a1099 100644
--- a/src/telnyx/resources/ai/assistants/versions.py
+++ b/src/telnyx/resources/ai/assistants/versions.py
@@ -26,6 +26,7 @@
from ....types.ai.widget_settings_param import WidgetSettingsParam
from ....types.ai.insight_settings_param import InsightSettingsParam
from ....types.ai.privacy_settings_param import PrivacySettingsParam
+from ....types.ai.observability_req_param import ObservabilityReqParam
from ....types.ai.messaging_settings_param import MessagingSettingsParam
from ....types.ai.telephony_settings_param import TelephonySettingsParam
from ....types.ai.transcription_settings_param import TranscriptionSettingsParam
@@ -116,7 +117,7 @@ def update(
messaging_settings: MessagingSettingsParam | Omit = omit,
model: str | Omit = omit,
name: str | Omit = omit,
- observability_settings: version_update_params.ObservabilitySettings | Omit = omit,
+ observability_settings: ObservabilityReqParam | Omit = omit,
privacy_settings: PrivacySettingsParam | Omit = omit,
telephony_settings: TelephonySettingsParam | Omit = omit,
tool_ids: SequenceNotStr[str] | Omit = omit,
@@ -416,7 +417,7 @@ async def update(
messaging_settings: MessagingSettingsParam | Omit = omit,
model: str | Omit = omit,
name: str | Omit = omit,
- observability_settings: version_update_params.ObservabilitySettings | Omit = omit,
+ observability_settings: ObservabilityReqParam | Omit = omit,
privacy_settings: PrivacySettingsParam | Omit = omit,
telephony_settings: TelephonySettingsParam | Omit = omit,
tool_ids: SequenceNotStr[str] | Omit = omit,
diff --git a/src/telnyx/resources/calls/actions.py b/src/telnyx/resources/calls/actions.py
index d7fc0589..2484f553 100644
--- a/src/telnyx/resources/calls/actions.py
+++ b/src/telnyx/resources/calls/actions.py
@@ -3443,6 +3443,7 @@ def transfer(
mute_dtmf: Literal["none", "both", "self", "opposite"] | Omit = omit,
park_after_unbridge: str | Omit = omit,
preferred_codecs: str | Omit = omit,
+ privacy: Literal["id", "none"] | Omit = omit,
record: Literal["record-from-answer"] | Omit = omit,
record_channels: Literal["single", "dual"] | Omit = omit,
record_custom_file_name: str | Omit = omit,
@@ -3549,6 +3550,10 @@ def transfer(
call. The codecs supported are `G722`, `PCMU`, `PCMA`, `G729`, `OPUS`, `VP8`,
`H264`, `AMR-WB`.
+ privacy: Indicates the privacy level to be used for the call. When set to `id`, caller ID
+ information (name and number) will be hidden from the called party. When set to
+ `none` or omitted, caller ID will be shown normally.
+
record: Start recording automatically after an event. Disabled by default.
record_channels: Defines which channel should be recorded ('single' or 'dual') when `record` is
@@ -3649,6 +3654,7 @@ def transfer(
"mute_dtmf": mute_dtmf,
"park_after_unbridge": park_after_unbridge,
"preferred_codecs": preferred_codecs,
+ "privacy": privacy,
"record": record,
"record_channels": record_channels,
"record_custom_file_name": record_custom_file_name,
@@ -7043,6 +7049,7 @@ async def transfer(
mute_dtmf: Literal["none", "both", "self", "opposite"] | Omit = omit,
park_after_unbridge: str | Omit = omit,
preferred_codecs: str | Omit = omit,
+ privacy: Literal["id", "none"] | Omit = omit,
record: Literal["record-from-answer"] | Omit = omit,
record_channels: Literal["single", "dual"] | Omit = omit,
record_custom_file_name: str | Omit = omit,
@@ -7149,6 +7156,10 @@ async def transfer(
call. The codecs supported are `G722`, `PCMU`, `PCMA`, `G729`, `OPUS`, `VP8`,
`H264`, `AMR-WB`.
+ privacy: Indicates the privacy level to be used for the call. When set to `id`, caller ID
+ information (name and number) will be hidden from the called party. When set to
+ `none` or omitted, caller ID will be shown normally.
+
record: Start recording automatically after an event. Disabled by default.
record_channels: Defines which channel should be recorded ('single' or 'dual') when `record` is
@@ -7249,6 +7260,7 @@ async def transfer(
"mute_dtmf": mute_dtmf,
"park_after_unbridge": park_after_unbridge,
"preferred_codecs": preferred_codecs,
+ "privacy": privacy,
"record": record,
"record_channels": record_channels,
"record_custom_file_name": record_custom_file_name,
diff --git a/src/telnyx/resources/calls/calls.py b/src/telnyx/resources/calls/calls.py
index 1eb5fcc3..a5166b50 100644
--- a/src/telnyx/resources/calls/calls.py
+++ b/src/telnyx/resources/calls/calls.py
@@ -103,6 +103,7 @@ def dial(
park_after_unbridge: str | Omit = omit,
preferred_codecs: str | Omit = omit,
prevent_double_bridge: bool | Omit = omit,
+ privacy: Literal["id", "none"] | Omit = omit,
record: Literal["record-from-answer"] | Omit = omit,
record_channels: Literal["single", "dual"] | Omit = omit,
record_custom_file_name: str | Omit = omit,
@@ -247,6 +248,10 @@ def dial(
prevent_double_bridge: Prevents bridging and hangs up the call if the target is already bridged.
Disabled by default.
+ privacy: Indicates the privacy level to be used for the call. When set to `id`, caller ID
+ information (name and number) will be hidden from the called party. When set to
+ `none` or omitted, caller ID will be shown normally.
+
record: Start recording automatically after an event. Disabled by default.
record_channels: Defines which channel should be recorded ('single' or 'dual') when `record` is
@@ -373,6 +378,7 @@ def dial(
"park_after_unbridge": park_after_unbridge,
"preferred_codecs": preferred_codecs,
"prevent_double_bridge": prevent_double_bridge,
+ "privacy": privacy,
"record": record,
"record_channels": record_channels,
"record_custom_file_name": record_custom_file_name,
@@ -501,6 +507,7 @@ async def dial(
park_after_unbridge: str | Omit = omit,
preferred_codecs: str | Omit = omit,
prevent_double_bridge: bool | Omit = omit,
+ privacy: Literal["id", "none"] | Omit = omit,
record: Literal["record-from-answer"] | Omit = omit,
record_channels: Literal["single", "dual"] | Omit = omit,
record_custom_file_name: str | Omit = omit,
@@ -645,6 +652,10 @@ async def dial(
prevent_double_bridge: Prevents bridging and hangs up the call if the target is already bridged.
Disabled by default.
+ privacy: Indicates the privacy level to be used for the call. When set to `id`, caller ID
+ information (name and number) will be hidden from the called party. When set to
+ `none` or omitted, caller ID will be shown normally.
+
record: Start recording automatically after an event. Disabled by default.
record_channels: Defines which channel should be recorded ('single' or 'dual') when `record` is
@@ -771,6 +782,7 @@ async def dial(
"park_after_unbridge": park_after_unbridge,
"preferred_codecs": preferred_codecs,
"prevent_double_bridge": prevent_double_bridge,
+ "privacy": privacy,
"record": record,
"record_channels": record_channels,
"record_custom_file_name": record_custom_file_name,
diff --git a/src/telnyx/resources/enterprises/reputation/numbers.py b/src/telnyx/resources/enterprises/reputation/numbers.py
index ccb22bfd..242cc668 100644
--- a/src/telnyx/resources/enterprises/reputation/numbers.py
+++ b/src/telnyx/resources/enterprises/reputation/numbers.py
@@ -16,9 +16,9 @@
)
from ....pagination import SyncDefaultFlatPagination, AsyncDefaultFlatPagination
from ...._base_client import AsyncPaginator, make_request_options
-from ....types.enterprises.reputation import number_list_params, number_create_params, number_retrieve_params
-from ....types.enterprises.reputation.number_create_response import NumberCreateResponse
+from ....types.enterprises.reputation import number_list_params, number_retrieve_params, number_associate_params
from ....types.enterprises.reputation.number_retrieve_response import NumberRetrieveResponse
+from ....types.enterprises.reputation.number_associate_response import NumberAssociateResponse
from ....types.shared.reputation_phone_number_with_reputation_data import ReputationPhoneNumberWithReputationData
__all__ = ["NumbersResource", "AsyncNumbersResource"]
@@ -48,57 +48,6 @@ def with_streaming_response(self) -> NumbersResourceWithStreamingResponse:
"""
return NumbersResourceWithStreamingResponse(self)
- def create(
- self,
- enterprise_id: str,
- *,
- phone_numbers: SequenceNotStr[str],
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> NumberCreateResponse:
- """
- Associate one or more phone numbers with an enterprise for Number Reputation
- monitoring.
-
- **Validations:**
-
- - Phone numbers must be in E.164 format (e.g., `+16035551234`)
- - Phone numbers must be in-service and belong to your account (verified via
- Warehouse)
- - Phone numbers must be US local numbers
- - Phone numbers cannot already be associated with any enterprise
-
- **Note:** This operation is atomic — if any number fails validation, the entire
- request fails.
-
- **Maximum:** 100 phone numbers per request.
-
- Args:
- phone_numbers: List of phone numbers to associate for reputation monitoring (max 100)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not enterprise_id:
- raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
- return self._post(
- path_template("/enterprises/{enterprise_id}/reputation/numbers", enterprise_id=enterprise_id),
- body=maybe_transform({"phone_numbers": phone_numbers}, number_create_params.NumberCreateParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=NumberCreateResponse,
- )
-
def retrieve(
self,
phone_number: str,
@@ -222,7 +171,58 @@ def list(
model=ReputationPhoneNumberWithReputationData,
)
- def delete(
+ def associate(
+ self,
+ enterprise_id: str,
+ *,
+ phone_numbers: SequenceNotStr[str],
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NumberAssociateResponse:
+ """
+ Associate one or more phone numbers with an enterprise for Number Reputation
+ monitoring.
+
+ **Validations:**
+
+ - Phone numbers must be in E.164 format (e.g., `+16035551234`)
+ - Phone numbers must be in-service and belong to your account (verified via
+ Warehouse)
+ - Phone numbers must be US local numbers
+ - Phone numbers cannot already be associated with any enterprise
+
+ **Note:** This operation is atomic — if any number fails validation, the entire
+ request fails.
+
+ **Maximum:** 100 phone numbers per request.
+
+ Args:
+ phone_numbers: List of phone numbers to associate for reputation monitoring (max 100)
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ if not enterprise_id:
+ raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
+ return self._post(
+ path_template("/enterprises/{enterprise_id}/reputation/numbers", enterprise_id=enterprise_id),
+ body=maybe_transform({"phone_numbers": phone_numbers}, number_associate_params.NumberAssociateParams),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=NumberAssociateResponse,
+ )
+
+ def disassociate(
self,
phone_number: str,
*,
@@ -291,57 +291,6 @@ def with_streaming_response(self) -> AsyncNumbersResourceWithStreamingResponse:
"""
return AsyncNumbersResourceWithStreamingResponse(self)
- async def create(
- self,
- enterprise_id: str,
- *,
- phone_numbers: SequenceNotStr[str],
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> NumberCreateResponse:
- """
- Associate one or more phone numbers with an enterprise for Number Reputation
- monitoring.
-
- **Validations:**
-
- - Phone numbers must be in E.164 format (e.g., `+16035551234`)
- - Phone numbers must be in-service and belong to your account (verified via
- Warehouse)
- - Phone numbers must be US local numbers
- - Phone numbers cannot already be associated with any enterprise
-
- **Note:** This operation is atomic — if any number fails validation, the entire
- request fails.
-
- **Maximum:** 100 phone numbers per request.
-
- Args:
- phone_numbers: List of phone numbers to associate for reputation monitoring (max 100)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not enterprise_id:
- raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
- return await self._post(
- path_template("/enterprises/{enterprise_id}/reputation/numbers", enterprise_id=enterprise_id),
- body=await async_maybe_transform({"phone_numbers": phone_numbers}, number_create_params.NumberCreateParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=NumberCreateResponse,
- )
-
async def retrieve(
self,
phone_number: str,
@@ -467,7 +416,60 @@ def list(
model=ReputationPhoneNumberWithReputationData,
)
- async def delete(
+ async def associate(
+ self,
+ enterprise_id: str,
+ *,
+ phone_numbers: SequenceNotStr[str],
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NumberAssociateResponse:
+ """
+ Associate one or more phone numbers with an enterprise for Number Reputation
+ monitoring.
+
+ **Validations:**
+
+ - Phone numbers must be in E.164 format (e.g., `+16035551234`)
+ - Phone numbers must be in-service and belong to your account (verified via
+ Warehouse)
+ - Phone numbers must be US local numbers
+ - Phone numbers cannot already be associated with any enterprise
+
+ **Note:** This operation is atomic — if any number fails validation, the entire
+ request fails.
+
+ **Maximum:** 100 phone numbers per request.
+
+ Args:
+ phone_numbers: List of phone numbers to associate for reputation monitoring (max 100)
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ if not enterprise_id:
+ raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
+ return await self._post(
+ path_template("/enterprises/{enterprise_id}/reputation/numbers", enterprise_id=enterprise_id),
+ body=await async_maybe_transform(
+ {"phone_numbers": phone_numbers}, number_associate_params.NumberAssociateParams
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=NumberAssociateResponse,
+ )
+
+ async def disassociate(
self,
phone_number: str,
*,
@@ -516,17 +518,17 @@ class NumbersResourceWithRawResponse:
def __init__(self, numbers: NumbersResource) -> None:
self._numbers = numbers
- self.create = to_raw_response_wrapper(
- numbers.create,
- )
self.retrieve = to_raw_response_wrapper(
numbers.retrieve,
)
self.list = to_raw_response_wrapper(
numbers.list,
)
- self.delete = to_raw_response_wrapper(
- numbers.delete,
+ self.associate = to_raw_response_wrapper(
+ numbers.associate,
+ )
+ self.disassociate = to_raw_response_wrapper(
+ numbers.disassociate,
)
@@ -534,17 +536,17 @@ class AsyncNumbersResourceWithRawResponse:
def __init__(self, numbers: AsyncNumbersResource) -> None:
self._numbers = numbers
- self.create = async_to_raw_response_wrapper(
- numbers.create,
- )
self.retrieve = async_to_raw_response_wrapper(
numbers.retrieve,
)
self.list = async_to_raw_response_wrapper(
numbers.list,
)
- self.delete = async_to_raw_response_wrapper(
- numbers.delete,
+ self.associate = async_to_raw_response_wrapper(
+ numbers.associate,
+ )
+ self.disassociate = async_to_raw_response_wrapper(
+ numbers.disassociate,
)
@@ -552,17 +554,17 @@ class NumbersResourceWithStreamingResponse:
def __init__(self, numbers: NumbersResource) -> None:
self._numbers = numbers
- self.create = to_streamed_response_wrapper(
- numbers.create,
- )
self.retrieve = to_streamed_response_wrapper(
numbers.retrieve,
)
self.list = to_streamed_response_wrapper(
numbers.list,
)
- self.delete = to_streamed_response_wrapper(
- numbers.delete,
+ self.associate = to_streamed_response_wrapper(
+ numbers.associate,
+ )
+ self.disassociate = to_streamed_response_wrapper(
+ numbers.disassociate,
)
@@ -570,15 +572,15 @@ class AsyncNumbersResourceWithStreamingResponse:
def __init__(self, numbers: AsyncNumbersResource) -> None:
self._numbers = numbers
- self.create = async_to_streamed_response_wrapper(
- numbers.create,
- )
self.retrieve = async_to_streamed_response_wrapper(
numbers.retrieve,
)
self.list = async_to_streamed_response_wrapper(
numbers.list,
)
- self.delete = async_to_streamed_response_wrapper(
- numbers.delete,
+ self.associate = async_to_streamed_response_wrapper(
+ numbers.associate,
+ )
+ self.disassociate = async_to_streamed_response_wrapper(
+ numbers.disassociate,
)
diff --git a/src/telnyx/resources/enterprises/reputation/reputation.py b/src/telnyx/resources/enterprises/reputation/reputation.py
index 1f3772ef..615635e4 100644
--- a/src/telnyx/resources/enterprises/reputation/reputation.py
+++ b/src/telnyx/resources/enterprises/reputation/reputation.py
@@ -25,9 +25,9 @@
async_to_streamed_response_wrapper,
)
from ...._base_client import make_request_options
-from ....types.enterprises import reputation_create_params, reputation_update_frequency_params
-from ....types.enterprises.reputation_list_response import ReputationListResponse
-from ....types.enterprises.reputation_create_response import ReputationCreateResponse
+from ....types.enterprises import reputation_enable_params, reputation_update_frequency_params
+from ....types.enterprises.reputation_enable_response import ReputationEnableResponse
+from ....types.enterprises.reputation_retrieve_response import ReputationRetrieveResponse
from ....types.enterprises.reputation_update_frequency_response import ReputationUpdateFrequencyResponse
__all__ = ["ReputationResource", "AsyncReputationResource"]
@@ -64,52 +64,26 @@ def with_streaming_response(self) -> ReputationResourceWithStreamingResponse:
"""
return ReputationResourceWithStreamingResponse(self)
- def create(
+ def retrieve(
self,
enterprise_id: str,
*,
- loa_document_id: str,
- check_frequency: Literal["business_daily", "daily", "weekly", "biweekly", "monthly", "never"] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> ReputationCreateResponse:
+ ) -> ReputationRetrieveResponse:
"""
- Enable Number Reputation service for an enterprise.
-
- **Requirements:**
-
- - Signed LOA (Letter of Authorization) document ID
- - Reputation check frequency (defaults to `business_daily`)
- - Number Reputation Terms of Service must be accepted
-
- **Flow:**
-
- 1. Registers the enterprise for reputation monitoring
- 2. Creates reputation settings with `pending` status
- 3. Awaits admin approval before monitoring begins
-
- **Resubmission After Rejection:** If a previously rejected record exists, this
- endpoint will delete it and create a new `pending` record.
+ Retrieve the current Number Reputation settings for an enterprise.
- **Available Frequencies:**
+ Returns the enrollment status (`pending`, `approved`, `rejected`, `deleted`),
+ check frequency, and any rejection reasons.
- - `business_daily` — Monday–Friday
- - `daily` — Every day
- - `weekly` — Once per week
- - `biweekly` — Once every two weeks
- - `monthly` — Once per month
- - `never` — Manual refresh only
+ Returns `404` if reputation has not been enabled for this enterprise.
Args:
- loa_document_id: ID of the signed Letter of Authorization (LOA) document uploaded to the document
- service
-
- check_frequency: Frequency for automatically refreshing reputation data
-
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -120,22 +94,15 @@ def create(
"""
if not enterprise_id:
raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
- return self._post(
+ return self._get(
path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id),
- body=maybe_transform(
- {
- "loa_document_id": loa_document_id,
- "check_frequency": check_frequency,
- },
- reputation_create_params.ReputationCreateParams,
- ),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=ReputationCreateResponse,
+ cast_to=ReputationRetrieveResponse,
)
- def list(
+ def disable(
self,
enterprise_id: str,
*,
@@ -145,14 +112,17 @@ def list(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> ReputationListResponse:
+ ) -> None:
"""
- Retrieve the current Number Reputation settings for an enterprise.
+ Disable Number Reputation for an enterprise.
- Returns the enrollment status (`pending`, `approved`, `rejected`, `deleted`),
- check frequency, and any rejection reasons.
+ This will:
- Returns `404` if reputation has not been enabled for this enterprise.
+ - Delete the reputation settings record
+ - Log the deletion for audit purposes
+ - Stop all future automated reputation checks
+
+ **Note:** Can only be performed on `approved` reputation settings.
Args:
extra_headers: Send extra headers
@@ -165,37 +135,61 @@ def list(
"""
if not enterprise_id:
raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
- return self._get(
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ return self._delete(
path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=ReputationListResponse,
+ cast_to=NoneType,
)
- def delete_all(
+ def enable(
self,
enterprise_id: str,
*,
+ loa_document_id: str,
+ check_frequency: Literal["business_daily", "daily", "weekly", "biweekly", "monthly", "never"] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> ReputationEnableResponse:
"""
- Disable Number Reputation for an enterprise.
+ Enable Number Reputation service for an enterprise.
- This will:
+ **Requirements:**
- - Delete the reputation settings record
- - Log the deletion for audit purposes
- - Stop all future automated reputation checks
+ - Signed LOA (Letter of Authorization) document ID
+ - Reputation check frequency (defaults to `business_daily`)
+ - Number Reputation Terms of Service must be accepted
- **Note:** Can only be performed on `approved` reputation settings.
+ **Flow:**
+
+ 1. Registers the enterprise for reputation monitoring
+ 2. Creates reputation settings with `pending` status
+ 3. Awaits admin approval before monitoring begins
+
+ **Resubmission After Rejection:** If a previously rejected record exists, this
+ endpoint will delete it and create a new `pending` record.
+
+ **Available Frequencies:**
+
+ - `business_daily` — Monday–Friday
+ - `daily` — Every day
+ - `weekly` — Once per week
+ - `biweekly` — Once every two weeks
+ - `monthly` — Once per month
+ - `never` — Manual refresh only
Args:
+ loa_document_id: ID of the signed Letter of Authorization (LOA) document uploaded to the document
+ service
+
+ check_frequency: Frequency for automatically refreshing reputation data
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -206,13 +200,19 @@ def delete_all(
"""
if not enterprise_id:
raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
- return self._delete(
+ return self._post(
path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id),
+ body=maybe_transform(
+ {
+ "loa_document_id": loa_document_id,
+ "check_frequency": check_frequency,
+ },
+ reputation_enable_params.ReputationEnableParams,
+ ),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=ReputationEnableResponse,
)
def update_frequency(
@@ -298,52 +298,26 @@ def with_streaming_response(self) -> AsyncReputationResourceWithStreamingRespons
"""
return AsyncReputationResourceWithStreamingResponse(self)
- async def create(
+ async def retrieve(
self,
enterprise_id: str,
*,
- loa_document_id: str,
- check_frequency: Literal["business_daily", "daily", "weekly", "biweekly", "monthly", "never"] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> ReputationCreateResponse:
+ ) -> ReputationRetrieveResponse:
"""
- Enable Number Reputation service for an enterprise.
-
- **Requirements:**
-
- - Signed LOA (Letter of Authorization) document ID
- - Reputation check frequency (defaults to `business_daily`)
- - Number Reputation Terms of Service must be accepted
-
- **Flow:**
-
- 1. Registers the enterprise for reputation monitoring
- 2. Creates reputation settings with `pending` status
- 3. Awaits admin approval before monitoring begins
-
- **Resubmission After Rejection:** If a previously rejected record exists, this
- endpoint will delete it and create a new `pending` record.
+ Retrieve the current Number Reputation settings for an enterprise.
- **Available Frequencies:**
+ Returns the enrollment status (`pending`, `approved`, `rejected`, `deleted`),
+ check frequency, and any rejection reasons.
- - `business_daily` — Monday–Friday
- - `daily` — Every day
- - `weekly` — Once per week
- - `biweekly` — Once every two weeks
- - `monthly` — Once per month
- - `never` — Manual refresh only
+ Returns `404` if reputation has not been enabled for this enterprise.
Args:
- loa_document_id: ID of the signed Letter of Authorization (LOA) document uploaded to the document
- service
-
- check_frequency: Frequency for automatically refreshing reputation data
-
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -354,22 +328,15 @@ async def create(
"""
if not enterprise_id:
raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
- return await self._post(
+ return await self._get(
path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id),
- body=await async_maybe_transform(
- {
- "loa_document_id": loa_document_id,
- "check_frequency": check_frequency,
- },
- reputation_create_params.ReputationCreateParams,
- ),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=ReputationCreateResponse,
+ cast_to=ReputationRetrieveResponse,
)
- async def list(
+ async def disable(
self,
enterprise_id: str,
*,
@@ -379,14 +346,17 @@ async def list(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> ReputationListResponse:
+ ) -> None:
"""
- Retrieve the current Number Reputation settings for an enterprise.
+ Disable Number Reputation for an enterprise.
- Returns the enrollment status (`pending`, `approved`, `rejected`, `deleted`),
- check frequency, and any rejection reasons.
+ This will:
- Returns `404` if reputation has not been enabled for this enterprise.
+ - Delete the reputation settings record
+ - Log the deletion for audit purposes
+ - Stop all future automated reputation checks
+
+ **Note:** Can only be performed on `approved` reputation settings.
Args:
extra_headers: Send extra headers
@@ -399,37 +369,61 @@ async def list(
"""
if not enterprise_id:
raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
- return await self._get(
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ return await self._delete(
path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=ReputationListResponse,
+ cast_to=NoneType,
)
- async def delete_all(
+ async def enable(
self,
enterprise_id: str,
*,
+ loa_document_id: str,
+ check_frequency: Literal["business_daily", "daily", "weekly", "biweekly", "monthly", "never"] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> ReputationEnableResponse:
"""
- Disable Number Reputation for an enterprise.
+ Enable Number Reputation service for an enterprise.
- This will:
+ **Requirements:**
- - Delete the reputation settings record
- - Log the deletion for audit purposes
- - Stop all future automated reputation checks
+ - Signed LOA (Letter of Authorization) document ID
+ - Reputation check frequency (defaults to `business_daily`)
+ - Number Reputation Terms of Service must be accepted
- **Note:** Can only be performed on `approved` reputation settings.
+ **Flow:**
+
+ 1. Registers the enterprise for reputation monitoring
+ 2. Creates reputation settings with `pending` status
+ 3. Awaits admin approval before monitoring begins
+
+ **Resubmission After Rejection:** If a previously rejected record exists, this
+ endpoint will delete it and create a new `pending` record.
+
+ **Available Frequencies:**
+
+ - `business_daily` — Monday–Friday
+ - `daily` — Every day
+ - `weekly` — Once per week
+ - `biweekly` — Once every two weeks
+ - `monthly` — Once per month
+ - `never` — Manual refresh only
Args:
+ loa_document_id: ID of the signed Letter of Authorization (LOA) document uploaded to the document
+ service
+
+ check_frequency: Frequency for automatically refreshing reputation data
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -440,13 +434,19 @@ async def delete_all(
"""
if not enterprise_id:
raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}")
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
- return await self._delete(
+ return await self._post(
path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id),
+ body=await async_maybe_transform(
+ {
+ "loa_document_id": loa_document_id,
+ "check_frequency": check_frequency,
+ },
+ reputation_enable_params.ReputationEnableParams,
+ ),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=ReputationEnableResponse,
)
async def update_frequency(
@@ -505,14 +505,14 @@ class ReputationResourceWithRawResponse:
def __init__(self, reputation: ReputationResource) -> None:
self._reputation = reputation
- self.create = to_raw_response_wrapper(
- reputation.create,
+ self.retrieve = to_raw_response_wrapper(
+ reputation.retrieve,
)
- self.list = to_raw_response_wrapper(
- reputation.list,
+ self.disable = to_raw_response_wrapper(
+ reputation.disable,
)
- self.delete_all = to_raw_response_wrapper(
- reputation.delete_all,
+ self.enable = to_raw_response_wrapper(
+ reputation.enable,
)
self.update_frequency = to_raw_response_wrapper(
reputation.update_frequency,
@@ -530,14 +530,14 @@ class AsyncReputationResourceWithRawResponse:
def __init__(self, reputation: AsyncReputationResource) -> None:
self._reputation = reputation
- self.create = async_to_raw_response_wrapper(
- reputation.create,
+ self.retrieve = async_to_raw_response_wrapper(
+ reputation.retrieve,
)
- self.list = async_to_raw_response_wrapper(
- reputation.list,
+ self.disable = async_to_raw_response_wrapper(
+ reputation.disable,
)
- self.delete_all = async_to_raw_response_wrapper(
- reputation.delete_all,
+ self.enable = async_to_raw_response_wrapper(
+ reputation.enable,
)
self.update_frequency = async_to_raw_response_wrapper(
reputation.update_frequency,
@@ -555,14 +555,14 @@ class ReputationResourceWithStreamingResponse:
def __init__(self, reputation: ReputationResource) -> None:
self._reputation = reputation
- self.create = to_streamed_response_wrapper(
- reputation.create,
+ self.retrieve = to_streamed_response_wrapper(
+ reputation.retrieve,
)
- self.list = to_streamed_response_wrapper(
- reputation.list,
+ self.disable = to_streamed_response_wrapper(
+ reputation.disable,
)
- self.delete_all = to_streamed_response_wrapper(
- reputation.delete_all,
+ self.enable = to_streamed_response_wrapper(
+ reputation.enable,
)
self.update_frequency = to_streamed_response_wrapper(
reputation.update_frequency,
@@ -580,14 +580,14 @@ class AsyncReputationResourceWithStreamingResponse:
def __init__(self, reputation: AsyncReputationResource) -> None:
self._reputation = reputation
- self.create = async_to_streamed_response_wrapper(
- reputation.create,
+ self.retrieve = async_to_streamed_response_wrapper(
+ reputation.retrieve,
)
- self.list = async_to_streamed_response_wrapper(
- reputation.list,
+ self.disable = async_to_streamed_response_wrapper(
+ reputation.disable,
)
- self.delete_all = async_to_streamed_response_wrapper(
- reputation.delete_all,
+ self.enable = async_to_streamed_response_wrapper(
+ reputation.enable,
)
self.update_frequency = async_to_streamed_response_wrapper(
reputation.update_frequency,
diff --git a/src/telnyx/types/ai/__init__.py b/src/telnyx/types/ai/__init__.py
index 363ee22c..15ded622 100644
--- a/src/telnyx/types/ai/__init__.py
+++ b/src/telnyx/types/ai/__init__.py
@@ -6,6 +6,7 @@
from .hangup_tool import HangupTool as HangupTool
from .conversation import Conversation as Conversation
from .mission_data import MissionData as MissionData
+from .observability import Observability as Observability
from .assistant_tool import AssistantTool as AssistantTool
from .retrieval_tool import RetrievalTool as RetrievalTool
from .voice_settings import VoiceSettings as VoiceSettings
@@ -59,6 +60,7 @@
from .embedding_create_params import EmbeddingCreateParams as EmbeddingCreateParams
from .embedding_list_response import EmbeddingListResponse as EmbeddingListResponse
from .mission_create_response import MissionCreateResponse as MissionCreateResponse
+from .observability_req_param import ObservabilityReqParam as ObservabilityReqParam
from .assistant_imports_params import AssistantImportsParams as AssistantImportsParams
from .cluster_compute_response import ClusterComputeResponse as ClusterComputeResponse
from .conversation_list_params import ConversationListParams as ConversationListParams
diff --git a/src/telnyx/types/ai/assistant_create_params.py b/src/telnyx/types/ai/assistant_create_params.py
index fc30301f..539acffa 100644
--- a/src/telnyx/types/ai/assistant_create_params.py
+++ b/src/telnyx/types/ai/assistant_create_params.py
@@ -3,7 +3,7 @@
from __future__ import annotations
from typing import Dict, List, Iterable
-from typing_extensions import Literal, Required, TypedDict
+from typing_extensions import Required, TypedDict
from ..._types import SequenceNotStr
from .enabled_features import EnabledFeatures
@@ -12,11 +12,12 @@
from .widget_settings_param import WidgetSettingsParam
from .insight_settings_param import InsightSettingsParam
from .privacy_settings_param import PrivacySettingsParam
+from .observability_req_param import ObservabilityReqParam
from .messaging_settings_param import MessagingSettingsParam
from .telephony_settings_param import TelephonySettingsParam
from .transcription_settings_param import TranscriptionSettingsParam
-__all__ = ["AssistantCreateParams", "ObservabilitySettings"]
+__all__ = ["AssistantCreateParams"]
class AssistantCreateParams(TypedDict, total=False):
@@ -75,7 +76,7 @@ class AssistantCreateParams(TypedDict, total=False):
messaging_settings: MessagingSettingsParam
- observability_settings: ObservabilitySettings
+ observability_settings: ObservabilityReqParam
privacy_settings: PrivacySettingsParam
@@ -96,13 +97,3 @@ class AssistantCreateParams(TypedDict, total=False):
widget_settings: WidgetSettingsParam
"""Configuration settings for the assistant's web widget."""
-
-
-class ObservabilitySettings(TypedDict, total=False):
- host: str
-
- public_key_ref: str
-
- secret_key_ref: str
-
- status: Literal["enabled", "disabled"]
diff --git a/src/telnyx/types/ai/assistant_update_params.py b/src/telnyx/types/ai/assistant_update_params.py
index 69aad9d3..caeecbfc 100644
--- a/src/telnyx/types/ai/assistant_update_params.py
+++ b/src/telnyx/types/ai/assistant_update_params.py
@@ -3,7 +3,7 @@
from __future__ import annotations
from typing import Dict, List, Iterable
-from typing_extensions import Literal, TypedDict
+from typing_extensions import TypedDict
from ..._types import SequenceNotStr
from .enabled_features import EnabledFeatures
@@ -12,11 +12,12 @@
from .widget_settings_param import WidgetSettingsParam
from .insight_settings_param import InsightSettingsParam
from .privacy_settings_param import PrivacySettingsParam
+from .observability_req_param import ObservabilityReqParam
from .messaging_settings_param import MessagingSettingsParam
from .telephony_settings_param import TelephonySettingsParam
from .transcription_settings_param import TranscriptionSettingsParam
-__all__ = ["AssistantUpdateParams", "ObservabilitySettings"]
+__all__ = ["AssistantUpdateParams"]
class AssistantUpdateParams(TypedDict, total=False):
@@ -75,7 +76,7 @@ class AssistantUpdateParams(TypedDict, total=False):
name: str
- observability_settings: ObservabilitySettings
+ observability_settings: ObservabilityReqParam
privacy_settings: PrivacySettingsParam
@@ -102,13 +103,3 @@ class AssistantUpdateParams(TypedDict, total=False):
widget_settings: WidgetSettingsParam
"""Configuration settings for the assistant's web widget."""
-
-
-class ObservabilitySettings(TypedDict, total=False):
- host: str
-
- public_key_ref: str
-
- secret_key_ref: str
-
- status: Literal["enabled", "disabled"]
diff --git a/src/telnyx/types/ai/assistants/version_update_params.py b/src/telnyx/types/ai/assistants/version_update_params.py
index 71c7350c..15d873ca 100644
--- a/src/telnyx/types/ai/assistants/version_update_params.py
+++ b/src/telnyx/types/ai/assistants/version_update_params.py
@@ -3,7 +3,7 @@
from __future__ import annotations
from typing import Dict, List, Iterable
-from typing_extensions import Literal, Required, TypedDict
+from typing_extensions import Required, TypedDict
from ...._types import SequenceNotStr
from ..enabled_features import EnabledFeatures
@@ -12,11 +12,12 @@
from ..widget_settings_param import WidgetSettingsParam
from ..insight_settings_param import InsightSettingsParam
from ..privacy_settings_param import PrivacySettingsParam
+from ..observability_req_param import ObservabilityReqParam
from ..messaging_settings_param import MessagingSettingsParam
from ..telephony_settings_param import TelephonySettingsParam
from ..transcription_settings_param import TranscriptionSettingsParam
-__all__ = ["VersionUpdateParams", "ObservabilitySettings"]
+__all__ = ["VersionUpdateParams"]
class VersionUpdateParams(TypedDict, total=False):
@@ -77,7 +78,7 @@ class VersionUpdateParams(TypedDict, total=False):
name: str
- observability_settings: ObservabilitySettings
+ observability_settings: ObservabilityReqParam
privacy_settings: PrivacySettingsParam
@@ -98,13 +99,3 @@ class VersionUpdateParams(TypedDict, total=False):
widget_settings: WidgetSettingsParam
"""Configuration settings for the assistant's web widget."""
-
-
-class ObservabilitySettings(TypedDict, total=False):
- host: str
-
- public_key_ref: str
-
- secret_key_ref: str
-
- status: Literal["enabled", "disabled"]
diff --git a/src/telnyx/types/ai/inference_embedding.py b/src/telnyx/types/ai/inference_embedding.py
index aa03fc0f..9322c737 100644
--- a/src/telnyx/types/ai/inference_embedding.py
+++ b/src/telnyx/types/ai/inference_embedding.py
@@ -2,9 +2,9 @@
from typing import Dict, List, Optional
from datetime import datetime
-from typing_extensions import Literal
from ..._models import BaseModel
+from .observability import Observability
from .assistant_tool import AssistantTool
from .voice_settings import VoiceSettings
from .import_metadata import ImportMetadata
@@ -16,17 +16,7 @@
from .telephony_settings import TelephonySettings
from .transcription_settings import TranscriptionSettings
-__all__ = ["InferenceEmbedding", "ObservabilitySettings"]
-
-
-class ObservabilitySettings(BaseModel):
- host: Optional[str] = None
-
- public_key_ref: Optional[str] = None
-
- secret_key_ref: Optional[str] = None
-
- status: Optional[Literal["enabled", "disabled"]] = None
+__all__ = ["InferenceEmbedding"]
class InferenceEmbedding(BaseModel):
@@ -91,7 +81,7 @@ class InferenceEmbedding(BaseModel):
messaging_settings: Optional[MessagingSettings] = None
- observability_settings: Optional[ObservabilitySettings] = None
+ observability_settings: Optional[Observability] = None
privacy_settings: Optional[PrivacySettings] = None
diff --git a/src/telnyx/types/ai/observability.py b/src/telnyx/types/ai/observability.py
new file mode 100644
index 00000000..b9e4a12d
--- /dev/null
+++ b/src/telnyx/types/ai/observability.py
@@ -0,0 +1,18 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Optional
+from typing_extensions import Literal
+
+from ..._models import BaseModel
+
+__all__ = ["Observability"]
+
+
+class Observability(BaseModel):
+ host: Optional[str] = None
+
+ public_key_ref: Optional[str] = None
+
+ secret_key_ref: Optional[str] = None
+
+ status: Optional[Literal["enabled", "disabled"]] = None
diff --git a/src/telnyx/types/ai/observability_req_param.py b/src/telnyx/types/ai/observability_req_param.py
new file mode 100644
index 00000000..7ff5f38e
--- /dev/null
+++ b/src/telnyx/types/ai/observability_req_param.py
@@ -0,0 +1,17 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import Literal, TypedDict
+
+__all__ = ["ObservabilityReqParam"]
+
+
+class ObservabilityReqParam(TypedDict, total=False):
+ host: str
+
+ public_key_ref: str
+
+ secret_key_ref: str
+
+ status: Literal["enabled", "disabled"]
diff --git a/src/telnyx/types/call_dial_params.py b/src/telnyx/types/call_dial_params.py
index 25f8bffe..8edba96a 100644
--- a/src/telnyx/types/call_dial_params.py
+++ b/src/telnyx/types/call_dial_params.py
@@ -160,6 +160,14 @@ class CallDialParams(TypedDict, total=False):
Disabled by default.
"""
+ privacy: Literal["id", "none"]
+ """Indicates the privacy level to be used for the call.
+
+ When set to `id`, caller ID information (name and number) will be hidden from
+ the called party. When set to `none` or omitted, caller ID will be shown
+ normally.
+ """
+
record: Literal["record-from-answer"]
"""Start recording automatically after an event. Disabled by default."""
diff --git a/src/telnyx/types/calls/action_transfer_params.py b/src/telnyx/types/calls/action_transfer_params.py
index a6a5b29c..c778bcb3 100644
--- a/src/telnyx/types/calls/action_transfer_params.py
+++ b/src/telnyx/types/calls/action_transfer_params.py
@@ -109,6 +109,14 @@ class ActionTransferParams(TypedDict, total=False):
`H264`, `AMR-WB`.
"""
+ privacy: Literal["id", "none"]
+ """Indicates the privacy level to be used for the call.
+
+ When set to `id`, caller ID information (name and number) will be hidden from
+ the called party. When set to `none` or omitted, caller ID will be shown
+ normally.
+ """
+
record: Literal["record-from-answer"]
"""Start recording automatically after an event. Disabled by default."""
diff --git a/src/telnyx/types/enterprises/__init__.py b/src/telnyx/types/enterprises/__init__.py
index f2bd14c4..b0427e0f 100644
--- a/src/telnyx/types/enterprises/__init__.py
+++ b/src/telnyx/types/enterprises/__init__.py
@@ -2,9 +2,9 @@
from __future__ import annotations
-from .reputation_create_params import ReputationCreateParams as ReputationCreateParams
-from .reputation_list_response import ReputationListResponse as ReputationListResponse
-from .reputation_create_response import ReputationCreateResponse as ReputationCreateResponse
+from .reputation_enable_params import ReputationEnableParams as ReputationEnableParams
+from .reputation_enable_response import ReputationEnableResponse as ReputationEnableResponse
from .enterprise_reputation_public import EnterpriseReputationPublic as EnterpriseReputationPublic
+from .reputation_retrieve_response import ReputationRetrieveResponse as ReputationRetrieveResponse
from .reputation_update_frequency_params import ReputationUpdateFrequencyParams as ReputationUpdateFrequencyParams
from .reputation_update_frequency_response import ReputationUpdateFrequencyResponse as ReputationUpdateFrequencyResponse
diff --git a/src/telnyx/types/enterprises/reputation/__init__.py b/src/telnyx/types/enterprises/reputation/__init__.py
index d68081b7..e47c43b9 100644
--- a/src/telnyx/types/enterprises/reputation/__init__.py
+++ b/src/telnyx/types/enterprises/reputation/__init__.py
@@ -3,7 +3,7 @@
from __future__ import annotations
from .number_list_params import NumberListParams as NumberListParams
-from .number_create_params import NumberCreateParams as NumberCreateParams
-from .number_create_response import NumberCreateResponse as NumberCreateResponse
from .number_retrieve_params import NumberRetrieveParams as NumberRetrieveParams
+from .number_associate_params import NumberAssociateParams as NumberAssociateParams
from .number_retrieve_response import NumberRetrieveResponse as NumberRetrieveResponse
+from .number_associate_response import NumberAssociateResponse as NumberAssociateResponse
diff --git a/src/telnyx/types/enterprises/reputation/number_create_params.py b/src/telnyx/types/enterprises/reputation/number_associate_params.py
similarity index 79%
rename from src/telnyx/types/enterprises/reputation/number_create_params.py
rename to src/telnyx/types/enterprises/reputation/number_associate_params.py
index c65ee9fe..56cf75ad 100644
--- a/src/telnyx/types/enterprises/reputation/number_create_params.py
+++ b/src/telnyx/types/enterprises/reputation/number_associate_params.py
@@ -6,9 +6,9 @@
from ...._types import SequenceNotStr
-__all__ = ["NumberCreateParams"]
+__all__ = ["NumberAssociateParams"]
-class NumberCreateParams(TypedDict, total=False):
+class NumberAssociateParams(TypedDict, total=False):
phone_numbers: Required[SequenceNotStr[str]]
"""List of phone numbers to associate for reputation monitoring (max 100)"""
diff --git a/src/telnyx/types/enterprises/reputation/number_create_response.py b/src/telnyx/types/enterprises/reputation/number_associate_response.py
similarity index 89%
rename from src/telnyx/types/enterprises/reputation/number_create_response.py
rename to src/telnyx/types/enterprises/reputation/number_associate_response.py
index 8b580cb8..e1fd5fb4 100644
--- a/src/telnyx/types/enterprises/reputation/number_create_response.py
+++ b/src/telnyx/types/enterprises/reputation/number_associate_response.py
@@ -6,7 +6,7 @@
from ...._models import BaseModel
from ...shared.meta_info import MetaInfo
-__all__ = ["NumberCreateResponse", "Data"]
+__all__ = ["NumberAssociateResponse", "Data"]
class Data(BaseModel):
@@ -26,7 +26,7 @@ class Data(BaseModel):
"""When the record was last updated"""
-class NumberCreateResponse(BaseModel):
+class NumberAssociateResponse(BaseModel):
data: Optional[List[Data]] = None
meta: Optional[MetaInfo] = None
diff --git a/src/telnyx/types/enterprises/reputation_create_params.py b/src/telnyx/types/enterprises/reputation_enable_params.py
similarity index 84%
rename from src/telnyx/types/enterprises/reputation_create_params.py
rename to src/telnyx/types/enterprises/reputation_enable_params.py
index 12ecf8cf..c0894e37 100644
--- a/src/telnyx/types/enterprises/reputation_create_params.py
+++ b/src/telnyx/types/enterprises/reputation_enable_params.py
@@ -4,10 +4,10 @@
from typing_extensions import Literal, Required, TypedDict
-__all__ = ["ReputationCreateParams"]
+__all__ = ["ReputationEnableParams"]
-class ReputationCreateParams(TypedDict, total=False):
+class ReputationEnableParams(TypedDict, total=False):
loa_document_id: Required[str]
"""
ID of the signed Letter of Authorization (LOA) document uploaded to the document
diff --git a/src/telnyx/types/enterprises/reputation_list_response.py b/src/telnyx/types/enterprises/reputation_enable_response.py
similarity index 77%
rename from src/telnyx/types/enterprises/reputation_list_response.py
rename to src/telnyx/types/enterprises/reputation_enable_response.py
index 064ce4bd..c22a6292 100644
--- a/src/telnyx/types/enterprises/reputation_list_response.py
+++ b/src/telnyx/types/enterprises/reputation_enable_response.py
@@ -5,8 +5,8 @@
from ..._models import BaseModel
from .enterprise_reputation_public import EnterpriseReputationPublic
-__all__ = ["ReputationListResponse"]
+__all__ = ["ReputationEnableResponse"]
-class ReputationListResponse(BaseModel):
+class ReputationEnableResponse(BaseModel):
data: Optional[EnterpriseReputationPublic] = None
diff --git a/src/telnyx/types/enterprises/reputation_create_response.py b/src/telnyx/types/enterprises/reputation_retrieve_response.py
similarity index 76%
rename from src/telnyx/types/enterprises/reputation_create_response.py
rename to src/telnyx/types/enterprises/reputation_retrieve_response.py
index 1c40c3f1..abb44ffb 100644
--- a/src/telnyx/types/enterprises/reputation_create_response.py
+++ b/src/telnyx/types/enterprises/reputation_retrieve_response.py
@@ -5,8 +5,8 @@
from ..._models import BaseModel
from .enterprise_reputation_public import EnterpriseReputationPublic
-__all__ = ["ReputationCreateResponse"]
+__all__ = ["ReputationRetrieveResponse"]
-class ReputationCreateResponse(BaseModel):
+class ReputationRetrieveResponse(BaseModel):
data: Optional[EnterpriseReputationPublic] = None
diff --git a/tests/api_resources/calls/test_actions.py b/tests/api_resources/calls/test_actions.py
index 82120ccd..9c28a8d5 100644
--- a/tests/api_resources/calls/test_actions.py
+++ b/tests/api_resources/calls/test_actions.py
@@ -2422,6 +2422,7 @@ def test_method_transfer_with_all_params(self, client: Telnyx) -> None:
mute_dtmf="opposite",
park_after_unbridge="self",
preferred_codecs="G722,PCMU,PCMA,G729,OPUS,VP8,H264",
+ privacy="id",
record="record-from-answer",
record_channels="single",
record_custom_file_name="my_recording_file_name",
@@ -4915,6 +4916,7 @@ async def test_method_transfer_with_all_params(self, async_client: AsyncTelnyx)
mute_dtmf="opposite",
park_after_unbridge="self",
preferred_codecs="G722,PCMU,PCMA,G729,OPUS,VP8,H264",
+ privacy="id",
record="record-from-answer",
record_channels="single",
record_custom_file_name="my_recording_file_name",
diff --git a/tests/api_resources/enterprises/reputation/test_numbers.py b/tests/api_resources/enterprises/reputation/test_numbers.py
index 50957688..584bea8d 100644
--- a/tests/api_resources/enterprises/reputation/test_numbers.py
+++ b/tests/api_resources/enterprises/reputation/test_numbers.py
@@ -12,8 +12,8 @@
from telnyx.pagination import SyncDefaultFlatPagination, AsyncDefaultFlatPagination
from telnyx.types.shared import ReputationPhoneNumberWithReputationData
from telnyx.types.enterprises.reputation import (
- NumberCreateResponse,
NumberRetrieveResponse,
+ NumberAssociateResponse,
)
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
@@ -22,52 +22,6 @@
class TestNumbers:
parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create(self, client: Telnyx) -> None:
- number = client.enterprises.reputation.numbers.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- phone_numbers=["+16035551234"],
- )
- assert_matches_type(NumberCreateResponse, number, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_create(self, client: Telnyx) -> None:
- response = client.enterprises.reputation.numbers.with_raw_response.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- phone_numbers=["+16035551234"],
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- number = response.parse()
- assert_matches_type(NumberCreateResponse, number, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_create(self, client: Telnyx) -> None:
- with client.enterprises.reputation.numbers.with_streaming_response.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- phone_numbers=["+16035551234"],
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- number = response.parse()
- assert_matches_type(NumberCreateResponse, number, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_create(self, client: Telnyx) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- client.enterprises.reputation.numbers.with_raw_response.create(
- enterprise_id="",
- phone_numbers=["+16035551234"],
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_retrieve(self, client: Telnyx) -> None:
@@ -193,108 +147,108 @@ def test_path_params_list(self, client: Telnyx) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_method_delete(self, client: Telnyx) -> None:
- number = client.enterprises.reputation.numbers.delete(
- phone_number="+16035551234",
+ def test_method_associate(self, client: Telnyx) -> None:
+ number = client.enterprises.reputation.numbers.associate(
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ phone_numbers=["+16035551234"],
)
- assert number is None
+ assert_matches_type(NumberAssociateResponse, number, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_raw_response_delete(self, client: Telnyx) -> None:
- response = client.enterprises.reputation.numbers.with_raw_response.delete(
- phone_number="+16035551234",
+ def test_raw_response_associate(self, client: Telnyx) -> None:
+ response = client.enterprises.reputation.numbers.with_raw_response.associate(
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ phone_numbers=["+16035551234"],
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
number = response.parse()
- assert number is None
+ assert_matches_type(NumberAssociateResponse, number, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_streaming_response_delete(self, client: Telnyx) -> None:
- with client.enterprises.reputation.numbers.with_streaming_response.delete(
- phone_number="+16035551234",
+ def test_streaming_response_associate(self, client: Telnyx) -> None:
+ with client.enterprises.reputation.numbers.with_streaming_response.associate(
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ phone_numbers=["+16035551234"],
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
number = response.parse()
- assert number is None
+ assert_matches_type(NumberAssociateResponse, number, path=["response"])
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_path_params_delete(self, client: Telnyx) -> None:
+ def test_path_params_associate(self, client: Telnyx) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- client.enterprises.reputation.numbers.with_raw_response.delete(
- phone_number="+16035551234",
+ client.enterprises.reputation.numbers.with_raw_response.associate(
enterprise_id="",
+ phone_numbers=["+16035551234"],
)
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `phone_number` but received ''"):
- client.enterprises.reputation.numbers.with_raw_response.delete(
- phone_number="",
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- )
-
-
-class TestAsyncNumbers:
- parametrize = pytest.mark.parametrize(
- "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_method_create(self, async_client: AsyncTelnyx) -> None:
- number = await async_client.enterprises.reputation.numbers.create(
+ def test_method_disassociate(self, client: Telnyx) -> None:
+ number = client.enterprises.reputation.numbers.disassociate(
+ phone_number="+16035551234",
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- phone_numbers=["+16035551234"],
)
- assert_matches_type(NumberCreateResponse, number, path=["response"])
+ assert number is None
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_raw_response_create(self, async_client: AsyncTelnyx) -> None:
- response = await async_client.enterprises.reputation.numbers.with_raw_response.create(
+ def test_raw_response_disassociate(self, client: Telnyx) -> None:
+ response = client.enterprises.reputation.numbers.with_raw_response.disassociate(
+ phone_number="+16035551234",
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- phone_numbers=["+16035551234"],
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- number = await response.parse()
- assert_matches_type(NumberCreateResponse, number, path=["response"])
+ number = response.parse()
+ assert number is None
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_streaming_response_create(self, async_client: AsyncTelnyx) -> None:
- async with async_client.enterprises.reputation.numbers.with_streaming_response.create(
+ def test_streaming_response_disassociate(self, client: Telnyx) -> None:
+ with client.enterprises.reputation.numbers.with_streaming_response.disassociate(
+ phone_number="+16035551234",
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- phone_numbers=["+16035551234"],
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- number = await response.parse()
- assert_matches_type(NumberCreateResponse, number, path=["response"])
+ number = response.parse()
+ assert number is None
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_path_params_create(self, async_client: AsyncTelnyx) -> None:
+ def test_path_params_disassociate(self, client: Telnyx) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- await async_client.enterprises.reputation.numbers.with_raw_response.create(
+ client.enterprises.reputation.numbers.with_raw_response.disassociate(
+ phone_number="+16035551234",
enterprise_id="",
- phone_numbers=["+16035551234"],
)
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `phone_number` but received ''"):
+ client.enterprises.reputation.numbers.with_raw_response.disassociate(
+ phone_number="",
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ )
+
+
+class TestAsyncNumbers:
+ parametrize = pytest.mark.parametrize(
+ "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
+ )
+
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_retrieve(self, async_client: AsyncTelnyx) -> None:
@@ -420,8 +374,54 @@ async def test_path_params_list(self, async_client: AsyncTelnyx) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_method_delete(self, async_client: AsyncTelnyx) -> None:
- number = await async_client.enterprises.reputation.numbers.delete(
+ async def test_method_associate(self, async_client: AsyncTelnyx) -> None:
+ number = await async_client.enterprises.reputation.numbers.associate(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ phone_numbers=["+16035551234"],
+ )
+ assert_matches_type(NumberAssociateResponse, number, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_associate(self, async_client: AsyncTelnyx) -> None:
+ response = await async_client.enterprises.reputation.numbers.with_raw_response.associate(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ phone_numbers=["+16035551234"],
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ number = await response.parse()
+ assert_matches_type(NumberAssociateResponse, number, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_associate(self, async_client: AsyncTelnyx) -> None:
+ async with async_client.enterprises.reputation.numbers.with_streaming_response.associate(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ phone_numbers=["+16035551234"],
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ number = await response.parse()
+ assert_matches_type(NumberAssociateResponse, number, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_path_params_associate(self, async_client: AsyncTelnyx) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
+ await async_client.enterprises.reputation.numbers.with_raw_response.associate(
+ enterprise_id="",
+ phone_numbers=["+16035551234"],
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_disassociate(self, async_client: AsyncTelnyx) -> None:
+ number = await async_client.enterprises.reputation.numbers.disassociate(
phone_number="+16035551234",
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
@@ -429,8 +429,8 @@ async def test_method_delete(self, async_client: AsyncTelnyx) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_raw_response_delete(self, async_client: AsyncTelnyx) -> None:
- response = await async_client.enterprises.reputation.numbers.with_raw_response.delete(
+ async def test_raw_response_disassociate(self, async_client: AsyncTelnyx) -> None:
+ response = await async_client.enterprises.reputation.numbers.with_raw_response.disassociate(
phone_number="+16035551234",
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
@@ -442,8 +442,8 @@ async def test_raw_response_delete(self, async_client: AsyncTelnyx) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_streaming_response_delete(self, async_client: AsyncTelnyx) -> None:
- async with async_client.enterprises.reputation.numbers.with_streaming_response.delete(
+ async def test_streaming_response_disassociate(self, async_client: AsyncTelnyx) -> None:
+ async with async_client.enterprises.reputation.numbers.with_streaming_response.disassociate(
phone_number="+16035551234",
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
) as response:
@@ -457,15 +457,15 @@ async def test_streaming_response_delete(self, async_client: AsyncTelnyx) -> Non
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_path_params_delete(self, async_client: AsyncTelnyx) -> None:
+ async def test_path_params_disassociate(self, async_client: AsyncTelnyx) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- await async_client.enterprises.reputation.numbers.with_raw_response.delete(
+ await async_client.enterprises.reputation.numbers.with_raw_response.disassociate(
phone_number="+16035551234",
enterprise_id="",
)
with pytest.raises(ValueError, match=r"Expected a non-empty value for `phone_number` but received ''"):
- await async_client.enterprises.reputation.numbers.with_raw_response.delete(
+ await async_client.enterprises.reputation.numbers.with_raw_response.disassociate(
phone_number="",
enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
diff --git a/tests/api_resources/enterprises/test_reputation.py b/tests/api_resources/enterprises/test_reputation.py
index 53730e20..50b78d98 100644
--- a/tests/api_resources/enterprises/test_reputation.py
+++ b/tests/api_resources/enterprises/test_reputation.py
@@ -10,8 +10,8 @@
from telnyx import Telnyx, AsyncTelnyx
from tests.utils import assert_matches_type
from telnyx.types.enterprises import (
- ReputationListResponse,
- ReputationCreateResponse,
+ ReputationEnableResponse,
+ ReputationRetrieveResponse,
ReputationUpdateFrequencyResponse,
)
@@ -23,142 +23,142 @@ class TestReputation:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_method_create(self, client: Telnyx) -> None:
- reputation = client.enterprises.reputation.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- loa_document_id="doc_01HXYZ1234ABCDEF",
- )
- assert_matches_type(ReputationCreateResponse, reputation, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create_with_all_params(self, client: Telnyx) -> None:
- reputation = client.enterprises.reputation.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- loa_document_id="doc_01HXYZ1234ABCDEF",
- check_frequency="business_daily",
+ def test_method_retrieve(self, client: Telnyx) -> None:
+ reputation = client.enterprises.reputation.retrieve(
+ "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
- assert_matches_type(ReputationCreateResponse, reputation, path=["response"])
+ assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_raw_response_create(self, client: Telnyx) -> None:
- response = client.enterprises.reputation.with_raw_response.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- loa_document_id="doc_01HXYZ1234ABCDEF",
+ def test_raw_response_retrieve(self, client: Telnyx) -> None:
+ response = client.enterprises.reputation.with_raw_response.retrieve(
+ "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = response.parse()
- assert_matches_type(ReputationCreateResponse, reputation, path=["response"])
+ assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_streaming_response_create(self, client: Telnyx) -> None:
- with client.enterprises.reputation.with_streaming_response.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- loa_document_id="doc_01HXYZ1234ABCDEF",
+ def test_streaming_response_retrieve(self, client: Telnyx) -> None:
+ with client.enterprises.reputation.with_streaming_response.retrieve(
+ "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = response.parse()
- assert_matches_type(ReputationCreateResponse, reputation, path=["response"])
+ assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"])
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_path_params_create(self, client: Telnyx) -> None:
+ def test_path_params_retrieve(self, client: Telnyx) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- client.enterprises.reputation.with_raw_response.create(
- enterprise_id="",
- loa_document_id="doc_01HXYZ1234ABCDEF",
+ client.enterprises.reputation.with_raw_response.retrieve(
+ "",
)
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_method_list(self, client: Telnyx) -> None:
- reputation = client.enterprises.reputation.list(
+ def test_method_disable(self, client: Telnyx) -> None:
+ reputation = client.enterprises.reputation.disable(
"6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
- assert_matches_type(ReputationListResponse, reputation, path=["response"])
+ assert reputation is None
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_raw_response_list(self, client: Telnyx) -> None:
- response = client.enterprises.reputation.with_raw_response.list(
+ def test_raw_response_disable(self, client: Telnyx) -> None:
+ response = client.enterprises.reputation.with_raw_response.disable(
"6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = response.parse()
- assert_matches_type(ReputationListResponse, reputation, path=["response"])
+ assert reputation is None
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_streaming_response_list(self, client: Telnyx) -> None:
- with client.enterprises.reputation.with_streaming_response.list(
+ def test_streaming_response_disable(self, client: Telnyx) -> None:
+ with client.enterprises.reputation.with_streaming_response.disable(
"6a09cdc3-8948-47f0-aa62-74ac943d6c58",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = response.parse()
- assert_matches_type(ReputationListResponse, reputation, path=["response"])
+ assert reputation is None
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_path_params_list(self, client: Telnyx) -> None:
+ def test_path_params_disable(self, client: Telnyx) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- client.enterprises.reputation.with_raw_response.list(
+ client.enterprises.reputation.with_raw_response.disable(
"",
)
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_method_delete_all(self, client: Telnyx) -> None:
- reputation = client.enterprises.reputation.delete_all(
- "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ def test_method_enable(self, client: Telnyx) -> None:
+ reputation = client.enterprises.reputation.enable(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
)
- assert reputation is None
+ assert_matches_type(ReputationEnableResponse, reputation, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_raw_response_delete_all(self, client: Telnyx) -> None:
- response = client.enterprises.reputation.with_raw_response.delete_all(
- "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ def test_method_enable_with_all_params(self, client: Telnyx) -> None:
+ reputation = client.enterprises.reputation.enable(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
+ check_frequency="business_daily",
+ )
+ assert_matches_type(ReputationEnableResponse, reputation, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_enable(self, client: Telnyx) -> None:
+ response = client.enterprises.reputation.with_raw_response.enable(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = response.parse()
- assert reputation is None
+ assert_matches_type(ReputationEnableResponse, reputation, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_streaming_response_delete_all(self, client: Telnyx) -> None:
- with client.enterprises.reputation.with_streaming_response.delete_all(
- "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ def test_streaming_response_enable(self, client: Telnyx) -> None:
+ with client.enterprises.reputation.with_streaming_response.enable(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = response.parse()
- assert reputation is None
+ assert_matches_type(ReputationEnableResponse, reputation, path=["response"])
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- def test_path_params_delete_all(self, client: Telnyx) -> None:
+ def test_path_params_enable(self, client: Telnyx) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- client.enterprises.reputation.with_raw_response.delete_all(
- "",
+ client.enterprises.reputation.with_raw_response.enable(
+ enterprise_id="",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
)
@pytest.mark.skip(reason="Mock server tests are disabled")
@@ -215,142 +215,142 @@ class TestAsyncReputation:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_method_create(self, async_client: AsyncTelnyx) -> None:
- reputation = await async_client.enterprises.reputation.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- loa_document_id="doc_01HXYZ1234ABCDEF",
- )
- assert_matches_type(ReputationCreateResponse, reputation, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_create_with_all_params(self, async_client: AsyncTelnyx) -> None:
- reputation = await async_client.enterprises.reputation.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- loa_document_id="doc_01HXYZ1234ABCDEF",
- check_frequency="business_daily",
+ async def test_method_retrieve(self, async_client: AsyncTelnyx) -> None:
+ reputation = await async_client.enterprises.reputation.retrieve(
+ "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
- assert_matches_type(ReputationCreateResponse, reputation, path=["response"])
+ assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_raw_response_create(self, async_client: AsyncTelnyx) -> None:
- response = await async_client.enterprises.reputation.with_raw_response.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- loa_document_id="doc_01HXYZ1234ABCDEF",
+ async def test_raw_response_retrieve(self, async_client: AsyncTelnyx) -> None:
+ response = await async_client.enterprises.reputation.with_raw_response.retrieve(
+ "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = await response.parse()
- assert_matches_type(ReputationCreateResponse, reputation, path=["response"])
+ assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_streaming_response_create(self, async_client: AsyncTelnyx) -> None:
- async with async_client.enterprises.reputation.with_streaming_response.create(
- enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
- loa_document_id="doc_01HXYZ1234ABCDEF",
+ async def test_streaming_response_retrieve(self, async_client: AsyncTelnyx) -> None:
+ async with async_client.enterprises.reputation.with_streaming_response.retrieve(
+ "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = await response.parse()
- assert_matches_type(ReputationCreateResponse, reputation, path=["response"])
+ assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"])
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_path_params_create(self, async_client: AsyncTelnyx) -> None:
+ async def test_path_params_retrieve(self, async_client: AsyncTelnyx) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- await async_client.enterprises.reputation.with_raw_response.create(
- enterprise_id="",
- loa_document_id="doc_01HXYZ1234ABCDEF",
+ await async_client.enterprises.reputation.with_raw_response.retrieve(
+ "",
)
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_method_list(self, async_client: AsyncTelnyx) -> None:
- reputation = await async_client.enterprises.reputation.list(
+ async def test_method_disable(self, async_client: AsyncTelnyx) -> None:
+ reputation = await async_client.enterprises.reputation.disable(
"6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
- assert_matches_type(ReputationListResponse, reputation, path=["response"])
+ assert reputation is None
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_raw_response_list(self, async_client: AsyncTelnyx) -> None:
- response = await async_client.enterprises.reputation.with_raw_response.list(
+ async def test_raw_response_disable(self, async_client: AsyncTelnyx) -> None:
+ response = await async_client.enterprises.reputation.with_raw_response.disable(
"6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = await response.parse()
- assert_matches_type(ReputationListResponse, reputation, path=["response"])
+ assert reputation is None
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_streaming_response_list(self, async_client: AsyncTelnyx) -> None:
- async with async_client.enterprises.reputation.with_streaming_response.list(
+ async def test_streaming_response_disable(self, async_client: AsyncTelnyx) -> None:
+ async with async_client.enterprises.reputation.with_streaming_response.disable(
"6a09cdc3-8948-47f0-aa62-74ac943d6c58",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = await response.parse()
- assert_matches_type(ReputationListResponse, reputation, path=["response"])
+ assert reputation is None
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_path_params_list(self, async_client: AsyncTelnyx) -> None:
+ async def test_path_params_disable(self, async_client: AsyncTelnyx) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- await async_client.enterprises.reputation.with_raw_response.list(
+ await async_client.enterprises.reputation.with_raw_response.disable(
"",
)
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_method_delete_all(self, async_client: AsyncTelnyx) -> None:
- reputation = await async_client.enterprises.reputation.delete_all(
- "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ async def test_method_enable(self, async_client: AsyncTelnyx) -> None:
+ reputation = await async_client.enterprises.reputation.enable(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
)
- assert reputation is None
+ assert_matches_type(ReputationEnableResponse, reputation, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_raw_response_delete_all(self, async_client: AsyncTelnyx) -> None:
- response = await async_client.enterprises.reputation.with_raw_response.delete_all(
- "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ async def test_method_enable_with_all_params(self, async_client: AsyncTelnyx) -> None:
+ reputation = await async_client.enterprises.reputation.enable(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
+ check_frequency="business_daily",
+ )
+ assert_matches_type(ReputationEnableResponse, reputation, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_enable(self, async_client: AsyncTelnyx) -> None:
+ response = await async_client.enterprises.reputation.with_raw_response.enable(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = await response.parse()
- assert reputation is None
+ assert_matches_type(ReputationEnableResponse, reputation, path=["response"])
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_streaming_response_delete_all(self, async_client: AsyncTelnyx) -> None:
- async with async_client.enterprises.reputation.with_streaming_response.delete_all(
- "6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ async def test_streaming_response_enable(self, async_client: AsyncTelnyx) -> None:
+ async with async_client.enterprises.reputation.with_streaming_response.enable(
+ enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
reputation = await response.parse()
- assert reputation is None
+ assert_matches_type(ReputationEnableResponse, reputation, path=["response"])
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
- async def test_path_params_delete_all(self, async_client: AsyncTelnyx) -> None:
+ async def test_path_params_enable(self, async_client: AsyncTelnyx) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"):
- await async_client.enterprises.reputation.with_raw_response.delete_all(
- "",
+ await async_client.enterprises.reputation.with_raw_response.enable(
+ enterprise_id="",
+ loa_document_id="doc_01HXYZ1234ABCDEF",
)
@pytest.mark.skip(reason="Mock server tests are disabled")
diff --git a/tests/api_resources/test_calls.py b/tests/api_resources/test_calls.py
index a175da1d..9218818c 100644
--- a/tests/api_resources/test_calls.py
+++ b/tests/api_resources/test_calls.py
@@ -97,6 +97,7 @@ def test_method_dial_with_all_params(self, client: Telnyx) -> None:
park_after_unbridge="self",
preferred_codecs="G722,PCMU,PCMA,G729,OPUS,VP8,H264",
prevent_double_bridge=True,
+ privacy="id",
record="record-from-answer",
record_channels="single",
record_custom_file_name="my_recording_file_name",
@@ -320,6 +321,7 @@ async def test_method_dial_with_all_params(self, async_client: AsyncTelnyx) -> N
park_after_unbridge="self",
preferred_codecs="G722,PCMU,PCMA,G729,OPUS,VP8,H264",
prevent_double_bridge=True,
+ privacy="id",
record="record-from-answer",
record_channels="single",
record_custom_file_name="my_recording_file_name",