diff --git a/fern/products/sdks/guides/server-url-templating.mdx b/fern/products/sdks/guides/server-url-templating.mdx
new file mode 100644
index 000000000..c47867b56
--- /dev/null
+++ b/fern/products/sdks/guides/server-url-templating.mdx
@@ -0,0 +1,172 @@
+---
+title: Server URL templating
+description: Configure server URL templating in Fern SDKs to support dynamic base URLs with variables like region and environment.
+---
+
+Server URL templating lets you define base URLs with variable placeholders (e.g., `{region}`, `{environment}`) that SDK users can customize at runtime. This is useful for APIs deployed across multiple regions, environments, or custom domains.
+
+Fern reads the standard OpenAPI `servers` block and generates SDK clients that accept these variables, falling back to sensible defaults when they're not provided.
+
+## Configuring in OpenAPI
+
+Define server variables inside the top-level `servers` block of your OpenAPI spec. Each variable can include a `default` value and an optional `enum` of allowed values.
+
+Use the `x-fern-default-url` extension to provide a static fallback URL that the SDK uses when no variables are supplied.
+
+```yaml {7-8, 10} title="openapi.yml"
+openapi: 3.0.3
+info:
+ title: My API
+ version: 1.0.0
+servers:
+ - url: https://api.{region}.{environment}.example.com/v1
+ description: Regional API server
+ x-server-name: Default
+ x-fern-default-url: https://api.example.com/v1
+ variables:
+ region:
+ default: us-east-1
+ enum:
+ - us-east-1
+ - us-west-2
+ - eu-west-1
+ environment:
+ default: prod
+ enum:
+ - prod
+ - staging
+ - dev
+```
+
+### Key fields
+
+| Field | Description |
+|-------|-------------|
+| `url` | The URL template with `{variable}` placeholders. |
+| `variables` | A map of variable names to their `default` value and optional `enum` of allowed values. |
+| `x-fern-default-url` | A static URL the SDK falls back to when no variables are provided. |
+| `x-server-name` | A human-readable name for the server entry used in the generated environments enum. |
+
+## Multiple base URLs
+
+Different endpoints can target different servers. For example, your main API and auth service may live at separate domains. Add a `servers` block directly on an endpoint to override the top-level server for that path.
+
+Use `x-fern-server-name` to give each endpoint-level server a distinct name so Fern can group them correctly.
+
+```yaml {5-6, 8} title="openapi.yml"
+paths:
+ /auth/token:
+ post:
+ servers:
+ - url: https://auth.{region}.example.com
+ x-fern-server-name: Auth
+ x-fern-default-url: https://auth.example.com
+ variables:
+ region:
+ default: us-east-1
+ enum:
+ - us-east-1
+ - us-west-2
+ - eu-west-1
+```
+
+When Fern detects multiple named servers, the generated SDK client resolves each endpoint to the correct base URL automatically.
+
+## Generated SDK behavior
+
+Fern generates an environments module that exposes the default URLs for each named server. SDK users can select a pre-defined environment or pass custom URL strings.
+
+
+
+
+The generated SDK exposes an `Environment` class:
+
+```python title="environment.py"
+class MyApiEnvironment:
+ REGIONAL_API_SERVER = {
+ "base": "https://api.example.com/v1",
+ "auth": "https://auth.example.com",
+ }
+```
+
+SDK users can override the base URL when constructing the client:
+
+```python
+from my_api import MyApiClient
+
+# Use the default environment
+client = MyApiClient()
+
+# Or provide a custom base URL
+client = MyApiClient(
+ base_url="https://api.us-west-2.staging.example.com/v1",
+)
+```
+
+
+
+
+The generated SDK exposes an environment enum and a builder method:
+
+```java
+import com.example.api.MyApiClient;
+
+// Use the default environment
+MyApiClient client = MyApiClient.builder().build();
+
+// Or provide a custom base URL
+MyApiClient client = MyApiClient.builder()
+ .url("https://api.us-west-2.staging.example.com/v1")
+ .build();
+```
+
+
+
+## Fern Definition
+
+If you use the Fern Definition format instead of OpenAPI, configure server URL templating in your `api.yml`:
+
+```yaml title="api.yml"
+environments:
+ RegionalApiServer:
+ urls:
+ Base: https://api.example.com/v1
+ Auth: https://auth.example.com
+ url-templates:
+ Base: https://api.{region}.{environment}.example.com/v1
+ Auth: https://auth.{region}.example.com
+ default-urls:
+ Base: https://api.example.com/v1
+ Auth: https://auth.example.com
+ variables:
+ Base:
+ - id: region
+ default: us-east-1
+ values:
+ - us-east-1
+ - us-west-2
+ - eu-west-1
+ - id: environment
+ default: prod
+ values:
+ - prod
+ - staging
+ - dev
+ Auth:
+ - id: region
+ default: us-east-1
+ values:
+ - us-east-1
+ - us-west-2
+ - eu-west-1
+default-environment: RegionalApiServer
+```
+
+## Language support
+
+Server URL templating is currently supported in the following generators:
+
+| Language | Supported |
+|----------|-----------|
+| Python | |
+| Java | |
diff --git a/fern/products/sdks/sdks.yml b/fern/products/sdks/sdks.yml
index 00543c91f..a23ad588f 100644
--- a/fern/products/sdks/sdks.yml
+++ b/fern/products/sdks/sdks.yml
@@ -245,6 +245,9 @@ navigation:
- page: Filter endpoints by audience
path: ./guides/filter-your-endpoints-audiences.mdx
slug: audiences
+ - page: Server URL templating
+ path: ./guides/server-url-templating.mdx
+ slug: server-url-templating
- section: Request behavior
slug: deep-dives
collapsed: true