From 66ddf60b2369f1249a5e0f841f896cb11e28a3be Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 12:16:46 +0000 Subject: [PATCH 1/4] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 07ce33fa..dab9a800 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-2981838429a7115dde77b47f776e620afcaa1c87bedc38ea53bf94d03b0a5349.yml -openapi_spec_hash: f55688cee43db3be0973588b9c217b10 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-f4894fa715fcbb4228385bd51492ec5f9f72c5f2d5fb864689bdc771b3da500f.yml +openapi_spec_hash: 5d2536b63f091c2c9490ebfacc665543 config_hash: 405ade725d72d542c60de821a127411b From 3e0cf55d238cb9c9d52ac1a8e7e0b149f8c2282c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 13:16:44 +0000 Subject: [PATCH 2/4] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index dab9a800..07ce33fa 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-f4894fa715fcbb4228385bd51492ec5f9f72c5f2d5fb864689bdc771b3da500f.yml -openapi_spec_hash: 5d2536b63f091c2c9490ebfacc665543 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-2981838429a7115dde77b47f776e620afcaa1c87bedc38ea53bf94d03b0a5349.yml +openapi_spec_hash: f55688cee43db3be0973588b9c217b10 config_hash: 405ade725d72d542c60de821a127411b From 0346524d6ff95911a85783f0b42e0f626f199e75 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 16:16:44 +0000 Subject: [PATCH 3/4] feat(api): api update --- .stats.yml | 4 ++-- src/sent_dm/resources/webhooks.py | 10 +++++++++- .../types/message_retrieve_activities_response.py | 9 +++++++++ src/sent_dm/types/webhook_create_params.py | 3 +++ .../types/webhook_list_event_types_response.py | 4 ++++ src/sent_dm/types/webhook_response.py | 4 +++- src/sent_dm/types/webhook_update_params.py | 3 +++ tests/api_resources/test_webhooks.py | 12 ++++++++---- 8 files changed, 41 insertions(+), 8 deletions(-) diff --git a/.stats.yml b/.stats.yml index 07ce33fa..0eb3dc01 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-2981838429a7115dde77b47f776e620afcaa1c87bedc38ea53bf94d03b0a5349.yml -openapi_spec_hash: f55688cee43db3be0973588b9c217b10 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-f35f1b37bbee180194767c8644de479a1ce7166e863c4cc22f76115a7adac08f.yml +openapi_spec_hash: b62ddef06e729720dbae93de3efa0898 config_hash: 405ade725d72d542c60de821a127411b diff --git a/src/sent_dm/resources/webhooks.py b/src/sent_dm/resources/webhooks.py index 00f1c1b0..b49b64f4 100644 --- a/src/sent_dm/resources/webhooks.py +++ b/src/sent_dm/resources/webhooks.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Optional +from typing import Dict, Optional import httpx @@ -63,6 +63,7 @@ def create( *, display_name: str | Omit = omit, endpoint_url: str | Omit = omit, + event_filters: Optional[Dict[str, SequenceNotStr[str]]] | Omit = omit, event_types: SequenceNotStr[str] | Omit = omit, retry_count: int | Omit = omit, sandbox: bool | Omit = omit, @@ -106,6 +107,7 @@ def create( { "display_name": display_name, "endpoint_url": endpoint_url, + "event_filters": event_filters, "event_types": event_types, "retry_count": retry_count, "sandbox": sandbox, @@ -160,6 +162,7 @@ def update( *, display_name: str | Omit = omit, endpoint_url: str | Omit = omit, + event_filters: Optional[Dict[str, SequenceNotStr[str]]] | Omit = omit, event_types: SequenceNotStr[str] | Omit = omit, retry_count: int | Omit = omit, sandbox: bool | Omit = omit, @@ -205,6 +208,7 @@ def update( { "display_name": display_name, "endpoint_url": endpoint_url, + "event_filters": event_filters, "event_types": event_types, "retry_count": retry_count, "sandbox": sandbox, @@ -571,6 +575,7 @@ async def create( *, display_name: str | Omit = omit, endpoint_url: str | Omit = omit, + event_filters: Optional[Dict[str, SequenceNotStr[str]]] | Omit = omit, event_types: SequenceNotStr[str] | Omit = omit, retry_count: int | Omit = omit, sandbox: bool | Omit = omit, @@ -614,6 +619,7 @@ async def create( { "display_name": display_name, "endpoint_url": endpoint_url, + "event_filters": event_filters, "event_types": event_types, "retry_count": retry_count, "sandbox": sandbox, @@ -668,6 +674,7 @@ async def update( *, display_name: str | Omit = omit, endpoint_url: str | Omit = omit, + event_filters: Optional[Dict[str, SequenceNotStr[str]]] | Omit = omit, event_types: SequenceNotStr[str] | Omit = omit, retry_count: int | Omit = omit, sandbox: bool | Omit = omit, @@ -713,6 +720,7 @@ async def update( { "display_name": display_name, "endpoint_url": endpoint_url, + "event_filters": event_filters, "event_types": event_types, "retry_count": retry_count, "sandbox": sandbox, diff --git a/src/sent_dm/types/message_retrieve_activities_response.py b/src/sent_dm/types/message_retrieve_activities_response.py index 42a9c0ef..3c07598a 100644 --- a/src/sent_dm/types/message_retrieve_activities_response.py +++ b/src/sent_dm/types/message_retrieve_activities_response.py @@ -3,6 +3,8 @@ from typing import List, Optional from datetime import datetime +from pydantic import Field as FieldInfo + from .._models import BaseModel from .api_meta import APIMeta from .error_detail import ErrorDetail @@ -22,6 +24,13 @@ class DataActivity(BaseModel): description: Optional[str] = None """Human-readable description of the activity""" + from_: Optional[str] = FieldInfo(alias="from", default=None) + """ + Sender phone number for this activity (the customer's sending number for + outbound, the external sender for inbound). Null when not reported by the + provider. + """ + price: Optional[str] = None """ Channel cost for this activity (e.g., SMS/WhatsApp provider cost), formatted to diff --git a/src/sent_dm/types/webhook_create_params.py b/src/sent_dm/types/webhook_create_params.py index 486c5dc6..9933794c 100644 --- a/src/sent_dm/types/webhook_create_params.py +++ b/src/sent_dm/types/webhook_create_params.py @@ -2,6 +2,7 @@ from __future__ import annotations +from typing import Dict, Optional from typing_extensions import Annotated, TypedDict from .._types import SequenceNotStr @@ -15,6 +16,8 @@ class WebhookCreateParams(TypedDict, total=False): endpoint_url: str + event_filters: Optional[Dict[str, SequenceNotStr[str]]] + event_types: SequenceNotStr[str] retry_count: int diff --git a/src/sent_dm/types/webhook_list_event_types_response.py b/src/sent_dm/types/webhook_list_event_types_response.py index df7ce878..ca60286d 100644 --- a/src/sent_dm/types/webhook_list_event_types_response.py +++ b/src/sent_dm/types/webhook_list_event_types_response.py @@ -14,10 +14,14 @@ class DataEventType(BaseModel): display_name: Optional[str] = None + event_type: Optional[str] = None + is_active: Optional[bool] = None name: Optional[str] = None + sub_types: Optional[List[object]] = None + class Data(BaseModel): """The response data (null if error)""" diff --git a/src/sent_dm/types/webhook_response.py b/src/sent_dm/types/webhook_response.py index 439d263a..a0376c8a 100644 --- a/src/sent_dm/types/webhook_response.py +++ b/src/sent_dm/types/webhook_response.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List, Optional +from typing import Dict, List, Optional from datetime import datetime from .._models import BaseModel @@ -19,6 +19,8 @@ class WebhookResponse(BaseModel): endpoint_url: Optional[str] = None + event_filters: Optional[Dict[str, List[str]]] = None + event_types: Optional[List[str]] = None is_active: Optional[bool] = None diff --git a/src/sent_dm/types/webhook_update_params.py b/src/sent_dm/types/webhook_update_params.py index cae48917..3e616855 100644 --- a/src/sent_dm/types/webhook_update_params.py +++ b/src/sent_dm/types/webhook_update_params.py @@ -2,6 +2,7 @@ from __future__ import annotations +from typing import Dict, Optional from typing_extensions import Annotated, TypedDict from .._types import SequenceNotStr @@ -15,6 +16,8 @@ class WebhookUpdateParams(TypedDict, total=False): endpoint_url: str + event_filters: Optional[Dict[str, SequenceNotStr[str]]] + event_types: SequenceNotStr[str] retry_count: int diff --git a/tests/api_resources/test_webhooks.py b/tests/api_resources/test_webhooks.py index 8cec62ea..d1e9ef42 100644 --- a/tests/api_resources/test_webhooks.py +++ b/tests/api_resources/test_webhooks.py @@ -36,7 +36,8 @@ def test_method_create_with_all_params(self, client: Sent) -> None: webhook = client.webhooks.create( display_name="Order Notifications", endpoint_url="https://example.com/webhooks/orders", - event_types=["messages", "templates"], + event_filters={"message": ["delivered", "failed"]}, + event_types=["message", "templates"], retry_count=3, sandbox=False, timeout_seconds=30, @@ -133,7 +134,8 @@ def test_method_update_with_all_params(self, client: Sent) -> None: id="d4f5a6b7-c8d9-4e0f-a1b2-c3d4e5f6a7b8", display_name="Updated Order Notifications", endpoint_url="https://example.com/webhooks/orders-v2", - event_types=["messages", "templates"], + event_filters={"message": ["delivered", "failed"]}, + event_types=["message", "templates"], retry_count=5, sandbox=False, timeout_seconds=60, @@ -557,7 +559,8 @@ async def test_method_create_with_all_params(self, async_client: AsyncSent) -> N webhook = await async_client.webhooks.create( display_name="Order Notifications", endpoint_url="https://example.com/webhooks/orders", - event_types=["messages", "templates"], + event_filters={"message": ["delivered", "failed"]}, + event_types=["message", "templates"], retry_count=3, sandbox=False, timeout_seconds=30, @@ -654,7 +657,8 @@ async def test_method_update_with_all_params(self, async_client: AsyncSent) -> N id="d4f5a6b7-c8d9-4e0f-a1b2-c3d4e5f6a7b8", display_name="Updated Order Notifications", endpoint_url="https://example.com/webhooks/orders-v2", - event_types=["messages", "templates"], + event_filters={"message": ["delivered", "failed"]}, + event_types=["message", "templates"], retry_count=5, sandbox=False, timeout_seconds=60, From c606265e49c7da9acc72b25e5ae720d6b42f3bc8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 16:17:09 +0000 Subject: [PATCH 4/4] release: 0.19.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ pyproject.toml | 2 +- src/sent_dm/_version.py | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 600531e8..e7562934 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.18.3" + ".": "0.19.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index bd67570e..57967fc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.19.0 (2026-04-20) + +Full Changelog: [v0.18.3...v0.19.0](https://github.com/sentdm/sent-dm-python/compare/v0.18.3...v0.19.0) + +### Features + +* **api:** api update ([0346524](https://github.com/sentdm/sent-dm-python/commit/0346524d6ff95911a85783f0b42e0f626f199e75)) + ## 0.18.3 (2026-04-20) Full Changelog: [v0.18.2...v0.18.3](https://github.com/sentdm/sent-dm-python/compare/v0.18.2...v0.18.3) diff --git a/pyproject.toml b/pyproject.toml index 1669b835..84fa3bdf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "sentdm" -version = "0.18.3" +version = "0.19.0" description = "The official Python library for the Sent API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/sent_dm/_version.py b/src/sent_dm/_version.py index 890ebd3c..9643a1ab 100644 --- a/src/sent_dm/_version.py +++ b/src/sent_dm/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "sent_dm" -__version__ = "0.18.3" # x-release-please-version +__version__ = "0.19.0" # x-release-please-version