3.32.0

(feat): Add endpoint-level security support with routing auth providers. APIs can now define different authentication requirements per endpoint using the ENDPOINT_SECURITY auth mode. The SDK generates individual auth providers (Bearer, Basic, ApiKey, OAuth, InferredAuth) and a RoutingAuthProvider that routes requests to the appropriate provider based on each endpoint’s security requirements. Supports OR (any of) and AND (all of) auth requirement combinations.

To enable, add auth: endpoint-security: {} to your api.yml and define per-endpoint auth in your service definitions using the auth field on each endpoint.

3.31.0

(feat): Add additionalQueryParameters support to RequestOptions, allowing users to add query parameters to API requests at runtime. Query parameters added via RequestOptions override any request-defined parameters with the same key. This mirrors the existing addHeader pattern.

Usage example:

1client.endpoint(
2 Request.builder().build(),
3 RequestOptions.builder()
4 .addQueryParameter("key", "value")
5 .build()
6);

3.30.0

(feat): Add enable-gradle-profiling configuration option for profiling Gradle commands during generation.

3.29.2

(fix): Add notify, notifyAll, and wait to reserved method names to prevent generated SDK methods from conflicting with final methods in Java’s Object class. This fixes compilation errors when an API has a subpackage named “notify” (e.g., Twilio’s Notify API).

3.29.1

(fix): Fix _Builder class to support all builder methods (url, timeout, environment, maxRetries, httpClient, addHeader) so method chaining works in any order. This allows customers upgrading from 3.18.x who wrote builder().url().token() to continue working without compile errors. Configuration values set on _Builder are now properly passed through to _TokenAuth and _CredentialsAuth when token() or credentials() is called.


3.29.0

(feat): Add backward-compatible builder() method for OAuth client credentials authentication. This restores support for the classic builder pattern Client.builder().token("...") and Client.builder().credentials("...", "...") alongside the existing withToken() and withCredentials() shortcuts. This prevents breaking changes for customers who upgraded.


3.28.2

(chore): Update Dockerfile to use the latest generator-cli with improve reference.md generation.

3.28.1

(fix): Update libtasn1-6 and gnupg packages in container to fix CVE-2021-46848, CVE-2025-13151, CVE-2025-68973.



3.27.6

(feat): Generate overloads without request wrapper when all query parameters are optional. This prevents compile breaks when optional query parameters are added to endpoints. For example, getLatestInsurance(String userId) and getLatestInsurance(String userId, RequestOptions requestOptions) overloads are now generated in addition to the request wrapper variants.


3.27.5-rc4

(fix): Add fallback SDK name generation for X-Fern-SDK-Name header when no explicit maven config is provided. This ensures local generation matches remote generation for GitHub output mode.



3.27.5-rc2

(fix): Install fast-content-type-parse dependency required by @octokit/request@10.0.7 CVE patch.

3.27.5-rc1

(chore): Add debug logging to generator agent methods to help diagnose issues with README and reference generation.

3.27.5-rc0

(chore): Skip installation of generator-cli in Java V2 generator as it is already installed in the base image.


3.27.4

(fix): Fix OAuth client credentials flow to include custom headers, timeouts, and retries in token requests by using ClientOptions.Builder.from() pattern.

3.27.3

(fix): Fix streaming endpoint return types to use Iterable instead of Optional, fix missing ArrayList import for empty list literals, and fix OAuth wire tests to use withCredentials() pattern.

3.27.2

(chore): Support configurable Node.js and Java V2 executable paths via NODE_PATH and JAVA_V2_PATH environment variables for local seed testing.

3.27.1

(chore): Add sdkVersion as a top-level field in the generated metadata.json file.


3.27.0

(feat): Add gradle-central-dependency-management configuration option (boolean, default false). When enabled, this skips generating the repositories block in build.gradle files, allowing dependencyResolutionManagement in settings.gradle with RepositoriesMode.FAIL_ON_PROJECT_REPOS to work correctly.

This should be used in conjunction with gradle-plugin-management when configuring central repository management on enterprise networks.

Configuration example:

1config:
2 gradle-central-dependency-management: true
3 gradle-plugin-management: |
4 pluginManagement {
5 repositories {
6 maven { url 'https://internal-artifactory.example.com/gradle-plugins/' }
7 }
8 }
9 dependencyResolutionManagement {
10 repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
11 repositories {
12 maven { url 'https://internal-artifactory.example.com/maven-releases/' }
13 }
14 }

3.26.0

(feat): Add gradle-plugin-management configuration option to inject custom plugin management and dependency resolution configuration into settings.gradle. This enables SDK generation on enterprise networks that cannot access the Gradle Plugin Portal (plugins.gradle.org) by configuring internal Artifactory/Nexus repositories for plugin resolution.

Configuration example:

1config:
2 gradle-plugin-management: |
3 pluginManagement {
4 repositories {
5 maven { url 'https://internal-artifactory.example.com/gradle-plugins/' }
6 }
7 }
8 dependencyResolutionManagement {
9 repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
10 repositories {
11 maven { url 'https://internal-artifactory.example.com/maven-releases/' }
12 }
13 }

(fix): Fix gradle-distribution-url override in Java V2 generator to properly create the gradle/wrapper directory before writing gradle-wrapper.properties.

3.25.1

(fix): Fix form-urlencoded request body handling to properly serialize request objects using Jackson’s convertValue, preserving wire names from @JsonProperty annotations.