Skip to navigation

2.92.3

(fix): WebhooksHelper.verifyRequest now parses name=value settings headers when webhook-signature.algorithm-header sets key-id-parameter/algorithm-parameter (e.g. Twilio’s X-Twilio-Webhooks-Signature-Settings: key=<id>,algorithm=HMAC_SHA256), so the key resolver receives the bare key ID instead of key=<id>. Requires IR 67.33.0.

2.92.2

(fix): The generated WebhooksHelper now consumes algorithm-header from api.settings.webhook-signature: a request-level verifyRequest helper reads the configured signature header first (missing or empty fails early with “could not run: missing signature header”), then the algorithm-selection header (e.g. X-Twilio-Webhook-Signature-Settings: <key_id>;HMAC_SHA256) to pick the HMAC algorithm from the configured wire values and hand the key ID to an application-supplied secret resolver. When the header is absent the configured default algorithm and the plain secret are used, so legacy auth-token flows keep working. The lower-level verifySignature is unchanged and still returns false without throwing.

2.92.1

(fix): reference.md is now generated for every output mode, matching the Go and Python generators. It was previously skipped unless the CLI passed a snippet path (local-file-system output without snippets: path: in generators.yml). README.md is unchanged and still requires snippets.

2.92.0

(feat): XML (TwiML) types can now carry XML comments. Comment(text) adds <!--text--> inside the element at its position in the ordered content (interleaved with AddText segments and child elements), while CommentBefore(text) / CommentAfter(text) render a comment immediately before or after the element itself (as a sibling in its parent, or around the root element after the XML declaration). Comments in parsed documents are preserved by FromXml and round-trip through ToXml; XmlElement.AddComment and the new XmlComment runtime type expose the same for untyped elements.

2.91.0

(feat): Generate a unit test file per XML-encoded (TwiML) type alongside the models, covering fromXml/toXml round trips, escaping, unknown attributes/children, open enum passthrough, child ordering, and rejection of malformed XML, wrong root elements and DOCTYPE declarations.

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.

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 <Say>a</Say><Custom /><Say>b</Say>) 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 <Say>Hi <break strength="weak" /> world</Say>. 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.<Variable> 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.

2.86.3

(fix): XML-encoded (TwiML) types now return their XML representation from ToString() instead of JSON, and ToXml() prepends the <?xml version="1.0" encoding="utf-8"?> declaration by default. Pass ToXml(xmlDeclaration: false) to omit it.

2.86.2

(fix): Fix RequestOptions.AdditionalBodyProperties throwing InvalidOperationException on endpoints without a request body (e.g. GET requests). When the request body is null, the additional properties are now sent as the JSON request body.

(fix): RequestOptions.AdditionalBodyProperties is now applied to form-urlencoded requests. The additional properties are merged into the form body (the additional property wins on a key collision) before encoding. Multipart requests remain unsupported.

2.86.1

(chore): Bump bundled @fern-api/generator-cli to 0.10.3. When the hosted auto-version analysis of the full SDK diff fails, generator-cli now retries chunk-by-chunk instead of silently applying a PATCH bump; any remaining unavailable or incomplete analysis adds a “Version bump not verified” notice to the SDK PR body and disables automerge.

2.86.0

(feat): Fluent child methods on XML-encoded (TwiML) types (e.g. response.Say(...), say.Break(...)) now carry <param> documentation for every argument, taken from the child type’s property descriptions, and include the child type’s own description in the method summary.

2.85.0

(feat): Generate the shared WebhooksHelper from the API-wide api.settings.webhook-signature setting in generators.yml (IR sdkConfig.webhookSignatureVerification). The helper is emitted even when the API definition models no webhooks; webhook-specific signature overrides still produce their own named helpers.

2.84.3

(fix): RawClient now applies the configured Timeout to each retry attempt individually instead of sharing a single budget across all attempts and backoff delays. Note that Timeout therefore no longer bounds the total duration of a call that is retried; the worst case is roughly Timeout * (MaxRetries + 1) plus backoff. If a retry attempt fails after an earlier attempt already received an API response (e.g. a 429), that response is returned instead of a generic cancellation error.

2.84.2

(chore): Bump bundled @fern-api/generator-cli to 0.10.1. Auto-versioned MAJOR/MINOR bumps no longer produce a version-only changelog.md block when the AI analysis returns an empty changelog entry; the PR description, version bump reason, or commit message body is used instead.

2.84.1

(fix): Honor the org-level whitelabel setting (readmeConfig.whiteLabel) and the apiName/disabledSections (IR disabledFeatures) readme config options when generating README.md. Previously the “Built with Fern” badge was always emitted.

2.84.0

(feat): Object types with XML encoding metadata (e.g. TwiML) now implement IXmlNode with ToXml()/ToXElement(), static FromXml(string)/FromXElement(XElement) parsers, and fluent child builder methods (response.Say("Hello", voice: "man").Dial(...)). Unknown attributes and child elements are preserved in AdditionalAttributes/AdditionalChildren and re-emitted; AddChild(XmlElement) adds arbitrary elements. Parsing rejects malformed XML, mismatched root elements and DTDs. Types without XML metadata are unchanged.

2.83.3

(fix): Fix the generated root client passing a grantType argument to OAuthTokenProvider when the token endpoint declares a required, non-literal grant_type property. OAuthTokenProvider hardcodes grant_type: "client_credentials" and never took that parameter, so the generated SDK failed to compile with 'OAuthTokenProvider' does not contain a constructor that takes 4 arguments.