> This page is for SDK.

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

## 5.37.2

**`(fix):`** XML (TwiML) child builders keep their legacy names when they collide with the element's text
field: `dial.number("+15551234567")` and `message.body("b")` now work instead of raising
`TypeError: 'NoneType' object is not callable`. The text is still passed as the same constructor
keyword (`Dial(number="+1555")`) but is stored under a trailing underscore (`dial.number_`) so the
builder method stays callable; `add_number`/`add_body` are no longer generated.

## 5.37.1

**`(fix):`** List-valued XML (TwiML) attributes accept a single space-separated string in addition to
a list, matching the legacy call style: `response.gather(input="speech dtmf")` no longer
raises a validation error and serializes as `input="speech dtmf"`.

## 5.37.0

**`(feat):`** Add opt-in `user_agent_only` config (also accepted as `userAgentOnly`). 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`,
`X-Fern-SDK-Version`, `X-Fern-Runtime`, and `X-Fern-Platform` headers. Disabled by default,
so existing generated output is unchanged. `omit_fern_headers` still takes precedence and
drops the `User-Agent` too.

## 5.36.1

**`(fix):`** With endpoint-security auth, the client now fetches an OAuth or inferred-auth token only when the
endpoint's security requirements reference that scheme. Previously every authenticated call fetched
one first, so an endpoint that doesn't use it (e.g. the token endpoint itself) made an extra token
request and failed if that fetch failed.

## 5.36.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.

## 5.35.0

**`(feat):`** XML (TwiML) models keep text segments, typed children and undeclared `XmlElement` children in one
ordered content sequence, so `to_xml()` writes them in insertion order (`say("a")`, `add_child(...)`,
`say("b")` renders `<Say>a</Say><Custom /><Say>b</Say>`) and `from_xml()` preserves document order,
including nested mixed content in undeclared children. Builders gain `add_text(text)` for mixed
content such as `Say("Hi ").break_(...).add_text(" world")`. Typed child properties and
`add_child()` keep working as before.

## 5.34.5

**`(fix):`** XML-encoded (TwiML) types now include the `<?xml version="1.0" encoding="UTF-8"?>`
declaration by default when serialized to XML; pass the declaration flag as `false`
to omit it. Nested child elements and raw `XmlElement`s are still written without it.

## 5.34.4

**`(fix):`** On Python 3.10 and older, `str()` on a generated enum member now returns its value (e.g. `WALMART_US`)
instead of `ClassName.WALMART_US`, matching `enum.StrEnum` on Python 3.11+. Previously, enum query
parameters were sent as `ClassName.MEMBER` on those versions when `enum_type: forward_compatible_python_enums`
or `python_enums` was used.