> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt. ## 1.25.0 **`(fix):`** A 503 now raises a typed error instead of `ArgumentError`. `ServiceUnavailableError` inherited from `ApiError`, which accepts 0..1 positional arguments, while it is raised with the `(msg, code:)` signature its siblings use — so constructing it threw from inside the SDK and the caller lost the response during exactly the outage they needed to see. Every other 5xx mapped correctly; this was a one-word divergence from `ResponseError`. **`(feat):`** Add `respectNullableUnionFields` (opt-in). The undiscriminated-union matcher tested a member's required fields against `optional` alone, so a field that is required *and* `nullable` and legitimately arrives as `nil` read as a missing required field. The arm was rejected, no member matched, and the union silently degraded to an untyped Hash while the SDK documented the model — callers then hit `NoMethodError` on the documented accessors. `Model#to_h` already pairs the two flags this way. Opt-in because a caller of an already published gem may be reading that Hash by key; enabling it changes the returned type. **`(feat):`** Add `coerceAliasResponses` (opt-in). A type alias to a named type generated a `load` that did a bare `JSON.parse`, so an endpoint whose response schema is a `$ref` to another schema returned a string-keyed Hash while the SDK documented the aliased model — and it parsed without `symbolize_names`, unlike `Model.load`, so even hash access used different keys. With the flag, `load` delegates to the aliased type's own coercion. Aliases to primitives, containers and `unknown` are unaffected: there is no named type to delegate to. Opt-in because a caller of an already published gem may be reading that Hash by key.