diff --git a/fern/products/api-def/api-def.yml b/fern/products/api-def/api-def.yml index 1e579e6c9..846bc659c 100644 --- a/fern/products/api-def/api-def.yml +++ b/fern/products/api-def/api-def.yml @@ -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 diff --git a/fern/products/api-def/openapi-pages/extensions/overview.md b/fern/products/api-def/openapi-pages/extensions/overview.md index 76c1385b1..f2a56516a 100644 --- a/fern/products/api-def/openapi-pages/extensions/overview.md +++ b/fern/products/api-def/openapi-pages/extensions/overview.md @@ -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 | diff --git a/fern/products/api-def/openapi-pages/extensions/sdk-variables.mdx b/fern/products/api-def/openapi-pages/extensions/sdk-variables.mdx new file mode 100644 index 000000000..809316618 --- /dev/null +++ b/fern/products/api-def/openapi-pages/extensions/sdk-variables.mdx @@ -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. + + + SDK variables are supported in TypeScript (v2.6.3+), Python (v4.24.0+), and Java (v3.6.3+). Only string types are supported. + + +## 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: + + +```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 plants = client.listPlantsInZone(); +``` +