Skip to content

release: 4.23.0 - #115

Merged
mikemilla merged 6 commits into
mainfrom
release-please--branches--main--changes--next
Jul 29, 2026
Merged

release: 4.23.0#115
mikemilla merged 6 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

4.23.0 (2026-07-29)

Full Changelog: v4.22.0...v4.23.0

Features

  • Document DELETE/PUT restore for inbox messages (C-19268) (#175) (6a1a54a)
  • spec: rename and reorder the API reference sections (#179) (2ce28ee)

Documentation

  • openapi: describe user topic-preference fields explicitly (#172) (1d09244)
  • openapi: document Idempotency-Key header on idempotent POST endpoints (#176) (8d254c6)
  • openapi: rewrite operation descriptions for agents and SEO (#174) (3453be3)

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:

Add the following URL as a Maven source: 'https://pkg.stainless.com/s/courier-java/2ce28eee967b036c5b725a1146cb8cc2a1a84f02/mvn'

Expires at: Fri, 28 Aug 2026 18:21:31 GMT
Updated at: Wed, 29 Jul 2026 18:21:31 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 e858c42 to 5bfa959 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 5bfa959 to 4e56c87 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 4e56c87 to 32548d4 Compare July 28, 2026 18:32
@stainless-app stainless-app Bot changed the title release: 4.22.1 release: 4.23.0 Jul 28, 2026
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 32548d4 to 8a04be8 Compare July 28, 2026 18:33
stainless-app Bot and others added 2 commits July 29, 2026 18:17
Adds a top-level `tags:` array that defines the section order and gives each
section a description, renames 7 sections, and reorders the `paths:` blocks so
document order matches — with a `# ---- Section ----` banner per group.

New order follows the docs IA: auth -> send -> inspect -> content -> recipients
-> preferences -> multi-tenancy -> orchestration -> in-app -> workspace config.

Renames:
  Sent Messages          -> Messages
  Notification Templates -> Templates
  User Profiles          -> Profiles
  Workspace Preferences  -> Preference Topics
  User Tenants           -> Tenant Memberships
  Courier Create         -> Tenant Templates
  Inbound                -> Track Events

Also corrects 6 operation summaries inside renamed groups that named the old
section: the five `/preferences/sections` operations manage preference
sections (not "workspace preferences"), and `/inbound/courier` is now
"Track an event".

No request/response schema, path, or operationId changes — verified by
structural diff of the parsed spec.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 8a04be8 to 848fc58 Compare July 29, 2026 18:18
@mikemilla
mikemilla merged commit 346330e into main Jul 29, 2026
7 checks passed
@mikemilla
mikemilla deleted the release-please--branches--main--changes--next branch July 29, 2026 18:41
@stainless-app

stainless-app Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor Author

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.

1 participant