Changelog

/

All

Feb 4, 2026

Robert Craigie

If your OpenAPI spec looks like this:

security:
  - BearerAuth: []
  - ApiKeyAuth: []

securitySchemes:
  BearerAuth:
    type: http
    scheme: bearer
  ApiKeyAuth:
    type: apiKey
    name: api-key
    in: header

paths:
  /cards:
    post:
      security:
        - BearerAuth: []
      # ... responses omitted

And your stainless config looks like this:

settings:
  client_opts:
    bearer_token:
      type: string
      nullable: true
      auth:
        security_scheme: BearerAuth
    api_key:
      type: string
      nullable: true
      auth:
        security_scheme: ApiKeyAuth

resources:
  cards:
    methods:
      create

When instantiating the SDK with both options:

from acme import Acme

client = Acme(
  api_key="my-api-key",
  bearer_token="my-bearer-token",
)

client.cards.create()

Previously, the SDK sent both the api-key and Authorization headers, which could cause authentication errors depending on how your API handles multiple authentication schemes.

Now the SDK will only send the Authorization header, as that is the only scheme configured for that endpoint in security.

This is enabled by default for new projects, to enable this for existing projects update the edition in your config to 2026-01-30 or higher:

edition: "2026-01-30"

Feb 4, 2026

Robert Craigie

If your OpenAPI spec looks like this:

security:
  - BearerAuth: []
  - ApiKeyAuth: []

securitySchemes:
  BearerAuth:
    type: http
    scheme: bearer
  ApiKeyAuth:
    type: apiKey
    name: api-key
    in: header

paths:
  /cards:
    post:
      security:
        - BearerAuth: []
      # ... responses omitted

And your stainless config looks like this:

settings:
  client_opts:
    bearer_token:
      type: string
      nullable: true
      auth:
        security_scheme: BearerAuth
    api_key:
      type: string
      nullable: true
      auth:
        security_scheme: ApiKeyAuth

resources:
  cards:
    methods:
      create

When instantiating the SDK with both options:

from acme import Acme

client = Acme(
  api_key="my-api-key",
  bearer_token="my-bearer-token",
)

client.cards.create()

Previously, the SDK sent both the api-key and Authorization headers, which could cause authentication errors depending on how your API handles multiple authentication schemes.

Now the SDK will only send the Authorization header, as that is the only scheme configured for that endpoint in security.

This is enabled by default for new projects, to enable this for existing projects update the edition in your config to 2026-01-30 or higher:

edition: "2026-01-30"

Feb 4, 2026

Robert Craigie

If your OpenAPI spec looks like this:

security:
  - BearerAuth: []
  - ApiKeyAuth: []

securitySchemes:
  BearerAuth:
    type: http
    scheme: bearer
  ApiKeyAuth:
    type: apiKey
    name: api-key
    in: header

paths:
  /cards:
    post:
      security:
        - BearerAuth: []
      # ... responses omitted

And your stainless config looks like this:

settings:
  client_opts:
    bearer_token:
      type: string
      nullable: true
      auth:
        security_scheme: BearerAuth
    api_key:
      type: string
      nullable: true
      auth:
        security_scheme: ApiKeyAuth

resources:
  cards:
    methods:
      create

When instantiating the SDK with both options:

from acme import Acme

client = Acme(
  api_key="my-api-key",
  bearer_token="my-bearer-token",
)

client.cards.create()

Previously, the SDK sent both the api-key and Authorization headers, which could cause authentication errors depending on how your API handles multiple authentication schemes.

Now the SDK will only send the Authorization header, as that is the only scheme configured for that endpoint in security.

This is enabled by default for new projects, to enable this for existing projects update the edition in your config to 2026-01-30 or higher:

edition: "2026-01-30"

Feb 3, 2026

Robert Craigie

The Python SDK generator now supports publishing to PyPI using trusted publishing via OIDC in addition to API tokens.

To learn more, see our docs on publishing.

Feb 3, 2026

Robert Craigie

The Python SDK generator now supports publishing to PyPI using trusted publishing via OIDC in addition to API tokens.

To learn more, see our docs on publishing.

Feb 3, 2026

Robert Craigie

The Python SDK generator now supports publishing to PyPI using trusted publishing via OIDC in addition to API tokens.

To learn more, see our docs on publishing.

Jan 29, 2026

Bruce Hill

The CLI generator is now generally available, which lets you turn your APIs into high-quality command line tools. Here are some highlights:

  • Built-in support for streaming and paginated endpoints using command line paging tools

  • Automatically generated man pages and --help documentation

  • Shell completion with smart suggestions

  • Interactive TUI views for exploring deeply nested data

  • Easy integration with AI agents that can run shell commands

Check out the documentation for more info.

Jan 29, 2026

Bruce Hill

The CLI generator is now generally available, which lets you turn your APIs into high-quality command line tools. Here are some highlights:

  • Built-in support for streaming and paginated endpoints using command line paging tools

  • Automatically generated man pages and --help documentation

  • Shell completion with smart suggestions

  • Interactive TUI views for exploring deeply nested data

  • Easy integration with AI agents that can run shell commands

Check out the documentation for more info.

Jan 29, 2026

Bruce Hill

The CLI generator is now generally available, which lets you turn your APIs into high-quality command line tools. Here are some highlights:

  • Built-in support for streaming and paginated endpoints using command line paging tools

  • Automatically generated man pages and --help documentation

  • Shell completion with smart suggestions

  • Interactive TUI views for exploring deeply nested data

  • Easy integration with AI agents that can run shell commands

Check out the documentation for more info.

Jan 22, 2026

James Rappazzo

Stainless can now automatically generate commit messages for your SDK builds using AI. When enabled, AI generates descriptive commit messages for each SDK following the Conventional Commits format.

How to enable:

  • Navigate to your organization settings at https://app.stainless.com/{your-org}/settings and toggle AI Commit Messages on

  • Preview PRs: Set enable_ai_commit_messages: true in your GitHub Action workflow

  • Studio: Use the "Generate with AI" option when building from a dev branch

  • CLI: run str builds create with the --enable-ai-commit-messages flag. The --enable-ai-commit-messages flag tells Stainless to generate and use AI commit messages for your builds

Learn more about AI commit messages →

Jan 22, 2026

James Rappazzo

Stainless can now automatically generate commit messages for your SDK builds using AI. When enabled, AI generates descriptive commit messages for each SDK following the Conventional Commits format.

How to enable:

  • Navigate to your organization settings at https://app.stainless.com/{your-org}/settings and toggle AI Commit Messages on

  • Preview PRs: Set enable_ai_commit_messages: true in your GitHub Action workflow

  • Studio: Use the "Generate with AI" option when building from a dev branch

  • CLI: run str builds create with the --enable-ai-commit-messages flag. The --enable-ai-commit-messages flag tells Stainless to generate and use AI commit messages for your builds

Learn more about AI commit messages →

Jan 22, 2026

James Rappazzo

Stainless can now automatically generate commit messages for your SDK builds using AI. When enabled, AI generates descriptive commit messages for each SDK following the Conventional Commits format.

How to enable:

  • Navigate to your organization settings at https://app.stainless.com/{your-org}/settings and toggle AI Commit Messages on

  • Preview PRs: Set enable_ai_commit_messages: true in your GitHub Action workflow

  • Studio: Use the "Generate with AI" option when building from a dev branch

  • CLI: run str builds create with the --enable-ai-commit-messages flag. The --enable-ai-commit-messages flag tells Stainless to generate and use AI commit messages for your builds

Learn more about AI commit messages →

Jan 21, 2026

Young-jin Park

The Stainless Language Server and VS Code extension bring SDK Studio's IntelliSense, diagnostics, and navigation tools into your local editor, with real-time feedback as you work.

Getting Started

  1. Install the Stainless CLI: brew install stl

  2. Initialize your workspace: stl init

  3. Install the extension

Read the complete guide for detailed instructions.

Jan 21, 2026

Young-jin Park

The Stainless Language Server and VS Code extension bring SDK Studio's IntelliSense, diagnostics, and navigation tools into your local editor, with real-time feedback as you work.

Getting Started

  1. Install the Stainless CLI: brew install stl

  2. Initialize your workspace: stl init

  3. Install the extension

Read the complete guide for detailed instructions.

Jan 21, 2026

Young-jin Park

The Stainless Language Server and VS Code extension bring SDK Studio's IntelliSense, diagnostics, and navigation tools into your local editor, with real-time feedback as you work.

Getting Started

  1. Install the Stainless CLI: brew install stl

  2. Initialize your workspace: stl init

  3. Install the extension

Read the complete guide for detailed instructions.

Jan 16, 2026

Max Freundlich

Stainless Docs Platform now automatically generates Open Graph images for both prose and API reference pages. Each page gets a dynamic image based on its title, description, section, and theme.

To learn more about the OG image plugin, check out the documentation.

Jan 16, 2026

Max Freundlich

Stainless Docs Platform now automatically generates Open Graph images for both prose and API reference pages. Each page gets a dynamic image based on its title, description, section, and theme.

To learn more about the OG image plugin, check out the documentation.

Jan 16, 2026

Max Freundlich

Stainless Docs Platform now automatically generates Open Graph images for both prose and API reference pages. Each page gets a dynamic image based on its title, description, section, and theme.

To learn more about the OG image plugin, check out the documentation.

Jan 14, 2026

Young-jin Park

You can now configure targets.openapi to automatically generate and maintain a Git repository containing your OpenAPI specification.

What's new:

  • Automated repository generation at stainless-sdks/<project>-openapi (or your own production_repo)

  • Multiple spec variants generated automatically based on your configuration:

    • Base specification (openapi.json/yml)

    • Transformed specs when using Stainless Transforms

    • Specs with code samples for documentation integration

  • Runs on every Stainless build - no manual CI/CD configuration needed

  • Customizable output via targets.openapi.options.files

Why this matters: Teams previously had to manually set up pipelines to push generated OpenAPI specs to public repositories. This target automates that workflow, making it easier to maintain public API specifications, communicate changes through commit history, and provide stable URLs for documentation tools.

Getting started:

targets:
  openapi:
    production_repo

See the OpenAPI target documentation for full configuration options.

Jan 14, 2026

Young-jin Park

You can now configure targets.openapi to automatically generate and maintain a Git repository containing your OpenAPI specification.

What's new:

  • Automated repository generation at stainless-sdks/<project>-openapi (or your own production_repo)

  • Multiple spec variants generated automatically based on your configuration:

    • Base specification (openapi.json/yml)

    • Transformed specs when using Stainless Transforms

    • Specs with code samples for documentation integration

  • Runs on every Stainless build - no manual CI/CD configuration needed

  • Customizable output via targets.openapi.options.files

Why this matters: Teams previously had to manually set up pipelines to push generated OpenAPI specs to public repositories. This target automates that workflow, making it easier to maintain public API specifications, communicate changes through commit history, and provide stable URLs for documentation tools.

Getting started:

targets:
  openapi:
    production_repo

See the OpenAPI target documentation for full configuration options.

Jan 14, 2026

Young-jin Park

You can now configure targets.openapi to automatically generate and maintain a Git repository containing your OpenAPI specification.

What's new:

  • Automated repository generation at stainless-sdks/<project>-openapi (or your own production_repo)

  • Multiple spec variants generated automatically based on your configuration:

    • Base specification (openapi.json/yml)

    • Transformed specs when using Stainless Transforms

    • Specs with code samples for documentation integration

  • Runs on every Stainless build - no manual CI/CD configuration needed

  • Customizable output via targets.openapi.options.files

Why this matters: Teams previously had to manually set up pipelines to push generated OpenAPI specs to public repositories. This target automates that workflow, making it easier to maintain public API specifications, communicate changes through commit history, and provide stable URLs for documentation tools.

Getting started:

targets:
  openapi:
    production_repo

See the OpenAPI target documentation for full configuration options.

Jan 13, 2026

Stephen Downward

The C# SDK generator is now generally available, bringing high quality SDKs to the .NET ecosystem. Key highlights include:

  • .NET Standard 2.0 support: You can use Stainless C# SDKs in any environment that implements .NET Standard 2.0. For more information see the changelog.

  • File uploads & downloads: Full lazy upload and download support with simple casting from Stream and byte[] , including using the file name if available or specifying one manually.

  • Type conversions: Implicit conversions for union variants to keep instantiations clean while preserving full type information.

  • Tooling support: Great type-ahead within all modern C# editors.

  • Minimal dependencies: Packages are only used for back-porting .NET features, as well as for unit tests. Aside from xUnit.net, all packages are maintained by Microsoft.

  • Equality checking: All non-streaming types implement a custom Equals override, allowing for comparing arbitrarily complex objects.

  • Streaming: Support for SSE and JSONL streams as C# async enumerables, allowing for convenient usage with LINQ.

  • Intelligent pagination: Paginated endpoints are exposed as async enumerables, and automatically request new pages as required.

  • Comprehensive unit tests: Unit tests are generated for all model types and service methods.

  • NuGet publishing: C# SDKs can be configured to be automatically published to NuGet on every release.

  • Strong name signing: Assemblies can be automatically compiled with a strong name.

  • Advanced use-cases: Raw and undocumented request support.

Jan 13, 2026

Stephen Downward

The C# SDK generator is now generally available, bringing high quality SDKs to the .NET ecosystem. Key highlights include:

  • .NET Standard 2.0 support: You can use Stainless C# SDKs in any environment that implements .NET Standard 2.0. For more information see the changelog.

  • File uploads & downloads: Full lazy upload and download support with simple casting from Stream and byte[] , including using the file name if available or specifying one manually.

  • Type conversions: Implicit conversions for union variants to keep instantiations clean while preserving full type information.

  • Tooling support: Great type-ahead within all modern C# editors.

  • Minimal dependencies: Packages are only used for back-porting .NET features, as well as for unit tests. Aside from xUnit.net, all packages are maintained by Microsoft.

  • Equality checking: All non-streaming types implement a custom Equals override, allowing for comparing arbitrarily complex objects.

  • Streaming: Support for SSE and JSONL streams as C# async enumerables, allowing for convenient usage with LINQ.

  • Intelligent pagination: Paginated endpoints are exposed as async enumerables, and automatically request new pages as required.

  • Comprehensive unit tests: Unit tests are generated for all model types and service methods.

  • NuGet publishing: C# SDKs can be configured to be automatically published to NuGet on every release.

  • Strong name signing: Assemblies can be automatically compiled with a strong name.

  • Advanced use-cases: Raw and undocumented request support.

Jan 13, 2026

Stephen Downward

The C# SDK generator is now generally available, bringing high quality SDKs to the .NET ecosystem. Key highlights include:

  • .NET Standard 2.0 support: You can use Stainless C# SDKs in any environment that implements .NET Standard 2.0. For more information see the changelog.

  • File uploads & downloads: Full lazy upload and download support with simple casting from Stream and byte[] , including using the file name if available or specifying one manually.

  • Type conversions: Implicit conversions for union variants to keep instantiations clean while preserving full type information.

  • Tooling support: Great type-ahead within all modern C# editors.

  • Minimal dependencies: Packages are only used for back-porting .NET features, as well as for unit tests. Aside from xUnit.net, all packages are maintained by Microsoft.

  • Equality checking: All non-streaming types implement a custom Equals override, allowing for comparing arbitrarily complex objects.

  • Streaming: Support for SSE and JSONL streams as C# async enumerables, allowing for convenient usage with LINQ.

  • Intelligent pagination: Paginated endpoints are exposed as async enumerables, and automatically request new pages as required.

  • Comprehensive unit tests: Unit tests are generated for all model types and service methods.

  • NuGet publishing: C# SDKs can be configured to be automatically published to NuGet on every release.

  • Strong name signing: Assemblies can be automatically compiled with a strong name.

  • Advanced use-cases: Raw and undocumented request support.

Jan 13, 2026

Pierce Clark

We’ve removed all MCP tool schemes except for “Code Mode," a scheme that exposes just two tools to agents. These include the “docs-search tool” and an “execute-code tool," which allows agents to execute code against your TypeScript SDK on your behalf.

We now will no longer generate or offer other tool schemes such as regular/dynamic tools. Other options such as hosting/publishing your server with Stainless will remain unchanged.

You can find out more about Code Mode and its advantages in our MCP docs.

Jan 13, 2026

Pierce Clark

We’ve removed all MCP tool schemes except for “Code Mode," a scheme that exposes just two tools to agents. These include the “docs-search tool” and an “execute-code tool," which allows agents to execute code against your TypeScript SDK on your behalf.

We now will no longer generate or offer other tool schemes such as regular/dynamic tools. Other options such as hosting/publishing your server with Stainless will remain unchanged.

You can find out more about Code Mode and its advantages in our MCP docs.

Jan 13, 2026

Pierce Clark

We’ve removed all MCP tool schemes except for “Code Mode," a scheme that exposes just two tools to agents. These include the “docs-search tool” and an “execute-code tool," which allows agents to execute code against your TypeScript SDK on your behalf.

We now will no longer generate or offer other tool schemes such as regular/dynamic tools. Other options such as hosting/publishing your server with Stainless will remain unchanged.

You can find out more about Code Mode and its advantages in our MCP docs.

Jan 8, 2026

Hao Wang

The PHP SDK generator is now generally available, with deeply integrated type annotations that empower modern language services, for both array shapes as well as parameter and response classes.

Tooling support: Great auto-completion and type checking support for modern editor tool chains and static analysis.

Minimalistic value objects: Plain composition of lightweight and built-in data interfaces such as ArrayAccess for accessing and providing raw or custom data and Stringable for pretty printing.

Standard protocols: PHP Standards Recommendation-derived HTTP stack, compatible with the wider ecosystem.

Flexible input: Choose between well-typed arrays for ease of entry or equivalent parameter classes and gain runtime-safety.

Intuitive pagination: Paginated data as plain value objects composed with the built-in IteratorAggregate protocol for accessing successive pages.

Type conversions: Automatic conversion of inputs and outputs to and from Time, Integer, and so on, as appropriate.‍

Streaming: Support for SSE & JSON-L streams as PHP Iterators with automatic resource cleanup.

Advanced use cases: Raw and undocumented request support as well as for accessing underlying HTTP transports.

Jan 8, 2026

Hao Wang

The PHP SDK generator is now generally available, with deeply integrated type annotations that empower modern language services, for both array shapes as well as parameter and response classes.

Tooling support: Great auto-completion and type checking support for modern editor tool chains and static analysis.

Minimalistic value objects: Plain composition of lightweight and built-in data interfaces such as ArrayAccess for accessing and providing raw or custom data and Stringable for pretty printing.

Standard protocols: PHP Standards Recommendation-derived HTTP stack, compatible with the wider ecosystem.

Flexible input: Choose between well-typed arrays for ease of entry or equivalent parameter classes and gain runtime-safety.

Intuitive pagination: Paginated data as plain value objects composed with the built-in IteratorAggregate protocol for accessing successive pages.

Type conversions: Automatic conversion of inputs and outputs to and from Time, Integer, and so on, as appropriate.‍

Streaming: Support for SSE & JSON-L streams as PHP Iterators with automatic resource cleanup.

Advanced use cases: Raw and undocumented request support as well as for accessing underlying HTTP transports.

Jan 8, 2026

Hao Wang

The PHP SDK generator is now generally available, with deeply integrated type annotations that empower modern language services, for both array shapes as well as parameter and response classes.

Tooling support: Great auto-completion and type checking support for modern editor tool chains and static analysis.

Minimalistic value objects: Plain composition of lightweight and built-in data interfaces such as ArrayAccess for accessing and providing raw or custom data and Stringable for pretty printing.

Standard protocols: PHP Standards Recommendation-derived HTTP stack, compatible with the wider ecosystem.

Flexible input: Choose between well-typed arrays for ease of entry or equivalent parameter classes and gain runtime-safety.

Intuitive pagination: Paginated data as plain value objects composed with the built-in IteratorAggregate protocol for accessing successive pages.

Type conversions: Automatic conversion of inputs and outputs to and from Time, Integer, and so on, as appropriate.‍

Streaming: Support for SSE & JSON-L streams as PHP Iterators with automatic resource cleanup.

Advanced use cases: Raw and undocumented request support as well as for accessing underlying HTTP transports.