Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions fern/products/api-def/api-def.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ navigation:
- page: SDK method names
path: ./openapi-pages/extensions/method-names.mdx
slug: method-names
- page: SDK variables
path: ./openapi-pages/extensions/sdk-variables.mdx
- page: Tag display names
path: ./openapi-pages/extensions/tag-display-name.mdx
- page: Parameter names
Expand Down
1 change: 1 addition & 0 deletions fern/products/api-def/openapi-pages/extensions/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ The table below shows all available extensions and links to detailed documentati
| [`x-fern-ignore`](./ignoring-elements) | Skip reading specific endpoints or schemas |
| [`x-fern-sdk-method-name`](./method-names) | Customize SDK method names |
| [`x-fern-sdk-group-name`](./method-names) | Organize methods into SDK groups |
| [`x-fern-sdk-variables`](./sdk-variables) | Set common path parameters across all requests |
| [`x-fern-parameter-name`](./parameter-names) | Customize parameter variable names |
| [`x-fern-property-name`](./property-names) | Customize object property variable names |
| [`x-fern-type-name`](./schema-names) | Override auto-generated names for inline schemas |
Expand Down
78 changes: 78 additions & 0 deletions fern/products/api-def/openapi-pages/extensions/sdk-variables.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
---
title: SDK variables
description: Use `x-fern-sdk-variables` to set common path parameters across all requests
---

The `x-fern-sdk-variables` extension allows you to define variables that are set once during SDK client initialization and automatically used in path parameters across all endpoint calls. This is useful for common parameters like tenant IDs, organization IDs, or environment identifiers that appear in many endpoint paths.

<Note>
SDK variables are supported in TypeScript (v2.6.3+), Python (v4.24.0+), and Java (v3.6.3+). Only string types are supported.
</Note>

## Configuration

Define variables at the document level using `x-fern-sdk-variables`, then mark path parameters as variables using `x-fern-sdk-variable`:

```yaml {1-7,17,23} title="openapi.yml"
x-fern-sdk-variables:
gardenId:
type: string
description: The unique identifier for your garden
zoneId:
type: string
description: The zone within the garden

paths:
/gardens/{gardenId}/zones/{zoneId}/plants:
get:
operationId: list_plants_in_zone
parameters:
- name: gardenId
in: path
required: true
x-fern-sdk-variable: gardenId
schema:
type: string
- name: zoneId
in: path
required: true
x-fern-sdk-variable: zoneId
schema:
type: string
```

## SDK usage

Variables become required constructor parameters instead of being passed to individual method calls:

<CodeBlocks>
```typescript {2-3}
const client = new PlantClient({
gardenId: "garden_123",
zoneId: "zone_456",
apiKey: "your-api-key"
});

const plants = await client.listPlantsInZone();
```

```python {2-3}
client = PlantClient(
garden_id="garden_123",
zone_id="zone_456",
api_key="your-api-key"
)

plants = client.list_plants_in_zone()
```

```java {2-3}
PlantClient client = PlantClient.builder()
.gardenId("garden_123")
.zoneId("zone_456")
.apiKey("your-api-key")
.build();

List<Plant> plants = client.listPlantsInZone();
```
</CodeBlocks>
Loading