For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Book a demoLog inStart for free
  • Overview
    • Introduction
    • How it works
    • Quickstart
    • Customer showcase
  • Working with SDKs
    • Project structure
    • Adding custom code
    • Migrating to Replay
    • Capabilities
  • Generators
      • Generating an SDK
      • Publishing to NuGet
      • Configuration
      • Adding custom code
      • Version compatibility
      • Changelog
      • Customer showcase
  • Reference
    • generators.yml
Checking status...
SOC2Soc 2 Type II
© 2026 Fern • Birch Solutions, Inc., a Postman company

Documentation

SDKsDocsAsk FernCLI Reference

API Definitions

OpenAPIAsyncAPIOpenRPCgRPC

Resources

BlogSupportPricing

Company

Brand KitPrivacy PolicyTerms of Service
LogoLogo
Book a demoLog inStart for free
Generators.NET

Changelog

March 19, 2026
March 19, 2026
Was this page helpful?
Edit this page
Previous

March 20, 2026

Next

March 18, 2026

2.39.0

(feat): Generate interfaces for WebSocket API classes (e.g., IStreamApi, ITranscribeApi) to improve testability. Each WebSocket client now implements a corresponding interface that declares all public event properties, Status, ConnectAsync, Send, and CloseAsync. The root client interface (ICortiClient) also includes factory method signatures (CreateStreamApi, CreateTranscribeApi) when WebSockets are enabled.

2.38.1

(fix): Fix Event<T> thread-safety issue. RaiseEvent now snapshots the subscriber collections under a lock before iterating, and Subscribe, Unsubscribe, and UnsubscribeAll are synchronized to prevent InvalidOperationException when handlers are added or removed concurrently from different threads.

2.38.0

(feat): Add optional CancellationToken parameter to all public async WebSocket methods (ConnectAsync, CloseAsync, and Send overloads). The token is threaded through the internal WebSocketClient, WebSocketConnection, and down to the underlying ClientWebSocket.SendAsync/ConnectAsync/CloseAsync calls, enabling callers to cancel long-running WebSocket operations.

2.37.2

(fix): Fix WebSocket binary messages being sent with WebSocketMessageType.Text instead of WebSocketMessageType.Binary. RequestBinaryMessage and RequestBinarySegmentMessage now correctly use WebSocketMessageType.Binary when calling SendAsync, ensuring audio data (e.g. webm/opus chunks) is sent as binary frames.

2.37.1

(fix): Add ReadAsPropertyName and WriteAsPropertyName overrides to all remaining custom JsonConverter types: EnumSerializer<TEnum> (native C# enums), DateTimeSerializer, DateAsDateTimeConverter, discriminated union converters, and literal type converters. Without these overrides, System.Text.Json throws NotSupportedException when any of these types is used as a Dictionary<TKey, TValue> key. This complements the IStringEnum fix in 2.35.1.

2.37.0

(feat): Replace separate deserialization and serialization tests with a single round-trip serialization test using JsonAssert.Roundtrips<T>(inputJson). The helper deserializes JSON to T, re-serializes, and compares to the original JSON via JsonElement deep equality, producing diff-reportable failures.

2.36.0

(feat): Add UsingObjectDictionaryComparer to test comparers for handling Dictionary<string, object?> fields. System.Text.Json deserializes object? values as JsonElement, so structural equality comparisons need to serialize both sides before comparing. The UsingDefaults() chain now includes this comparer automatically.

2.35.1

(fix): Add ReadAsPropertyName and WriteAsPropertyName overrides to the generated IStringEnum JsonConverter. Without these overrides, System.Text.Json throws NotSupportedException at runtime when serializing or deserializing a Dictionary<TStringEnum, TValue>. This is applied to all generated IStringEnum types so dictionary-key usage works without requiring regeneration.

2.35.0

(fix): Fix WebSocket binary message sending. Binary messages (e.g. audio bytes) are now sent as raw bytes instead of being JSON-serialized, which caused servers to reject them with CONFIG_DENIED.

(fix): Fix WebSocket incoming message deserialization. TryDeserialize now passes JsonSerializerOptions so the generated literal property setters correctly validate const discriminator fields (e.g. type: "transcript" vs type: "flushed") during deserialization.

(feat): Add forward-compatible UnknownMessage event to WebSocket clients. When the server sends an event type not recognized by the SDK, it is now dispatched to the UnknownMessage event handler (as a JsonElement) instead of raising an exception. This allows SDKs to gracefully handle new server event types without requiring regeneration.