Skip to content

release: 7.22.0 - #148

Open
stainless-app[bot] wants to merge 5 commits into
mainfrom
release-please--branches--main--changes--next
Open

release: 7.22.0#148
stainless-app[bot] wants to merge 5 commits into
mainfrom
release-please--branches--main--changes--next

Conversation

@stainless-app

@stainless-app stainless-app Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Automated Release PR

7.22.0 (2026-07-28)

Full Changelog: v7.21.0...v7.22.0

Features

  • Document DELETE/PUT restore for inbox messages (C-19268) (#175) (6e32a5c)

Documentation

  • openapi: describe user topic-preference fields explicitly (#172) (842699a)
  • openapi: document Idempotency-Key header on idempotent POST endpoints (#176) (9209315)
  • openapi: rewrite operation descriptions for agents and SEO (#174) (c90b5d3)

This pull request is managed by Stainless's GitHub App.

The semver version number is based on included commit messages. Alternatively, you can manually set the version number in the title of this pull request.

For a better experience, it is recommended to use either rebase-merge or squash-merge when merging this pull request.

🔗 Stainless website
📚 Read the docs
🙋 Reach out for help or questions

Add field descriptions to UsersTopicPreference and UsersTopicPreferenceUpdate
so the generated API reference documents them fully (topic_id, status,
default_status, has_custom_routing, custom_routing, topic_name), including the
REQUIRED-is-a-topic-default semantics and the custom_routing channel set. Wrap
the PreferenceStatus $ref fields in allOf so the description renders under
OpenAPI 3.0.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@stainless-app

stainless-app Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

🧪 Testing

To try out this version of the SDK:

pip install 'https://pkg.stainless.com/s/courier-python/6e32a5cb55d541ba89ac260aa62fa0d1d40505d9/trycourier-7.21.0-py3-none-any.whl'

Expires at: Thu, 27 Aug 2026 18:33:20 GMT
Updated at: Tue, 28 Jul 2026 18:33:20 GMT

Rewrites the `description` on 116 of 134 operations and fills in 14 that had none
(GET /tenants, PUT /tenants/{id}, and other tenant/token/message operations). The 18
already-good descriptions are untouched.

Why: these descriptions feed the API reference, the generated llms.txt, and the SDK
docstrings across all seven languages. Many were either too terse to be useful to a
coding agent (e.g. "Returns the specified audience by id") or long enough that Mintlify
truncated them mid-sentence in llms.txt (10 sat at 300-301 chars). A prior SEO pass in
mintlify-docs (#563) was silently reverted by spec syncs because it edited the generated
mirror instead of this source file — this lands the work where it survives.

House style, applied uniformly:
- Sentence one states what the operation does using concrete nouns — actual response
  fields, enum values, and id formats, not vague paraphrase.
- Sentence two, when present, gives the reason to reach for it or the behavior that
  surprises people. No status codes, validation rules, em-dashes, or marketing adjectives
  (those live in the reference body).
- 95-160 characters, so they read fully in Google results and don't truncate in llms.txt.

Each description was written against the operation's schema (required params, response
properties, enums), not from assumption. This caught real errors: the message status
enum has 12 values and does not include UNDELIVERABLE; POST /auth/issue-token requires
both scope and expires_in (it is not "short-lived"); message content lives at
/messages/{id}/output.

Please give a domain check to three where behavior was inferred from HTTP semantics
rather than stated in the schema:
- PUT /users/{user_id}/tenants (users_tenants_addMultiple) — worded to only claim it
  adds; does it also remove tenants not listed in the body?
- PUT /notifications/{id}/{submissionId}/checks (replaceSubmissionChecks) — worded as
  "the complete set supplied"; are omitted checks dropped?
- GET /translations/{domain}/{locale} — says "notification content"; confirm the term.

Mechanical: only operation-level `description` lines changed (verified: 0 operationId
lines touched, 0 non-description lines added). Multi-line block scalars were collapsed to
single quoted lines, which accounts for the deletion count. openapi.yml still parses and
all 134 operations are intact.

Co-authored-by: Claude <noreply@anthropic.com>
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from f7d5486 to fd67880 Compare July 25, 2026 00:05
…points (#176)

Idempotency is honored at runtime (handleIdempotentApi dedups POSTs by
tenant + Idempotency-Key + path, ~25h default TTL) but was undocumented
in the spec — openapi.yml defined zero header parameters, so it never
appeared in the API reference or as a typed SDK parameter.

Adds reusable components.parameters entries (Idempotency-Key and
x-idempotency-expiration) and references them from the 21 POST operations
whose backend handlers are actually wrapped in handleIdempotentApi:
send, profiles create + subscribeToList, lists addSubscribers,
notifications create + publish, users preferences, automations invoke
(both), all 6 journeys POSTs, brands, routing-strategies, providers,
and workspace preferences (publish/sections/topics).

Deliberately NOT added to POSTs whose handlers use plain handleApi (no
dedup): messages cancel/resend, auth issue-token, digests trigger,
inbound/courier, tenants publishTemplate. notifications/{id}/duplicate is
not routed through the public REST gateway at all.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from fd67880 to 42a3575 Compare July 28, 2026 18:27
Adds the public REST endpoints for the new backend inbox delete feature:
- DELETE /inbox/messages/{message_id}
- PUT /inbox/messages/{message_id}/restore

New `inbox.messages` resource in stainless.yml (delete + restore) so the methods
generate across the SDKs. Pairs with trycourier/backend#9759.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 42a3575 to 77cb588 Compare July 28, 2026 18:32
@stainless-app stainless-app Bot changed the title release: 7.21.1 release: 7.22.0 Jul 28, 2026
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 77cb588 to 81c72a3 Compare July 28, 2026 18:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

0 participants