Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,72 @@ twilio-python Changelog

Here you can see the full list of changes between each twilio-python release.

[2026-10-06] Version 9.11.3
---------------------------
**Audiences**
- ## 2026-10-02
- **Added 1 new path(s)**:
- `/preview/Cohorts/{cohortId}/Operations` (AdminListCohortOperations)
- ## 2026-10-01
- **Content updates**:
- Updated description for `AdminListSnapshotOperations`
- ## 2026-09-28
- **Content updates**:
- Updated description for `AdminListCohortSnapshots`
- Updated description for `AdminFetchCohortSnapshot`
- Updated schema description for `Criteria`
- Added properties to `OperationPayload`: cohortId
- Removed properties from `OperationPayload`: audienceId
- Updated schema description for `OperationResult`
- Added properties to `OperationResult`: cohortId
- Removed properties from `OperationResult`: audienceId
- Updated schema description for `Record`
- Updated schema description for `Cohort`
- ...and 3 more changes
- ## 2026-10-01
- Minor updates (formatting, metadata)
- ## 2026-09-28
- **Content updates**:
- Updated schema description for `CohortOperationResult`
- Updated schema description for `PartitionCount`

**Conversations**
- Add `traitExtractionStrategyIds` and `observationExtractionStrategyIds` to the Conversations v2 Admin Configuration schema.
- Align the Conversations v2 Capabilities list and create contracts with the backend `domainId` field.

**Data-ingress**
- ## 2026-10-01
- Minor updates (formatting, metadata)
- ## 2026-09-17
- Add support for Hubspot connector
- ## 2026-10-01
- Minor updates (formatting, metadata)
- ## 2026-09-17
- Add support for Hubspot connector

**Knowledge**
- ## 2026-09-24
- **Routing updates**:
- Changed `downstreamServiceName` from `memora-domain` to `enterprise-knowledge-domain` for all operations

**Memory**
- ## 2026-09-30
- The `source` field on observations and conversation summaries, and the `source` filter
- on `ListProfileObservations`, now also accept forward slashes (`/`). The pattern is
- `^[a-zA-Z0-9 _./-]+$`. This is additive and backwards compatible: every previously
- valid value is still accepted.
- `UpdateStore`, `UpdateTraitGroup`, and `UpdateDataMapping` now require a body with at least one property. An empty `{}` gets a 400.

**Messaging**
- Add opt-out configuration admin endpoints (`GET/PUT/DELETE /v1/Accounts/{AccountSid}/OptOuts/{OptOutSid}/...`) to the messaging admin-api (dev-us1 and stage-us1 only)
- Add create opt-out configuration endpoint (`POST /v1/Accounts/{AccountSid}/OptOuts`) to the messaging admin-api (dev-us1 and stage-us1 only)
- Add update messaging service endpoint (`PUT /v1/Accounts/{AccountSid}/Services/{MessagingServiceSid}`) to the messaging admin-api (dev-us1 and stage-us1 only)
- Add WhatsApp display name change support to Sender API: `pending_display_name`, `pending_display_name_status` and `pending_display_name_status_date` on fetch, and `display_name_status` on update and partial update

**Routes**
- Set SDK and docs visibility of `GET`/`POST` `/v3/ShortCodes/{isoCountryCode}/{shortCode}` to `public`, maturity to `ga`


[2026-09-28] Version 9.11.2
---------------------------
**Twiml**
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

setup(
name="twilio",
version="9.11.2",
version="9.11.3",
description="Twilio API client and TwiML generator",
author="Twilio",
help_center="https://www.twilio.com/help/contact",
Expand Down
2 changes: 1 addition & 1 deletion twilio/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
__version_info__ = ("9", "11", "2")
__version_info__ = ("9", "11", "3")
__version__ = ".".join(__version_info__)
24 changes: 12 additions & 12 deletions twilio/rest/api/v2010/account/conference/__init__.py

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions twilio/rest/conversations/v2/action.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,14 @@ class ConversationsV2Channel(object):

"""
:ivar id: Unique identifier for this Action.
:ivar type: The type of action. Accepted values: SEND_MESSAGE.
:ivar type: The type of action: action-send-message or action-start-flow.
:ivar status:
:ivar conversation_id: The conversation this action belongs to.
:ivar related: Named identifiers from downstream. For SEND_MESSAGE: - messageSid: The downstream message SID (present when PENDING or COMPLETED) - communicationId: The Communication ID (present when COMPLETED)
:ivar related: Named identifiers from downstream. For SEND_MESSAGE: - messageSid: The downstream message SID (present when PENDING or COMPLETED) - communicationId: The Communication ID (present when COMPLETED) For START_FLOW: - executionSid: The Studio Flow execution SID (present when COMPLETED)
:ivar created_at: Timestamp when the action was created.
:ivar updated_at: Timestamp when the action was last updated.
:ivar completed_at: Timestamp when the action reached a terminal status.
:ivar failure_reason: Human-readable failure reason. Null unless status is FAILED.
"""

def __init__(
Expand Down Expand Up @@ -75,6 +76,7 @@ def __init__(
self.completed_at: Optional[datetime] = deserialize.iso8601_datetime(
payload.get("completedAt")
)
self.failure_reason: Optional[str] = payload.get("failureReason")

# Only set _solution if path params are provided (not None)
if conversation_id is not None or action_id is not None:
Expand Down
3 changes: 3 additions & 0 deletions twilio/rest/conversations/v2/communication.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,7 @@ class CreateCommunicationInConversationRequest(object):
:ivar author:
:ivar content:
:ivar channel_id:
:ivar resource_id: External resource identifier for this Communication (e.g. MessageSid for SMS/RCS/WhatsApp, TranscriptionSid + MessageIndex for Voice). If a Communication with the same resourceId already exists in the Conversation, it is updated instead of a new one being created.
:ivar recipients:
:ivar occurred_at: Timestamp when this Communication occurred. If omitted, the server uses the current time.
"""
Expand All @@ -414,6 +415,7 @@ def __init__(self, payload: Dict[str, Any]):
else None
)
self.channel_id: Optional[str] = payload.get("channelId")
self.resource_id: Optional[str] = payload.get("resourceId")
self.recipients: Optional[
List[
CommunicationList.CreateCommunicationInConversationRequestRecipients
Expand All @@ -439,6 +441,7 @@ def to_dict(self):
"author": self.author.to_dict() if self.author is not None else None,
"content": self.content.to_dict() if self.content is not None else None,
"channelId": self.channel_id,
"resourceId": self.resource_id,
"recipients": (
[recipients.to_dict() for recipients in self.recipients]
if self.recipients is not None
Expand Down
16 changes: 12 additions & 4 deletions twilio/rest/conversations/v2/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ class ConversationsV2ConversationGroupingType(object):
)

"""
:ivar status_url: URL to poll for operation status.
:ivar related: Named resource identifiers associated with this operation. Keys depend on the operation type: - config-create, config-update, config-delete: configurationId - conversation-delete: conversationId
:ivar id: Configuration ID.
:ivar display_name: A human-readable name for the configuration. Limited to 32 characters.
:ivar description: Human-readable description for the Configuration. Allows spaces and special characters, typically limited to a paragraph of text. This serves as a descriptive field rather than just a name.
Expand All @@ -45,20 +43,22 @@ class ConversationsV2ConversationGroupingType(object):
:ivar channel_settings: Channel-specific configuration settings by channel type. Keys should be valid channel types (`VOICE`, `SMS`, `RCS`, `WHATSAPP`, `CHAT`).
:ivar status_callbacks: List of default webhook configurations applied to Conversations under this Configuration.
:ivar intelligence_configuration_ids: A list of Conversational Intelligence configuration IDs.
:ivar trait_extraction_strategy_ids: A list of Trait Extraction Strategy IDs.
:ivar observation_extraction_strategy_ids: A list of Observation Extraction Strategy IDs.
:ivar memory_extraction_enabled: Whether memory extraction is enabled for conversations under this configuration. Defaults to false.
:ivar conversations_v1_bridge:
:ivar created_at: Timestamp when this Configuration was created.
:ivar updated_at: Timestamp when this Configuration was last updated.
:ivar version: Version number used for optimistic locking.
:ivar status_url: URL to poll for operation status.
:ivar related: Named resource identifiers associated with this operation. Keys depend on the operation type: - config-create, config-update, config-delete: configurationId - conversation-delete: conversationId
"""

def __init__(
self, version: Version, payload: Dict[str, Any], id: Optional[str] = None
):
super().__init__(version)

self.status_url: Optional[str] = payload.get("statusUrl")
self.related: Optional[Dict[str, str]] = payload.get("related")
self.id: Optional[str] = payload.get("id")
self.display_name: Optional[str] = payload.get("displayName")
self.description: Optional[str] = payload.get("description")
Expand All @@ -75,6 +75,12 @@ def __init__(
self.intelligence_configuration_ids: Optional[List[str]] = payload.get(
"intelligenceConfigurationIds"
)
self.trait_extraction_strategy_ids: Optional[List[str]] = payload.get(
"traitExtractionStrategyIds"
)
self.observation_extraction_strategy_ids: Optional[List[str]] = payload.get(
"observationExtractionStrategyIds"
)
self.memory_extraction_enabled: Optional[bool] = payload.get(
"memoryExtractionEnabled"
)
Expand All @@ -88,6 +94,8 @@ def __init__(
payload.get("updatedAt")
)
self.version: Optional[int] = payload.get("version")
self.status_url: Optional[str] = payload.get("statusUrl")
self.related: Optional[Dict[str, str]] = payload.get("related")

# Only set _solution if path params are provided (not None)
if id is not None:
Expand Down
10 changes: 10 additions & 0 deletions twilio/rest/conversations/v2/conversation.py
Original file line number Diff line number Diff line change
Expand Up @@ -928,6 +928,8 @@ def to_dict(self):
class CreateConversationWithConfigRequestConfiguration(object):
"""
:ivar intelligence_configuration_ids: A list of Conversational Intelligence configuration IDs.
:ivar trait_extraction_strategy_ids: A list of Trait Extraction Strategy IDs.
:ivar observation_extraction_strategy_ids: A list of Observation Extraction Strategy IDs.
:ivar workflows: The Workflows to associate with this Conversation. Overrides the Configuration's own.
"""

Expand All @@ -936,6 +938,12 @@ def __init__(self, payload: Dict[str, Any]):
self.intelligence_configuration_ids: Optional[List[str]] = payload.get(
"intelligenceConfigurationIds"
)
self.trait_extraction_strategy_ids: Optional[List[str]] = payload.get(
"traitExtractionStrategyIds"
)
self.observation_extraction_strategy_ids: Optional[List[str]] = payload.get(
"observationExtractionStrategyIds"
)
self.workflows: Optional[List[ConversationList.ConversationWorkflow]] = (
[
(
Expand All @@ -952,6 +960,8 @@ def __init__(self, payload: Dict[str, Any]):
def to_dict(self):
return {
"intelligenceConfigurationIds": self.intelligence_configuration_ids,
"traitExtractionStrategyIds": self.trait_extraction_strategy_ids,
"observationExtractionStrategyIds": self.observation_extraction_strategy_ids,
"workflows": (
[workflows.to_dict() for workflows in self.workflows]
if self.workflows is not None
Expand Down
2 changes: 1 addition & 1 deletion twilio/rest/insights/v1/call/call_summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class ProcessingState(object):
:ivar client_edge: `object` Contains metrics and properties for the Twilio media gateway of a Client call. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#edges-and-their-properties) for the object properties.
:ivar sdk_edge: `object` Contains metrics and properties for the SDK sensor library for Client calls. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#edges-and-their-properties) for the object properties.
:ivar sip_edge: `object` Contains metrics and properties for the Twilio media gateway of a SIP Interface or Trunking call. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#edges-and-their-properties) for the object properties.
:ivar tags: Tags applied to calls by Voice Insights analysis indicating a condition that could result in subjective degradation of the call quality.
:ivar tags: [Tags](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-tags) that Voice Insights analysis applies to calls. They indicate a condition that may influence the subjective experience of call audio quality.
:ivar url: The URL of this resource.
:ivar attributes: `object` Attributes capturing call-flow-specific details. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#attributes-object) for the object properties.
:ivar properties: `object` Contains edge-agnostic call-level details. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#properties-object) for the object properties.
Expand Down
2 changes: 1 addition & 1 deletion twilio/rest/insights/v1/call_summaries.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ class CallSummaryCrelaySessionState(object):
:ivar client_edge: `object` Contains metrics and properties for the Twilio media gateway of a Client call. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#edges-and-their-properties) for the object properties.
:ivar sdk_edge: `object` Contains metrics and properties for the SDK sensor library for Client calls. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#edges-and-their-properties) for the object properties.
:ivar sip_edge: `object` Contains metrics and properties for the Twilio media gateway of a SIP Interface or Trunking call. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#edges-and-their-properties) for the object properties.
:ivar tags: Tags applied to calls by Voice Insights analysis indicating a condition that could result in subjective degradation of the call quality.
:ivar tags: [Tags](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-tags) that Voice Insights analysis applies to calls. They indicate a condition that may influence the subjective experience of call audio quality.
:ivar url: The URL of this resource.
:ivar attributes: `object` Attributes capturing call-flow-specific details. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#attributes-object) for the object properties.
:ivar properties: `object` Contains edge-agnostic call-level details. See [Details: Call Summary](https://www.twilio.com/docs/voice/voice-insights/api/call/details-call-summary#properties-object) for the object properties.
Expand Down
10 changes: 5 additions & 5 deletions twilio/rest/memory/v1/conversation_summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@

class ConversationSummaryInstance(InstanceResource):
"""
:ivar source: The source system that generated the summary. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.
:ivar message:
:ivar source: The source system that generated the summary. Allows letters, numbers, spaces, periods, underscores, hyphens, and forward slashes.
:ivar content: The main content of the summary.
:ivar occurred_at: The timestamp when the summary was originally created.
:ivar conversation_id: A unique identifier for the conversation using Twilio Type ID (TTID) format.
:ivar id: A unique identifier for the summary using Twilio Type ID (TTID) format.
:ivar created_at: The timestamp when the summary was created.
:ivar updated_at: The timestamp when the summary was last updated.
:ivar message:
"""

def __init__(
Expand All @@ -47,6 +47,7 @@ def __init__(
):
super().__init__(version)

self.message: Optional[str] = payload.get("message")
self.source: Optional[str] = payload.get("source")
self.content: Optional[str] = payload.get("content")
self.occurred_at: Optional[datetime] = deserialize.iso8601_datetime(
Expand All @@ -60,7 +61,6 @@ def __init__(
self.updated_at: Optional[datetime] = deserialize.iso8601_datetime(
payload.get("updatedAt")
)
self.message: Optional[str] = payload.get("message")

# Only set _solution if path params are provided (not None)
if store_id is not None or profile_id is not None or summary_id is not None:
Expand Down Expand Up @@ -580,7 +580,7 @@ def to_dict(self):

class SummaryCore(object):
"""
:ivar source: The source system that generated the summary. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.
:ivar source: The source system that generated the summary. Allows letters, numbers, spaces, periods, underscores, hyphens, and forward slashes.
:ivar content: The main content of the summary.
:ivar occurred_at: The timestamp when the summary was originally created.
:ivar conversation_id: A unique identifier for the conversation using Twilio Type ID (TTID) format.
Expand All @@ -603,7 +603,7 @@ def to_dict(self):

class SummaryCorePatch(object):
"""
:ivar source: The source system that generated the summary. Allows letters, numbers, spaces, and URL-safe symbols. Excludes URL-unsafe characters like quotes, angle brackets, and control characters.
:ivar source: The source system that generated the summary. Allows letters, numbers, spaces, periods, underscores, hyphens, and forward slashes.
:ivar content: The main content of the summary.
:ivar occurred_at: The timestamp when the summary was originally created. If not provided, defaults to the time the summary was received.
:ivar conversation_id: A unique identifier for the conversation using Twilio Type ID (TTID) format.
Expand Down
Loading
Loading