> This page is for SDK, version Legacy.
> For other versions, use one of these documentation indexes:
> - Current (default): https://buildwithfern.com/learn/sdks/current/llms.txt
> - Legacy: https://buildwithfern.com/learn/sdks/legacy/llms.txt

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

# Capabilities

> Fern SDK capabilities include type safety, auto-pagination, OAuth token refresh, retries with backoff, webhook verification, and more.

> **You're viewing the legacy SDK docs**
>
> These pages cover SDK generation configured with `generators.yml`. New projects use `sdk-config.yml`, so see [the Current version of this page](/learn/sdks/overview/capabilities) for up-to-date guidance. To move an existing project, follow the [SDK Config migration guide](/learn/sdks/legacy/generators/migration-guides/sdk-config), which walks through `fern sdk migrate`, and review the [`sdk-config.yml` reference](/learn/sdks/reference/sdk-config).

Fern SDKs include the following capabilities:

* **Strongly typed**: Move fast and break nothing with type safety.
* **IDE support**: Rich autocomplete and inline documentation in your editor. [Learn more](/learn/sdks/legacy/deep-dives/sdk-user-features#ide-support-and-intellisense)
* **Idiomatic method names**: Fine-tune SDK resources and method names. [Learn more](/learn/sdks/legacy/deep-dives/customize-method-names)
* **Schema validation**: Fail fast if payloads diverge from your schema. [Learn more](/learn/sdks/legacy/deep-dives/testing#mock-server-tests)
* **Discriminated unions**: Support for discriminated unions. [Learn more](/learn/api-definitions/ferndef/types#discriminated-unions)
* **Multipart form data**: SDKs that handle multipart form data.
* **Forward compatibility**: SDKs that are fault-tolerant as your API evolves.
* **Automated releases**: Automatically detects API changes, regenerates SDKs, and publishes to registries. [Learn more](/learn/sdks/legacy/overview/autorelease)
* **Auto-pagination**: Paginate through API responses using offset, cursor, and link-based pagination. [Learn more](/learn/sdks/legacy/deep-dives/auto-pagination)
* **OAuth token refresh**: First-class OAuth support. [Learn more](/learn/sdks/legacy/reference/generators-yml#oauth-client-credentials)
* **Retries with backoff**: Automatically retry failed requests with exponential backoff. [Learn more](/learn/sdks/legacy/deep-dives/retries-with-backoff)
* **Webhook signature verification**: Verify the signature of incoming webhook requests. [Learn more](/learn/sdks/legacy/deep-dives/webhook-signature-verification)
* **Idempotency headers**: Built-in protection against duplicate submissions. [Learn more](/learn/sdks/legacy/deep-dives/idempotency)
* **Server-sent events**: Stream JSON data from your server to your client, with opt-in access to [SSE metadata](/learn/sdks/legacy/deep-dives/sse-metadata) (event ID, event type, retry) and [automatic reconnection](/learn/sdks/legacy/deep-dives/sse-metadata#automatic-reconnection) for resumable endpoints. [Learn more](/learn/sdks/legacy/deep-dives/sse-metadata)
* **Testing**: Auto-generated and handwritten tests for your SDK. [Learn more](/learn/sdks/legacy/deep-dives/testing)
* **Code snippets**: No longer depend on manually written code snippets. [Learn more](/learn/docs/api-references/sdk-snippets)
* **Augment with custom code**: Extend the generated SDK with additional functionality. [Learn more](/learn/sdks/legacy/overview/custom-code)
* **Merging multiple APIs**: Multiple API definitions, one SDK. [Learn more](/learn/api-definitions/overview/project-structure#multiple-apis)
* **WebSockets**: Generate typed WebSocket clients with connection management and reconnection. [Learn more](/learn/sdks/legacy/deep-dives/websocket-clients)
* **XML-encoded types**: Typed XML serializers, parsers, and fluent builders for object types with OpenAPI `xml` metadata. [Learn more](/learn/sdks/legacy/deep-dives/xml-encoded-types)