5.2.0

(feat): Add maxRetries custom config option. When set in generators.yml, the generated SDK uses the specified value as the default retry count instead of the hardcoded default of 2. Set to 0 to disable retries by default, which is useful for APIs with non-idempotent endpoints. SDK users can still override this per-request via request_options.


5.1.3

(fix): Add transport-level connection error retries to the HTTP client. The retry logic now catches httpx.ConnectError and httpx.RemoteProtocolError (e.g., “Remote end closed connection without response”) and retries with exponential backoff, matching the existing status-code-based retry behavior. Also fixes the existing status-code retry path to forward the data and force_multipart parameters on retry.

5.1.2

(chore): Pretty-print generated wiremock-mappings.json with 2-space indentation to reduce diff sizes on subsequent SDK generations.

5.1.1

(fix): Ensure async_token is accepted and forwarded in generated async client constructors for bearer token auth. Previously, AsyncClientWrapper supported async_token but the top-level async client only exposed it for OAuth client credentials flows, causing sync token callables to block the event loop in async contexts.

5.1.0

(feat): Add Environments section to generated README showing how to select different environments (production/sandbox) when initializing the client.


5.0.8

(fix): Eliminate Pydantic v2 deprecation warnings in UniversalBaseModel. Under Pydantic v2, the class-based Config pattern with smart_union and allow_population_by_field_name emits deprecation warnings. UniversalBaseModel now uses model_config: ConfigDict with populate_by_name=True, validate_by_name=True, and validate_by_alias=True (for v2.11+ support) for v2, and a custom @model_serializer for datetime serialization instead of the deprecated json_encoders. Pydantic v1 continues to use the original class-based Config.


5.0.7

(fix): Thread endpoint ID through dynamic snippet generator to differentiate generated snippets by endpoint.


5.0.6

(fix): Fix construct_type to resolve ForwardRef annotations in nested model fields and use strict Literal discriminant matching for undiscriminated unions.

Under Pydantic v2 with from __future__ import annotations, field annotations like List["Block"] remain as list[ForwardRef('Block')] even after model_rebuild. construct_type now resolves these ForwardRefs via the host model’s module, ensuring nested data is recursively constructed into proper model instances instead of staying as raw dicts.

Additionally, undiscriminated union resolution now requires Literal-typed discriminant fields to be present AND matching before accepting a candidate type. This prevents models with all-optional fields (e.g. FigureDetails) from greedily matching inputs that belong to a different variant or to a plain-dict fallback.

5.0.5

(fix): Add enum handling to construct_type() to prevent Pydantic serialization warnings when enum values pass through untyped model construction paths.


5.0.4

(fix): Fix optional complex-type parameters in multipart file upload requests being sent as "null" instead of being omitted. When an optional body property (e.g., Optional[List[str]], Optional[Any]) defaults to OMIT, json.dumps(jsonable_encoder(OMIT)) was evaluating to the string "null", destroying the OMIT sentinel before remove_omit_from_dict could strip it. Optional non-primitive body properties now emit a ternary guard (json.dumps(...) if prop is not OMIT else OMIT) so that the OMIT sentinel is preserved and correctly removed from the request data.


5.0.3

(fix): Skip Docker container management in generated tests/conftest.py when the WIREMOCK_URL environment variable is already set. This allows wire tests to run in CI/CD pipelines that provide an external WireMock sidecar container without requiring Docker-in-Docker support.

5.0.2

(fix): Add docstring emission for unknown/any type alias definitions. When a type alias resolves to typing.Any and has a description in the API definition, the generated Python code now includes the docstring below the type alias declaration.


5.0.1

(chore): Upgrade pytest-asyncio dev dependency from ^0.23.5 to ^1.0.0 in generated pyproject.toml. This eliminates deprecation warnings about asyncio.iscoroutinefunction, asyncio.get_event_loop_policy, and asyncio.set_event_loop_policy when running tests on Python 3.14+.

5.0.0

(feat): Raise the default minimum Python version from ^3.8 to ^3.10 in generated pyproject.toml. This allows the dependency resolver to pick Pydantic 2.11+ and pydantic-core 2.33+, which ship pre-built wheels for Python 3.14, fixing installation failures on Python 3.14.

4.64.1

(fix): Wrap python-version in quotes in generated GitHub CI workflow so versions like ^3.10 are not misinterpreted as 3.1 by the YAML parser.


4.64.0

(feat): Add omit_fern_headers configuration option. When enabled, Fern platform headers (X-Fern-Language, X-Fern-SDK-Name, X-Fern-SDK-Version, X-Fern-Runtime, X-Fern-Platform, User-Agent) are omitted from generated SDK requests.

4.63.6

(fix): Fix wire test generation for types with required fields missing from examples. When an OpenAPI example omits required fields on a nested object type, the generated test code now synthesizes reasonable default values (e.g., "" for strings, 1 for integers, [] for lists) instead of emitting empty constructors like ClassName() that cause Pydantic ValidationError at runtime.


4.63.5

(fix): Fix Python 3.14 compatibility by fully eliminating all pydantic.v1 imports from the Pydantic V2 code path. The previous fix (4.55.4) replaced pydantic.v1.datetime_parse but left other pydantic.v1 imports (typing utilities, json encoders, fields) that still trigger the “Core Pydantic V1 functionality isn’t compatible with Python 3.14” warning. All pydantic.v1 usages are now replaced with standard library equivalents (typing.get_args, typing.get_origin, typing_extensions.Literal), Pydantic V2 APIs (pydantic.fields.FieldInfo), and an inlined encoders_by_type dictionary.

4.63.4

(chore): Add concurrency configuration to generated CI workflow with cancel-in-progress: false to prevent stacked runs from being cancelled when a newer run starts.

4.63.3

(fix): Make wire test datetime normalization type-aware. String-typed query parameters that look like datetimes (e.g., created_after: str) are no longer incorrectly normalized with .000 milliseconds. Only DATE_TIME-typed parameters are affected by the datetime_milliseconds config.