> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt. # Customize SDK method names > Use `x-fern-sdk-method-name` and `x-fern-sdk-group-name` to finetune SDK naming. Use the `x-fern-sdk-group-name` and `x-fern-sdk-method-name` extensions to control how endpoints are organized in your [SDKs](/learn/sdks/overview/introduction) and [CLIs](/learn/cli-generator/get-started/openapi-extensions). #### Fern automatically parses \`operationId\` If no extensions are present, Fern uses your operation ID to generate SDK method names. Format operation IDs as `{tag_name}_{operation_name}` (example: `users_get`) to automatically generate methods like `users.get()`. If the operation ID doesn't start with a tag, Fern uses it directly as the method name. In the example below, Fern will generate a method called `client.users.create()` for the `POST /users` endpoint. **`openapi.yml`** ```yaml title="openapi.yml" {4-5} paths: /users: post: x-fern-sdk-group-name: users x-fern-sdk-method-name: create ``` ### Top level methods If you omit the `x-fern-sdk-group-name` extension, the generated SDK method will live at the root of the client rather than nested under a resource group. In the example below, Fern will generate a method called `client.send()`: **`openapi.yml`** ```yaml title="openapi.yml" {4} paths: /send: post: x-fern-sdk-method-name: send ``` ### Multiple levels of nesting See how merge.dev uses nested groups [here](https://github.com/merge-api/merge-node-client?tab=readme-ov-file#create-link-token). If you add more than one `x-fern-sdk-group-name` extension, then the generated SDK will nest group names. The generated SDK method preserves the order of group names. In the example below, Fern will generate a method called `client.users.notifications.send()`: **`openapi.yml`** ```yaml title="openapi.yml" paths: /users/notifications: post: x-fern-sdk-group-name: - users - notifications x-fern-sdk-method-name: send ``` ### Ignore tags Without extensions, Fern derives SDK group names from operation-level `tags`. Set [`ignore-tags`](/learn/sdks/reference/generators-yml#settingsignore-tags) in `generators.yml` to ignore tags when determining SDK structure: endpoints fall back to the root package (or their `namespace`), and method names are derived from each operation's `operationId`. **`generators.yml`** ```yaml title="generators.yml" {5} api: specs: - openapi: ./openapi.yml settings: ignore-tags: true ``` `x-fern-sdk-group-name` and `x-fern-sdk-method-name` still take precedence, so you can group individual endpoints while ignoring tags elsewhere. Enabling `ignore-tags` avoids editing the spec or maintaining overlays when tags would otherwise produce awkward sub-clients, such as a `ConversationsV2Configuration` tag becoming a `conversations_v2_configuration` sub-client. > Use `x-fern-sdk-method-name` and `x-fern-sdk-group-name` to finetune SDK naming.