3.13.0

(feat): Added Generation Metadata file to output.

3.12.1

(fix): Fix query and header parameters leaking into request body JSON. Only body parameters are now serialized in the request payload.


3.12.0

(feat): Add support for API-level path parameters. Path parameters defined at the API level (e.g., /test/{pathParam}) are now configurable via the root client builder (.pathParam(value)).

3.11.7

(fix): Fix ApiError toString() to display JSON-serialized body instead of hashcode (e.g., {"title": "Bad Request", ...} instead of BadRequestProblems@4ac5ea99).

3.11.6

(fix): Fix path parameter prefixes (e.g., v) being split into separate segments, producing URLs like …/v/1 instead of …/v1.

3.11.5

(fix): Extract error body parsing to ObjectMappers.parseErrorBody() utility method. When servers return XML/HTML errors instead of JSON, the utility gracefully falls back to raw string instead of throwing JsonProcessingException, preserving HTTP status codes and error details.

3.11.4

(fix): The NullableNonemptyFilter now correctly handles OptionalNullable.isAbsent() to exclude absent fields from JSON serialization in PATCH requests.


3.11.3

(fix): Fix collapse-optional-nullable config not being applied in download files mode.

3.11.2

(fix): Fix IllegalStateException: closed on error responses. Generated clients were calling responseBody.string() twice (once in success handler, once in error handler), but OkHttp’s ResponseBody can only be read once. Now pre-reads response body before success check for JSON/text responses.

3.11.1

(fix): Disable wire tests by default for Java SDKs while issues are being resolved.


3.11.0

(feat): Add support for three-state nullable fields in PATCH requests via collapse-optional-nullable config. When enabled, optional nullable fields use OptionalNullable<T> to distinguish between omitted fields, explicit null values, and actual values. This enables proper PATCH request semantics for APIs that need to differentiate between “not specified” and “set to null”.

1customConfig:
2 collapse-optional-nullable: true

Generated usage:

1UpdateRequest.builder()
2 .fieldName(OptionalNullable.absent()) // Omit field
3 .anotherField(OptionalNullable.ofNull()) // Clear field
4 .valueField(OptionalNullable.of("value")) // Set value
5 .build();

3.10.5

(fix): Revert support for three-state nullable fields in PATCH requests introduced in 3.10.0 (PR #10104). Restores Optional<T> semantics and removes the use-nullable-for-optional-fields config and related Nullable<T> handling.


3.10.4

(fix): Fix compilation errors when using boolean or long query parameters.

3.10.3

(fix): Use Gradle wrapper for Spotless formatting instead of requiring gradle in PATH.


3.10.2

(fix): Fix sync client delegation causing array query parameter compilation errors. Generator was using incorrect class names, breaking delegation and causing inline HTTP generation.

3.10.1

(fix): Fixed nullable annotation generation in builder setters when use-nullable-annotation is enabled. Builder setter parameters for nullable fields now correctly use @org.jetbrains.annotations.Nullable instead of incorrectly attempting to use the Nullable<T> container class as an annotation. Also removed @Nullable from path parameters as they are always required in REST APIs.

3.10.0

(feat): Add support for three-state nullable fields in PATCH requests via use-nullable-for-optional-fields config. When enabled, optional fields use Nullable<T> instead of Optional<T> to distinguish between omitted fields, explicit null values, and actual values.

3.9.4

(chore): Documenting .withRawResponse() in README.md.



3.9.2

(fix): Fix nullable field serialization in PATCH requests with wrapped request bodies. Explicit null values (Nullable.ofNull()) are now correctly serialized as {"field": null} instead of being omitted like Nullable.empty().

3.9.1

(fix): Fix raw client methods to return union types instead of first variant when using response properties (x-fern-sdk-return-value) with discriminated or undiscriminated unions.


3.9.0

(feat): Add support for README example style configuration via exampleStyle field. When set to “minimal”, generated README.md files show streamlined code examples with only required parameters, reducing verbosity for better readability. Defaults to “comprehensive” to maintain backward compatibility.