Skip to content

Commit f3d4967

Browse files
release: 7.10.0 (#128)
* codegen metadata * fix(pydantic): do not pass `by_alias` unless set * fix(deps): bump minimum typing-extensions version * chore(internal): tweak CI branches * fix: sanitize endpoint path params * chore(internal): update gitignore * chore(ci): skip lint on metadata-only changes Note that we still want to run tests, as these depend on the metadata. * feat(api): add create/retrieve/archive/publish/replace, event_id param to notifications * feat(internal): implement indices array format for query and form serialization * feat(api): add html type variant to ElementalNode * chore(types): extract ElementalHTMLNodeWithType from inline union member * feat(api): add routing_strategies resource * feat(api): add providers resource with CRUD methods and catalog endpoint * release: 7.10.0 --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
1 parent 25609a5 commit f3d4967

100 files changed

Lines changed: 5963 additions & 329 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
name: CI
22
on:
33
push:
4-
branches-ignore:
5-
- 'generated'
6-
- 'codegen/**'
7-
- 'integrated/**'
8-
- 'stl-preview-head/**'
9-
- 'stl-preview-base/**'
4+
branches:
5+
- '**'
6+
- '!integrated/**'
7+
- '!stl-preview-head/**'
8+
- '!stl-preview-base/**'
9+
- '!generated'
10+
- '!codegen/**'
11+
- 'codegen/stl/**'
1012
pull_request:
1113
branches-ignore:
1214
- 'stl-preview-head/**'
@@ -17,7 +19,7 @@ jobs:
1719
timeout-minutes: 10
1820
name: lint
1921
runs-on: ${{ github.repository == 'stainless-sdks/courier-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
20-
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
22+
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
2123
steps:
2224
- uses: actions/checkout@v6
2325

@@ -36,7 +38,7 @@ jobs:
3638
run: ./scripts/lint
3739

3840
build:
39-
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
41+
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
4042
timeout-minutes: 10
4143
name: build
4244
permissions:

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
.prism.log
2+
.stdy.log
23
_dev
34

45
__pycache__

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "7.9.0"
2+
".": "7.10.0"
33
}

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 83
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/courier%2Fcourier-19330fca8fa9bbae835ec9d9f83b37b3df364d9b462090b9623bfc9b6eae99c2.yml
3-
openapi_spec_hash: 0bc6889464c9ac2542b4837f569c1837
4-
config_hash: 1ae49ed522c8423378d9463cdd0fb880
1+
configured_endpoints: 100
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/courier%2Fcourier-b3dde937486812f8db805a423a30ba5d3f80cc95803e13ab66958589366a5f06.yml
3+
openapi_spec_hash: a249df035d7f5bf57c66084cd94e8841
4+
config_hash: c51fa2bafdf96f2c1e409ccc295b7359

CHANGELOG.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,37 @@
11
# Changelog
22

3+
## 7.10.0 (2026-04-01)
4+
5+
Full Changelog: [v7.9.0...v7.10.0](https://github.com/trycourier/courier-python/compare/v7.9.0...v7.10.0)
6+
7+
### Features
8+
9+
* **api:** add create/retrieve/archive/publish/replace, event_id param to notifications ([4951cdc](https://github.com/trycourier/courier-python/commit/4951cdc00d9c0c2a0db727142b6003582d1fc3c4))
10+
* **api:** add html type variant to ElementalNode ([6a1ddc7](https://github.com/trycourier/courier-python/commit/6a1ddc795e86d4988c0bf10d513addcdab87662f))
11+
* **api:** add providers resource with CRUD methods and catalog endpoint ([db4b86b](https://github.com/trycourier/courier-python/commit/db4b86ba098ec178d69effa22d4097aa54ddf904))
12+
* **api:** add routing_strategies resource ([7577000](https://github.com/trycourier/courier-python/commit/7577000f2e0a696a088563de4a17ac85b56d753d))
13+
* **internal:** implement indices array format for query and form serialization ([7fc2cd1](https://github.com/trycourier/courier-python/commit/7fc2cd18f58888f774d63ce974317cc6d388f09e))
14+
15+
16+
### Bug Fixes
17+
18+
* **deps:** bump minimum typing-extensions version ([7ad4509](https://github.com/trycourier/courier-python/commit/7ad4509447a139223b654faf68003316d9f034c6))
19+
* **pydantic:** do not pass `by_alias` unless set ([65aef6b](https://github.com/trycourier/courier-python/commit/65aef6bb51884841b1df70c100577b7fb3333b56))
20+
* sanitize endpoint path params ([9497e29](https://github.com/trycourier/courier-python/commit/9497e29d2cdbb37f4dd1492274adde42d6e03793))
21+
22+
23+
### Chores
24+
25+
* **ci:** skip lint on metadata-only changes ([f6f933d](https://github.com/trycourier/courier-python/commit/f6f933d7802669fefeee85e6f3935f506a772dd3))
26+
* **internal:** tweak CI branches ([40e254c](https://github.com/trycourier/courier-python/commit/40e254ca8d139b91b022ca7cd974acd25db6b913))
27+
* **internal:** update gitignore ([93aedb9](https://github.com/trycourier/courier-python/commit/93aedb9fdf91b5577a0b57bfdd367a11a37ba87b))
28+
* **types:** extract ElementalHTMLNodeWithType from inline union member ([1620896](https://github.com/trycourier/courier-python/commit/162089600320b6545fa4abf610c3055a43ecc0fb))
29+
30+
31+
### Documentation
32+
33+
* 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))
34+
335
## 7.9.0 (2026-03-12)
436

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

api.md

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ from courier.types import (
88
AudienceFilter,
99
AudienceFilterConfig,
1010
AudienceRecipient,
11+
Channel,
1112
ChannelClassification,
13+
ChannelMetadata,
1214
ChannelPreference,
1315
DeviceType,
1416
Discord,
@@ -19,6 +21,7 @@ from courier.types import (
1921
ElementalContent,
2022
ElementalContentSugar,
2123
ElementalDividerNodeWithType,
24+
ElementalHTMLNodeWithType,
2225
ElementalImageNodeWithType,
2326
ElementalMetaNodeWithType,
2427
ElementalNode,
@@ -31,9 +34,13 @@ from courier.types import (
3134
ListFilter,
3235
ListPatternRecipient,
3336
ListRecipient,
37+
MessageChannels,
3438
MessageContext,
39+
MessageProviders,
40+
MessageProvidersType,
3541
MessageRouting,
3642
MessageRoutingChannel,
43+
Metadata,
3744
MsTeams,
3845
MsTeamsBaseProperties,
3946
MsTeamsRecipient,
@@ -60,6 +67,7 @@ from courier.types import (
6067
SlackBaseProperties,
6168
SlackRecipient,
6269
TextStyle,
70+
Timeouts,
6371
Token,
6472
UserProfile,
6573
UserProfileFirebaseToken,
@@ -107,6 +115,34 @@ Methods:
107115
- <code title="delete /audiences/{audience_id}">client.audiences.<a href="./src/courier/resources/audiences.py">delete</a>(audience_id) -> None</code>
108116
- <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>
109117

118+
# Providers
119+
120+
Types:
121+
122+
```python
123+
from courier.types import Provider, ProvidersCatalogEntry, ProviderListResponse
124+
```
125+
126+
Methods:
127+
128+
- <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>
129+
- <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>
130+
- <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>
131+
- <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>
132+
- <code title="delete /providers/{id}">client.providers.<a href="./src/courier/resources/providers/providers.py">delete</a>(id) -> None</code>
133+
134+
## Catalog
135+
136+
Types:
137+
138+
```python
139+
from courier.types.providers import CatalogListResponse
140+
```
141+
142+
Methods:
143+
144+
- <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>
145+
110146
# AuditEvents
111147

112148
Types:
@@ -304,12 +340,32 @@ Methods:
304340
Types:
305341

306342
```python
307-
from courier.types import BaseCheck, Check, NotificationGetContent, NotificationListResponse
343+
from courier.types import (
344+
BaseCheck,
345+
Check,
346+
NotificationGetContent,
347+
NotificationTemplateCreateRequest,
348+
NotificationTemplateGetResponse,
349+
NotificationTemplateMutationResponse,
350+
NotificationTemplatePayload,
351+
NotificationTemplatePublishRequest,
352+
NotificationTemplateSummary,
353+
NotificationTemplateUpdateRequest,
354+
NotificationTemplateVersionListResponse,
355+
VersionNode,
356+
NotificationListResponse,
357+
)
308358
```
309359

310360
Methods:
311361

362+
- <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>
363+
- <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>
312364
- <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>
365+
- <code title="delete /notifications/{id}">client.notifications.<a href="./src/courier/resources/notifications/notifications.py">archive</a>(id) -> None</code>
366+
- <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>
367+
- <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>
368+
- <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>
313369
- <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>
314370

315371
## Draft
@@ -332,6 +388,29 @@ Methods:
332388
- <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>
333389
- <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>
334390

391+
# RoutingStrategies
392+
393+
Types:
394+
395+
```python
396+
from courier.types import (
397+
RoutingStrategyCreateRequest,
398+
RoutingStrategyGetResponse,
399+
RoutingStrategyListResponse,
400+
RoutingStrategyMutationResponse,
401+
RoutingStrategyReplaceRequest,
402+
RoutingStrategySummary,
403+
)
404+
```
405+
406+
Methods:
407+
408+
- <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>
409+
- <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>
410+
- <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>
411+
- <code title="delete /routing-strategies/{id}">client.routing_strategies.<a href="./src/courier/resources/routing_strategies.py">archive</a>(id) -> None</code>
412+
- <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>
413+
335414
# Profiles
336415

337416
Types:

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "trycourier"
3-
version = "7.9.0"
3+
version = "7.10.0"
44
description = "The official Python library for the Courier API"
55
dynamic = ["readme"]
66
license = "Apache-2.0"
@@ -11,7 +11,7 @@ authors = [
1111
dependencies = [
1212
"httpx>=0.23.0, <1",
1313
"pydantic>=1.9.0, <3",
14-
"typing-extensions>=4.10, <5",
14+
"typing-extensions>=4.14, <5",
1515
"anyio>=3.5.0, <5",
1616
"distro>=1.7.0, <2",
1717
"sniffio",

0 commit comments

Comments
 (0)