Skip to content
Merged
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
2 changes: 1 addition & 1 deletion .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ jobs:
run: |
bash ./bin/publish-pypi
env:
PYPI_TOKEN: ${{ secrets.SENT_DM_PYPI_TOKEN || secrets.PYPI_TOKEN }}
PYPI_TOKEN: ${{ secrets.SENT_PYPI_TOKEN || secrets.PYPI_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/release-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ jobs:
run: |
bash ./bin/check-release-environment
env:
PYPI_TOKEN: ${{ secrets.SENT_DM_PYPI_TOKEN || secrets.PYPI_TOKEN }}
PYPI_TOKEN: ${{ secrets.SENT_PYPI_TOKEN || secrets.PYPI_TOKEN }}
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.16.0"
".": "0.17.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 40
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-f2cbab8576dd9d0ece91116dcfe1eb190ff0a2ff9334f812d94ad6f3b3afb807.yml
openapi_spec_hash: 1571d3e04a2b043574b91646b4062f3b
config_hash: d8e8429147c4e214ff53c11e7ab2a1a6
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-5dc1981aa33b7d68052db07daa5cebe74c5529c2fd24e68d3a8985cfd47626ff.yml
openapi_spec_hash: c6cb3fad43be2bf8ac0165b201c09e76
config_hash: 405ade725d72d542c60de821a127411b
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## 0.17.0 (2026-03-31)

Full Changelog: [v0.16.0...v0.17.0](https://github.com/sentdm/sent-dm-python/compare/v0.16.0...v0.17.0)

### Features

* **api:** manual updates ([68ae892](https://github.com/sentdm/sent-dm-python/commit/68ae892e39df4a704a64db9687a4ff5f9d2de22f))

## 0.16.0 (2026-03-31)

Full Changelog: [v0.15.0...v0.16.0](https://github.com/sentdm/sent-dm-python/compare/v0.15.0...v0.16.0)
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright 2026 Sent Dm
Copyright 2026 Sent

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
56 changes: 28 additions & 28 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
# Sent Dm Python API library
# Sent Python API library

<!-- prettier-ignore -->
[![PyPI version](https://img.shields.io/pypi/v/sentdm.svg?label=pypi%20(stable))](https://pypi.org/project/sentdm/)

The Sent Dm Python library provides convenient access to the Sent Dm REST API from any Python 3.9+
The Sent Python library provides convenient access to the Sent REST API from any Python 3.9+
application. The library includes type definitions for all request params and response fields,
and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).

It is generated with [Stainless](https://www.stainless.com/).

## MCP Server

Use the Sent Dm MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.
Use the Sent MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.

[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40sentdm%2Fsentdm-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBzZW50ZG0vc2VudGRtLW1jcCJdLCJlbnYiOnsiU0VOVF9ETV9BUElfS0VZIjoiTXkgQVBJIEtleSJ9fQ)
[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40sentdm%2Fsentdm-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40sentdm%2Fsentdm-mcp%22%5D%2C%22env%22%3A%7B%22SENT_DM_API_KEY%22%3A%22My%20API%20Key%22%7D%7D)
Expand All @@ -35,9 +35,9 @@ The full API of this library can be found in [api.md](api.md).

```python
import os
from sent_dm import SentDm
from sent_dm import Sent

client = SentDm(
client = Sent(
api_key=os.environ.get("SENT_DM_API_KEY"), # This is the default and can be omitted
)

Expand All @@ -63,14 +63,14 @@ so that your API Key is not stored in source control.

## Async usage

Simply import `AsyncSentDm` instead of `SentDm` and use `await` with each API call:
Simply import `AsyncSent` instead of `Sent` and use `await` with each API call:

```python
import os
import asyncio
from sent_dm import AsyncSentDm
from sent_dm import AsyncSent

client = AsyncSentDm(
client = AsyncSent(
api_key=os.environ.get("SENT_DM_API_KEY"), # This is the default and can be omitted
)

Expand Down Expand Up @@ -113,11 +113,11 @@ Then you can enable it by instantiating the client with `http_client=DefaultAioH
import os
import asyncio
from sent_dm import DefaultAioHttpClient
from sent_dm import AsyncSentDm
from sent_dm import AsyncSent


async def main() -> None:
async with AsyncSentDm(
async with AsyncSent(
api_key=os.environ.get("SENT_DM_API_KEY"), # This is the default and can be omitted
http_client=DefaultAioHttpClient(),
) as client:
Expand Down Expand Up @@ -153,9 +153,9 @@ Typed requests and responses provide autocomplete and documentation within your
Nested parameters are dictionaries, typed using `TypedDict`, for example:

```python
from sent_dm import SentDm
from sent_dm import Sent

client = SentDm()
client = Sent()

response = client.messages.send(
template={
Expand All @@ -181,9 +181,9 @@ All errors inherit from `sent_dm.APIError`.

```python
import sent_dm
from sent_dm import SentDm
from sent_dm import Sent

client = SentDm()
client = Sent()

try:
client.messages.send(
Expand Down Expand Up @@ -231,10 +231,10 @@ Connection errors (for example, due to a network connectivity problem), 408 Requ
You can use the `max_retries` option to configure or disable retry settings:

```python
from sent_dm import SentDm
from sent_dm import Sent

# Configure the default for all requests:
client = SentDm(
client = Sent(
# default is 2
max_retries=0,
)
Expand All @@ -260,16 +260,16 @@ By default requests time out after 1 minute. You can configure this with a `time
which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object:

```python
from sent_dm import SentDm
from sent_dm import Sent

# Configure the default for all requests:
client = SentDm(
client = Sent(
# 20 seconds (default is 1 minute)
timeout=20.0,
)

# More granular control:
client = SentDm(
client = Sent(
timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0),
)

Expand Down Expand Up @@ -298,10 +298,10 @@ Note that requests that time out are [retried twice by default](#retries).

We use the standard library [`logging`](https://docs.python.org/3/library/logging.html) module.

You can enable logging by setting the environment variable `SENT_DM_LOG` to `info`.
You can enable logging by setting the environment variable `SENT_LOG` to `info`.

```shell
$ export SENT_DM_LOG=info
$ export SENT_LOG=info
```

Or to `debug` for more verbose logging.
Expand All @@ -323,9 +323,9 @@ if response.my_field is None:
The "raw" Response object can be accessed by prefixing `.with_raw_response.` to any HTTP method call, e.g.,

```py
from sent_dm import SentDm
from sent_dm import Sent

client = SentDm()
client = Sent()
response = client.messages.with_raw_response.send(
channel=["sms"],
template={
Expand Down Expand Up @@ -419,10 +419,10 @@ You can directly override the [httpx client](https://www.python-httpx.org/api/#c

```python
import httpx
from sent_dm import SentDm, DefaultHttpxClient
from sent_dm import Sent, DefaultHttpxClient

client = SentDm(
# Or use the `SENT_DM_BASE_URL` env var
client = Sent(
# Or use the `SENT_BASE_URL` env var
base_url="http://my.test.server.example.com:8083",
http_client=DefaultHttpxClient(
proxy="http://my.test.proxy.example.com",
Expand All @@ -442,9 +442,9 @@ client.with_options(http_client=DefaultHttpxClient(...))
By default the library closes underlying HTTP connections whenever the client is [garbage collected](https://docs.python.org/3/reference/datamodel.html#object.__del__). You can manually close the client using the `.close()` method if desired, or with a context manager that closes when exiting.

```py
from sent_dm import SentDm
from sent_dm import Sent

with SentDm() as client:
with Sent() as client:
# make requests here
...

Expand Down
4 changes: 2 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ before making any information public.
## Reporting Non-SDK Related Security Issues

If you encounter security issues that are not directly related to SDKs but pertain to the services
or products provided by Sent Dm, please follow the respective company's security reporting guidelines.
or products provided by Sent, please follow the respective company's security reporting guidelines.

### Sent Dm Terms and Policies
### Sent Terms and Policies

Please contact support@sent.dm for any questions or concerns regarding the security of our services.

Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
[project]
name = "sentdm"
version = "0.16.0"
description = "The official Python library for the sent-dm API"
version = "0.17.0"
description = "The official Python library for the Sent API"
dynamic = ["readme"]
license = "Apache-2.0"
authors = [
{ name = "Sent Dm", email = "support@sent.dm" },
{ name = "Sent", email = "support@sent.dm" },
]

dependencies = [
Expand Down
10 changes: 5 additions & 5 deletions src/sent_dm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
from . import types
from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes, omit, not_given
from ._utils import file_from_path
from ._client import Client, SentDm, Stream, Timeout, Transport, AsyncClient, AsyncSentDm, AsyncStream, RequestOptions
from ._client import Sent, Client, Stream, Timeout, AsyncSent, Transport, AsyncClient, AsyncStream, RequestOptions
from ._models import BaseModel
from ._version import __title__, __version__
from ._response import APIResponse as APIResponse, AsyncAPIResponse as AsyncAPIResponse
from ._constants import DEFAULT_TIMEOUT, DEFAULT_MAX_RETRIES, DEFAULT_CONNECTION_LIMITS
from ._exceptions import (
APIError,
SentDmError,
SentError,
ConflictError,
NotFoundError,
APIStatusError,
Expand Down Expand Up @@ -41,7 +41,7 @@
"not_given",
"Omit",
"omit",
"SentDmError",
"SentError",
"APIError",
"APIStatusError",
"APITimeoutError",
Expand All @@ -61,8 +61,8 @@
"AsyncClient",
"Stream",
"AsyncStream",
"SentDm",
"AsyncSentDm",
"Sent",
"AsyncSent",
"file_from_path",
"BaseModel",
"DEFAULT_TIMEOUT",
Expand Down
Loading
Loading