> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt. ## 2.90.1 **`(fix):`** XML (TwiML) record types implement value equality: `Equals`/`GetHashCode` (and `==`) compare the rendered XML, so `VoiceResponse.FromXml(xml).Equals(VoiceResponse.FromXml(parsed.ToXml()))` and `new Say { Message = "x" }.Equals(new Say { Message = "x" })` are true. Previously the record default compared the collection members by reference and was always false. ## 2.90.0 **`(feat):`** Add opt-in `user-agent-only` config. When enabled, generated clients send the `User-Agent` header (including the structured form from `include-platform-headers`) but omit the `X-Fern-Language`, `X-Fern-SDK-Name`, and `X-Fern-SDK-Version` headers. Disabled by default, so existing generated output is unchanged. `omit-fern-headers` still takes precedence and drops the `User-Agent` too. **`(fix):`** Fix the generated `XmlElementTests` test project failing to compile because its `FakeNode` test double did not implement `IXmlNode.ToXml(bool)`. ## 2.89.0 **`(feat):`** The generated `WebhooksHelper` HMAC verifier now accepts a per-call algorithm override via an optional `algorithm` parameter on `verifySignature`, one of `sha1`, `sha256`, `sha384` or `sha512`. When omitted, the algorithm configured in `webhook-signature` is used, so existing callers are unchanged. This lets one endpoint verify both legacy HMAC-SHA1 (auth-token) and HMAC-SHA256 (shared-key) signed webhooks. The verifier also logs a warning distinguishing an early failure (missing signature header) from a failed verification (signature mismatch); it still returns `false` and never throws. ## 2.88.0 **`(feat):`** XML (TwiML) types keep text segments, typed child elements and raw `XmlElement` children in a single ordered `Content` list, so `ToXml()` emits them in the order they were added (`Response.Say(a).AddChild(custom).Say(b)` yields `ab`) and `FromXml()` preserves document order, including the position of unknown elements and repeated wrapper elements. Adds `AddText(string)` to XML types and `XmlElement` for mixed content such as `Hi world`. Typed child properties and `AdditionalChildren` remain available; `AdditionalChildren` is now derived from `Content`. ## 2.87.0 **`(feat):`** Support SDK variables (`variables` in `api.yml` / `x-fern-sdk-variables` in OpenAPI). Path parameters bound to a variable via `x-fern-sdk-variable` are removed from endpoint signatures and request types and are configured once on the client through the generated `ClientOptions.` property. String variables that declare an `env` fall back to that environment variable, and a variable that is still unset fails with a clear `ArgumentException` before the request is sent.