# SDK user features

> Learn about SDK user features in Fern-generated client libraries including installation, error handling, webhook verification, and customization options.

Fern-generated SDKs provide a consistent set of features across all languages to help developers interact with your API. Usage information is auto-generated in your SDK's `README.md`, [which you can customize](./readme).

For a complete example of a generated SDK README, see [Intercom's Python SDK](https://github.com/intercom/python-intercom/blob/3aac991a92cefe34cf437f8f5ca46c97c04c1a6c/README.md).

## Installation and basic usage

Users install SDKs using standard package managers (npm for TypeScript, pip for Python, Maven/Gradle for Java, etc.) from language-specific registries.

Users initialize the client with your API's base URL and any required authentication, then call methods on the client to interact with your API. Generated SDKs support modern runtimes across languages.

## Reference

The `README.md` file links to an auto-generated `reference.md` file
([example](https://github.com/intercom/python-intercom/blob/HEAD/reference.md))
that lists all available API methods organized by resource, including method
signatures with parameter types, usage examples, and request/response structures
for each endpoint.

## IDE support and IntelliSense

Fern-generated SDKs include full type definitions that enable rich IDE support. When developers use your SDK in editors like VS Code, they get autocomplete, inline documentation, and type information.

The inline documentation comes from your API definition. During the SDK generation process, Fern embeds your parameter descriptions, return types, and code examples directly in the code as docstrings (Python), JSDoc (TypeScript), Javadoc (Java), etc.

<Frame caption="From Vapi Server SDK (TypeScript)" background="subtle">
  <video src="https://files.buildwithfern.com/fern.docs.buildwithfern.com/learn/2b98ad9c69fb5b51edbe790b42b62a877fa5cf1883d1803153e842561720dd19/products/sdks/images/intellisense.mp4" autoPlay loop playsInline muted />
</Frame>

## Error handling

When the API returns a 4xx or 5xx status code, the SDK throws an error that includes the status code, error message, response body, and raw response object.

## Webhook signature verification

When you define webhooks in your API spec, Fern automatically generates utilities that allow your users to verify webhook signatures and ensure events originate from your API. For an example, see [Square's Node.js SDK](https://github.com/square/square-nodejs-sdk?tab=readme-ov-file#webhook-signature-verification).

## Customization options

Your SDK users can configure individual requests using language-specific options:

| Option                                           | Description                                                                                         | Availability                             |
| ------------------------------------------------ | --------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| Timeouts                                         | Configure request timeouts (default: 30 seconds for C# and PHP, 60 seconds for all other languages) | All languages                            |
| [Retries](/sdks/deep-dives/retries-with-backoff) | Configure maximum retries (default: 2 with exponential backoff for 408, 429, and 5xx responses)     | All languages except Ruby and Swift      |
| Custom HTTP client                               | Override the default HTTP client for unsupported environments or custom requirements                | TypeScript, Python, Java, PHP, and Swift |
| Custom headers                                   | Send additional headers with any request                                                            | TypeScript, Java, and Swift              |
| Raw response data                                | Access response headers alongside parsed data                                                       | TypeScript, Python, and Go               |
| Query parameters                                 | Add extra query string parameters                                                                   | TypeScript and Swift                     |
| Abort signals                                    | Cancel in-flight requests                                                                           | TypeScript only                          |