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
18 changes: 10 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
name: CI
on:
push:
branches-ignore:
- 'generated'
- 'codegen/**'
- 'integrated/**'
- 'stl-preview-head/**'
- 'stl-preview-base/**'
branches:
- '**'
- '!integrated/**'
- '!stl-preview-head/**'
- '!stl-preview-base/**'
- '!generated'
- '!codegen/**'
- 'codegen/stl/**'
pull_request:
branches-ignore:
- 'stl-preview-head/**'
Expand All @@ -17,7 +19,7 @@ jobs:
timeout-minutes: 10
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/courier-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
steps:
- uses: actions/checkout@v6

Expand All @@ -36,7 +38,7 @@ jobs:
run: ./scripts/lint

build:
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
timeout-minutes: 10
name: build
permissions:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.prism.log
.stdy.log
_dev

__pycache__
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "7.9.0"
".": "7.10.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 83
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/courier%2Fcourier-19330fca8fa9bbae835ec9d9f83b37b3df364d9b462090b9623bfc9b6eae99c2.yml
openapi_spec_hash: 0bc6889464c9ac2542b4837f569c1837
config_hash: 1ae49ed522c8423378d9463cdd0fb880
configured_endpoints: 100
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/courier%2Fcourier-b3dde937486812f8db805a423a30ba5d3f80cc95803e13ab66958589366a5f06.yml
openapi_spec_hash: a249df035d7f5bf57c66084cd94e8841
config_hash: c51fa2bafdf96f2c1e409ccc295b7359
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,37 @@
# Changelog

## 7.10.0 (2026-04-01)

Full Changelog: [v7.9.0...v7.10.0](https://github.com/trycourier/courier-python/compare/v7.9.0...v7.10.0)

### Features

* **api:** add create/retrieve/archive/publish/replace, event_id param to notifications ([4951cdc](https://github.com/trycourier/courier-python/commit/4951cdc00d9c0c2a0db727142b6003582d1fc3c4))
* **api:** add html type variant to ElementalNode ([6a1ddc7](https://github.com/trycourier/courier-python/commit/6a1ddc795e86d4988c0bf10d513addcdab87662f))
* **api:** add providers resource with CRUD methods and catalog endpoint ([db4b86b](https://github.com/trycourier/courier-python/commit/db4b86ba098ec178d69effa22d4097aa54ddf904))
* **api:** add routing_strategies resource ([7577000](https://github.com/trycourier/courier-python/commit/7577000f2e0a696a088563de4a17ac85b56d753d))
* **internal:** implement indices array format for query and form serialization ([7fc2cd1](https://github.com/trycourier/courier-python/commit/7fc2cd18f58888f774d63ce974317cc6d388f09e))


### Bug Fixes

* **deps:** bump minimum typing-extensions version ([7ad4509](https://github.com/trycourier/courier-python/commit/7ad4509447a139223b654faf68003316d9f034c6))
* **pydantic:** do not pass `by_alias` unless set ([65aef6b](https://github.com/trycourier/courier-python/commit/65aef6bb51884841b1df70c100577b7fb3333b56))
* sanitize endpoint path params ([9497e29](https://github.com/trycourier/courier-python/commit/9497e29d2cdbb37f4dd1492274adde42d6e03793))


### Chores

* **ci:** skip lint on metadata-only changes ([f6f933d](https://github.com/trycourier/courier-python/commit/f6f933d7802669fefeee85e6f3935f506a772dd3))
* **internal:** tweak CI branches ([40e254c](https://github.com/trycourier/courier-python/commit/40e254ca8d139b91b022ca7cd974acd25db6b913))
* **internal:** update gitignore ([93aedb9](https://github.com/trycourier/courier-python/commit/93aedb9fdf91b5577a0b57bfdd367a11a37ba87b))
* **types:** extract ElementalHTMLNodeWithType from inline union member ([1620896](https://github.com/trycourier/courier-python/commit/162089600320b6545fa4abf610c3055a43ecc0fb))


### Documentation

* add AGENTS.md for AI coding assistants ([#129](https://github.com/trycourier/courier-python/issues/129)) ([25609a5](https://github.com/trycourier/courier-python/commit/25609a5244514cdb7768d11cefdb52484e2632d6))

## 7.9.0 (2026-03-12)

Full Changelog: [v7.8.0...v7.9.0](https://github.com/trycourier/courier-python/compare/v7.8.0...v7.9.0)
Expand Down
81 changes: 80 additions & 1 deletion api.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ from courier.types import (
AudienceFilter,
AudienceFilterConfig,
AudienceRecipient,
Channel,
ChannelClassification,
ChannelMetadata,
ChannelPreference,
DeviceType,
Discord,
Expand All @@ -19,6 +21,7 @@ from courier.types import (
ElementalContent,
ElementalContentSugar,
ElementalDividerNodeWithType,
ElementalHTMLNodeWithType,
ElementalImageNodeWithType,
ElementalMetaNodeWithType,
ElementalNode,
Expand All @@ -31,9 +34,13 @@ from courier.types import (
ListFilter,
ListPatternRecipient,
ListRecipient,
MessageChannels,
MessageContext,
MessageProviders,
MessageProvidersType,
MessageRouting,
MessageRoutingChannel,
Metadata,
MsTeams,
MsTeamsBaseProperties,
MsTeamsRecipient,
Expand All @@ -60,6 +67,7 @@ from courier.types import (
SlackBaseProperties,
SlackRecipient,
TextStyle,
Timeouts,
Token,
UserProfile,
UserProfileFirebaseToken,
Expand Down Expand Up @@ -107,6 +115,34 @@ Methods:
- <code title="delete /audiences/{audience_id}">client.audiences.<a href="./src/courier/resources/audiences.py">delete</a>(audience_id) -> None</code>
- <code title="get /audiences/{audience_id}/members">client.audiences.<a href="./src/courier/resources/audiences.py">list_members</a>(audience_id, \*\*<a href="src/courier/types/audience_list_members_params.py">params</a>) -> <a href="./src/courier/types/audience_list_members_response.py">AudienceListMembersResponse</a></code>

# Providers

Types:

```python
from courier.types import Provider, ProvidersCatalogEntry, ProviderListResponse
```

Methods:

- <code title="post /providers">client.providers.<a href="./src/courier/resources/providers/providers.py">create</a>(\*\*<a href="src/courier/types/provider_create_params.py">params</a>) -> <a href="./src/courier/types/provider.py">Provider</a></code>
- <code title="get /providers/{id}">client.providers.<a href="./src/courier/resources/providers/providers.py">retrieve</a>(id) -> <a href="./src/courier/types/provider.py">Provider</a></code>
- <code title="post /providers/{id}">client.providers.<a href="./src/courier/resources/providers/providers.py">update</a>(id, \*\*<a href="src/courier/types/provider_update_params.py">params</a>) -> <a href="./src/courier/types/provider.py">Provider</a></code>
- <code title="get /providers">client.providers.<a href="./src/courier/resources/providers/providers.py">list</a>(\*\*<a href="src/courier/types/provider_list_params.py">params</a>) -> <a href="./src/courier/types/provider_list_response.py">ProviderListResponse</a></code>
- <code title="delete /providers/{id}">client.providers.<a href="./src/courier/resources/providers/providers.py">delete</a>(id) -> None</code>

## Catalog

Types:

```python
from courier.types.providers import CatalogListResponse
```

Methods:

- <code title="get /providers/catalog">client.providers.catalog.<a href="./src/courier/resources/providers/catalog.py">list</a>(\*\*<a href="src/courier/types/providers/catalog_list_params.py">params</a>) -> <a href="./src/courier/types/providers/catalog_list_response.py">CatalogListResponse</a></code>

# AuditEvents

Types:
Expand Down Expand Up @@ -304,12 +340,32 @@ Methods:
Types:

```python
from courier.types import BaseCheck, Check, NotificationGetContent, NotificationListResponse
from courier.types import (
BaseCheck,
Check,
NotificationGetContent,
NotificationTemplateCreateRequest,
NotificationTemplateGetResponse,
NotificationTemplateMutationResponse,
NotificationTemplatePayload,
NotificationTemplatePublishRequest,
NotificationTemplateSummary,
NotificationTemplateUpdateRequest,
NotificationTemplateVersionListResponse,
VersionNode,
NotificationListResponse,
)
```

Methods:

- <code title="post /notifications">client.notifications.<a href="./src/courier/resources/notifications/notifications.py">create</a>(\*\*<a href="src/courier/types/notification_create_params.py">params</a>) -> <a href="./src/courier/types/notification_template_mutation_response.py">NotificationTemplateMutationResponse</a></code>
- <code title="get /notifications/{id}">client.notifications.<a href="./src/courier/resources/notifications/notifications.py">retrieve</a>(id, \*\*<a href="src/courier/types/notification_retrieve_params.py">params</a>) -> <a href="./src/courier/types/notification_template_get_response.py">NotificationTemplateGetResponse</a></code>
- <code title="get /notifications">client.notifications.<a href="./src/courier/resources/notifications/notifications.py">list</a>(\*\*<a href="src/courier/types/notification_list_params.py">params</a>) -> <a href="./src/courier/types/notification_list_response.py">NotificationListResponse</a></code>
- <code title="delete /notifications/{id}">client.notifications.<a href="./src/courier/resources/notifications/notifications.py">archive</a>(id) -> None</code>
- <code title="get /notifications/{id}/versions">client.notifications.<a href="./src/courier/resources/notifications/notifications.py">list_versions</a>(id, \*\*<a href="src/courier/types/notification_list_versions_params.py">params</a>) -> <a href="./src/courier/types/notification_template_version_list_response.py">NotificationTemplateVersionListResponse</a></code>
- <code title="post /notifications/{id}/publish">client.notifications.<a href="./src/courier/resources/notifications/notifications.py">publish</a>(id, \*\*<a href="src/courier/types/notification_publish_params.py">params</a>) -> None</code>
- <code title="put /notifications/{id}">client.notifications.<a href="./src/courier/resources/notifications/notifications.py">replace</a>(id, \*\*<a href="src/courier/types/notification_replace_params.py">params</a>) -> <a href="./src/courier/types/notification_template_mutation_response.py">NotificationTemplateMutationResponse</a></code>
- <code title="get /notifications/{id}/content">client.notifications.<a href="./src/courier/resources/notifications/notifications.py">retrieve_content</a>(id) -> <a href="./src/courier/types/notification_get_content.py">NotificationGetContent</a></code>

## Draft
Expand All @@ -332,6 +388,29 @@ Methods:
- <code title="get /notifications/{id}/{submissionId}/checks">client.notifications.checks.<a href="./src/courier/resources/notifications/checks.py">list</a>(submission_id, \*, id) -> <a href="./src/courier/types/notifications/check_list_response.py">CheckListResponse</a></code>
- <code title="delete /notifications/{id}/{submissionId}/checks">client.notifications.checks.<a href="./src/courier/resources/notifications/checks.py">delete</a>(submission_id, \*, id) -> None</code>

# RoutingStrategies

Types:

```python
from courier.types import (
RoutingStrategyCreateRequest,
RoutingStrategyGetResponse,
RoutingStrategyListResponse,
RoutingStrategyMutationResponse,
RoutingStrategyReplaceRequest,
RoutingStrategySummary,
)
```

Methods:

- <code title="post /routing-strategies">client.routing_strategies.<a href="./src/courier/resources/routing_strategies.py">create</a>(\*\*<a href="src/courier/types/routing_strategy_create_params.py">params</a>) -> <a href="./src/courier/types/routing_strategy_mutation_response.py">RoutingStrategyMutationResponse</a></code>
- <code title="get /routing-strategies/{id}">client.routing_strategies.<a href="./src/courier/resources/routing_strategies.py">retrieve</a>(id) -> <a href="./src/courier/types/routing_strategy_get_response.py">RoutingStrategyGetResponse</a></code>
- <code title="get /routing-strategies">client.routing_strategies.<a href="./src/courier/resources/routing_strategies.py">list</a>(\*\*<a href="src/courier/types/routing_strategy_list_params.py">params</a>) -> <a href="./src/courier/types/routing_strategy_list_response.py">RoutingStrategyListResponse</a></code>
- <code title="delete /routing-strategies/{id}">client.routing_strategies.<a href="./src/courier/resources/routing_strategies.py">archive</a>(id) -> None</code>
- <code title="put /routing-strategies/{id}">client.routing_strategies.<a href="./src/courier/resources/routing_strategies.py">replace</a>(id, \*\*<a href="src/courier/types/routing_strategy_replace_params.py">params</a>) -> <a href="./src/courier/types/routing_strategy_mutation_response.py">RoutingStrategyMutationResponse</a></code>

# Profiles

Types:
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "trycourier"
version = "7.9.0"
version = "7.10.0"
description = "The official Python library for the Courier API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand All @@ -11,7 +11,7 @@ authors = [
dependencies = [
"httpx>=0.23.0, <1",
"pydantic>=1.9.0, <3",
"typing-extensions>=4.10, <5",
"typing-extensions>=4.14, <5",
"anyio>=3.5.0, <5",
"distro>=1.7.0, <2",
"sniffio",
Expand Down
Loading