---
title: "Code Sample Generators"
description: "Code sample generators translate normalized API request data, headers, cookies, and payloads into executable client code snippets across multiple programming languages and scripting environments. B..."
last_updated: "2026-10-12T07:53:59.986642+00:00"
canonical_url: "https://www.doc0.dev/docs/e8872a72-1909-479c-b585-dc74c6e26726/technical/api-documentation/code-sample-generators"
---

<details>
<summary>Relevant source files</summary>

The following files were used as context for generating this wiki page:

- [packages/openapi/src/requests/generators/all.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/all.ts)
- [packages/openapi/src/requests/generators/curl.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/curl.ts)
- [packages/openapi/src/requests/generators/csharp.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/csharp.ts)
- [packages/openapi/src/ui/operation/usage-tabs.tsx](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/ui/operation/usage-tabs.tsx)
- [packages/openapi/src/requests/generators/python.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/python.ts)
- [packages/openapi/src/requests/generators/go.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/go.ts)
- [packages/api-docs/src/schema/sample.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/api-docs/src/schema/sample.ts)
- [packages/openapi/src/ui/operation/index.tsx](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/ui/operation/index.tsx)
- [packages/openapi/src/ui/base.tsx](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/ui/base.tsx)
- [packages/openapi/src/requests/generators/index.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/index.ts)
- [packages/openapi/src/requests/generators/javascript.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/javascript.ts)
- [packages/openapi/src/requests/media/adapter.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts)
- [packages/api-docs/src/codegen.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/api-docs/src/codegen.ts)
- [packages/openapi/src/ui/operation/response-tabs.tsx](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/ui/operation/response-tabs.tsx)
- [packages/openapi/src/requests/generators/java.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/java.ts)
- [packages/openapi/src/utils/get-example-requests.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts)
- [packages/openapi/src/server/index.tsx](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/server/index.tsx)
- [packages/openapi/src/ui/operation/request-tabs.tsx](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/ui/operation/request-tabs.tsx)
- [packages/asyncapi/src/server/index.tsx](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/asyncapi/src/server/index.tsx)
- [packages/openapi/src/scalar/client.tsx](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/scalar/client.tsx)
- [packages/asyncapi/src/ui/operation/message-examples.tsx](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/asyncapi/src/ui/operation/message-examples.tsx)
- [packages/openapi/src/generate-file.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/generate-file.ts)
- [packages/openapi/src/utils/pages/to-text.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/pages/to-text.ts)
- [packages/asyncapi/src/utils/get-example-messages.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/asyncapi/src/utils/get-example-messages.ts)
- [packages/openapi/src/index.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/index.ts)
- [packages/cli/src/commands/export-epub.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/cli/src/commands/export-epub.ts)
- [packages/asyncapi/src/utils/pages/to-text.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/asyncapi/src/utils/pages/to-text.ts)
- [packages/create-app/scripts/sync.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/create-app/scripts/sync.ts)
- [packages/openapi/src/utils/schema.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/schema.ts)
- [packages/doc-gen/src/remark-docgen.ts](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/doc-gen/src/remark-docgen.ts)
</details>

## Overview

Code sample generators translate normalized API request data, headers, cookies, and payloads into executable client code snippets across multiple programming languages and scripting environments. By transforming parsed OpenAPI operation objects and media adapters into formatted target syntax, the generator suite powers interactive API documentation tabs and dynamic code preview widgets.

Sources: [packages/openapi/src/requests/generators/all.ts:9-16](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/all.ts#L9-L16), [packages/openapi/src/ui/operation/usage-tabs.tsx:137-181](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/ui/operation/usage-tabs.tsx#L137-L181)

## Code Generator Registry

### Registry Interface and Types

The registry relies on types imported from `@fumadocs/api-docs/codegen`, instantiating them with specific type arguments for OpenAPI request payloads. `CodeUsageGeneratorRegistry` is defined as a registry mapping language identifiers to generator functions that accept `RequestData & { url: string }` and a context containing `mediaAdapters` (a record of string keys to `MediaAdapter` objects) and a `custom` configuration property.

```typescript
export type CodeUsageGeneratorRegistry = Shared.CodeUsageGeneratorRegistry<
  RequestData & { url: string },
  { mediaAdapters: Record<string, MediaAdapter>; custom: unknown }
>;
```
Sources: [packages/openapi/src/requests/generators/index.ts:35-38](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/index.ts#L35-L38)

`CodeUsageGenerator` and `InlineCodeUsageGenerator` represent single generator functions for specified programming languages, where the inline variant permits generic customization typing for the `custom` context field.

```typescript
export type CodeUsageGenerator = Shared.CodeUsageGenerator<
  RequestData & { url: string },
  { mediaAdapters: Record<string, MediaAdapter>; custom: unknown }
>;

export type InlineCodeUsageGenerator<T = unknown> = Shared.InlineCodeUsageGenerator<
  RequestData & { url: string },
  { mediaAdapters: Record<string, MediaAdapter>; custom: T }
>;
```
Sources: [packages/openapi/src/requests/generators/index.ts:43-54](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/index.ts#L43-L54)

`createCodeUsageGeneratorRegistry` wraps the shared factory function to produce new registry instances, optionally accepting an inherited registry parameter for scoping or fallback behaviors.

```typescript
export function createCodeUsageGeneratorRegistry(
  inherit?: CodeUsageGeneratorRegistry,
): CodeUsageGeneratorRegistry {
  return Shared.createCodeUsageGeneratorRegistry(inherit);
}
```
Sources: [packages/openapi/src/requests/generators/index.ts:56-60](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/index.ts#L56-L60)

> [!NOTE]
> `CodeUsageGeneratorFn` explicitly types generator callbacks as functions taking `RequestData & { url: string }` and a context record, returning a generated string snippet.
> Sources: [packages/openapi/src/requests/generators/index.ts:62-65](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/index.ts#L62-L65)

### Default Generator Registration

The `registerDefault` function populates a `CodeUsageGeneratorRegistry` instance by binding default language generator modules to specific string keys. It registers six built-in target generators before returning the modified registry instance.

| Language Key | Generator Module | Target Output |
| :--- | :--- | :--- |
| `curl` | `curl` | cURL CLI command snippet |
| `js` | `javascript` | JavaScript fetch or client code |
| `go` | `go` | Go HTTP request snippet |
| `python` | `python` | Python requests snippet |
| `java` | `java` | Java HTTP client snippet |
| `csharp` | `csharp` | C# HTTP client snippet |

Sources: [packages/openapi/src/requests/generators/all.ts:2-16](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/all.ts#L2-L16)

```typescript
export function registerDefault(registry: CodeUsageGeneratorRegistry) {
  registry.add('curl', curl);
  registry.add('js', javascript);
  registry.add('go', go);
  registry.add('python', python);
  registry.add('java', java);
  registry.add('csharp', csharp);
  return registry;
}
```
Sources: [packages/openapi/src/requests/generators/all.ts:9-16](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/all.ts#L9-L16)

> [!TIP]
> When building custom documentation pipelines alongside [OpenAPI Document Generation](https://www.doc0.dev/docs/e8872a72-1909-479c-b585-dc74c6e26726/technical/api-documentation/openapi-document-generation), pass an existing registry to `createCodeUsageGeneratorRegistry` as an inheritance argument to extend default language generators with domain-specific targets.
> Sources: [packages/openapi/src/requests/generators/index.ts:56-60](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/index.ts#L56-L60)

## Request Data Extraction

### Example Resolution and Parameter Locations

Extracting and preparing request information for code sample generation involves resolving parameters across operations and path items, picking schema examples, and sampling body contents. The process starts by gathering parameters from both `operation.parameters` and `pathItem.parameters`, and identifying the preferred request media type via `getPreferredType`.
Sources: [packages/openapi/src/utils/get-example-requests.ts:36-39](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L36-L39)

```typescript
export function getPreferredType(body: Record<string, unknown>): string | undefined {
  if ('application/json' in body) return 'application/json';

  return Object.keys(body)[0];
}
```
Sources: [packages/openapi/src/utils/schema.ts:8-12](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/schema.ts#L8-L12)

When constructing example requests through `getExampleRequests`, the utility checks whether explicit body examples are defined under `bodyOfType.examples`. If present, each entry generates a distinct `ExampleRequestItem` containing its assigned identifier, summary or key name, optional description, raw request data, and encoded request data produced by `encodeRequestData`. If no named examples exist, a default example item is created using schema sampling or fallback heuristics.
Sources: [packages/openapi/src/utils/get-example-requests.ts:41-76](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L41-L76)

Parameters are iterated and assigned to distinct transport containers in `getRequestData` based on their `in` property value.
Sources: [packages/openapi/src/utils/get-example-requests.ts:99-130](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L99-L130)

| Parameter Location (`param.in`) | Target Container Object | Source Lines |
| :--- | :--- | :--- |
| `cookie` | `result.cookie[param.name!]` | [packages/openapi/src/utils/get-example-requests.ts:118-120](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L118-L120) |
| `header` | `result.header[param.name!]` | [packages/openapi/src/utils/get-example-requests.ts:121-123](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L121-L123) |
| `query` | `result.query[param.name!]` | [packages/openapi/src/utils/get-example-requests.ts:124-126](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L124-L126) |
| default (path) | `result.path[param.name!]` | [packages/openapi/src/utils/get-example-requests.ts:127-129](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L127-L129) |

Sources: [packages/openapi/src/utils/get-example-requests.ts:117-130](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L117-L130)

> [!WARNING]
> If a parameter value is undefined but marked as `required`, `getRequestData` attempts to generate a mock value using `@fumadocs/api-docs/schema/sample`. If neither a schema nor content definition exists for a required parameter, an explicit Error is thrown detailing the missing parameter name and media type.
> Sources: [packages/openapi/src/utils/get-example-requests.ts:102-114](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L102-L114)

### Example Extraction Helpers

The helper function `pickExample` inspects input schemas and media objects for static examples or nested content objects, prioritizing explicit `example` definitions over mapped examples or sampled media types.
Sources: [packages/openapi/src/utils/schema.ts:32-51](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/schema.ts#L32-L51)

```typescript
export function pickExample(value: ExampleLike): unknown | undefined {
  if (value.example !== undefined) {
    return value.example;
  }

  if (value.content) {
    const type = getPreferredType(value.content);
    const content = type ? value.content[type] : undefined;

    if (type && content) {
      const out = value.examples?.[type].value ?? pickExample(content);
      if (out !== undefined) return out;
    }
  }

  if (value.examples) {
    const examples = Object.values(value.examples);
    if (examples.length > 0) return examples[0].value;
  }
}
```
Sources: [packages/openapi/src/utils/schema.ts:32-51](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/schema.ts#L32-L51)

> [!NOTE]
> When sampling request bodies, read-only properties are skipped when the HTTP method is not `get`, whereas write-only properties are skipped specifically when the method is `get`. Non-required properties are skipped by default during sampling.
> Sources: [packages/openapi/src/utils/get-example-requests.ts:143-147](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/utils/get-example-requests.ts#L143-L147)

## Media Type Adapters

### Encoding Handlers and Supported Formats

Fumadocs OpenAPI uses media type adapters to encode request body payloads into standard `BodyInit` objects for runtime requests and to translate body structures into language-specific initialization snippets. Each adapter implements the `MediaAdapter` interface, which mandates an `encode` function and a `generateExample` function receiving a `MediaContext` object.
Sources: [packages/openapi/src/requests/media/adapter.ts:33-58](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L33-L58)

The `defaultAdapters` record supports five standard media types as well as raw octet streams.
Sources: [packages/openapi/src/requests/media/adapter.ts:60-219](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L60-L219)

| Media Type | Encoding Behavior | Example Generation Behavior | Source Lines |
| :--- | :--- | :--- | :--- |
| `application/json` | Serializes body via `JSON.stringify(data.body)` | Delegates to `str(data.body, 'application/json', ctx)` | [packages/openapi/src/requests/media/adapter.ts:61-68](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L61-L68) |
| `application/xml` | Converts object via `js2xml` with compact formatting and 2-space indentation | Delegates to `str(data.body, 'application/xml', ctx)` | [packages/openapi/src/requests/media/adapter.ts:69-79](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L69-L79) |
| `application/x-ndjson` | Maps array items to newline-delimited JSON strings or single stringify | Delegates to `str(data.body, 'application/x-ndjson', ctx)` | [packages/openapi/src/requests/media/adapter.ts:80-91](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L80-L91) |
| `application/x-www-form-urlencoded` | Constructs `URLSearchParams` from object entries | Returns `URLSearchParams` JS instantiation or delegates to `str` | [packages/openapi/src/requests/media/adapter.ts:92-111](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L92-L111) |
| `multipart/form-data` | Appends or sets `File`, `Blob`, array items, or stringified objects into `FormData` | Builds language-specific multipart builders for JS, Go, Java, C#, and Python | [packages/openapi/src/requests/media/adapter.ts:112-209](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L112-L209) |
| `application/octet-stream` | Casts `data.body` directly as `BodyInit` | Returns `undefined` (not supported) | [packages/openapi/src/requests/media/adapter.ts:210-218](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L210-L218) |

Sources: [packages/openapi/src/requests/media/adapter.ts:60-219](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L60-L219)

> [!CAUTION]
> The `application/x-www-form-urlencoded` encoder validates that `data.body` is an object type, throwing an explicit `Error` if non-object inputs are passed. Similarly, the `multipart/form-data` encoder checks for valid non-null object structures before iterating over properties.
> Sources: [packages/openapi/src/requests/media/adapter.ts:94-95](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L94-L95), [packages/openapi/src/requests/media/adapter.ts:117-119](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L117-L119)

### Language Code Generation and Contexts

The `str` helper formats string-serializable bodies across target programming languages by inspecting `ctx.lang`. Supported context interfaces include `GoContext`, `JavaScriptContext`, `JavaContext`, and `CSharpContext`, which provide `addImport` utilities to inject required packages.
Sources: [packages/openapi/src/requests/media/adapter.ts:13-38](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L13-L38), [packages/openapi/src/requests/media/adapter.ts:221-258](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L221-L258)

```typescript
if (ctx.lang === 'js') {
  if (mediaType === 'application/json') {
    return `const body = JSON.stringify(${JSON.stringify(init, null, 2)})`;
  }
  return `const body = ${backtickQuote(inputToString(init, mediaType))}`;
}

if (ctx.lang === 'python') {
  return `body = ${tripleDoubleQuote(inputToString(init, mediaType))}`;
}

if (ctx.lang === 'go') {
  const { addImport } = ctx as GoContext;
  addImport('strings');
  return `body := strings.NewReader(${backtickQuote(inputToString(init, mediaType))})`;
}

if (ctx.lang === 'java') {
  const { addImport } = ctx as JavaContext;
  addImport('java.net.http.HttpRequest.BodyPublishers');
  return `var body = BodyPublishers.ofString(${tripleDoubleQuote(inputToString(init, mediaType))});`;
}

if (ctx.lang === 'csharp') {
  const input = `\n${inputToString(init, mediaType)}\n`;

  return `var body = new StringContent(${tripleDoubleQuote(input)}, Encoding.UTF8, "${mediaType}");`;
}
```
Sources: [packages/openapi/src/requests/media/adapter.ts:230-257](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L230-L257)

> [!TIP]
> When generating Go examples for `multipart/form-data`, the adapter automatically invokes `addImport('mime/multipart')` and `addImport('bytes')` to register necessary buffer and multipart writer dependencies in the output scope.
> Sources: [packages/openapi/src/requests/media/adapter.ts:179-183](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L179-L183)

> [!WARNING]
> Null, undefined, and NaN properties within `multipart/form-data` request objects are explicitly skipped during `FormData` iteration, preventing invalid literal conversions.
> Sources: [packages/openapi/src/requests/media/adapter.ts:124](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/media/adapter.ts#L124)

## Shell and Scripting Generators

### cURL Invocation Generation

The `curl` code usage generator builds standard POSIX shell commands by assembling HTTP methods, target URLs, request headers, cookies, and payload arguments. The generator initializes the command array with the upper-case HTTP method and target URL, iterates over header entries to append `-H` flags, and serializes cookie parameters with `--cookie` flags using double quotes.
Sources: [packages/openapi/src/requests/generators/curl.ts:4-22](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/curl.ts#L4-L22)

```typescript
  if (data.body && data.bodyMediaType === 'multipart/form-data') {
    if (typeof data.body !== 'object') throw new Error('[CURL] request body must be an object.');

    for (const [key, value] of Object.entries(data.body)) {
      s.push(`-F ${key}=${doubleQuote(inputToString(value))}`);
    }
  } else if (data.body && data.bodyMediaType) {
    const escaped = singleQuote(
      inputToString(
        data.body,
        // @ts-expect-error -- assume the body media type is supported
        data.bodyMediaType,
      ),
    );

    s.push(`-H "Content-Type: ${data.bodyMediaType}"`);
    s.push(`-d ${escaped}`);
  }

  return s.flatMap((v, i) => indent(v, i > 0 ? 1 : 0)).join(' \\\n');
},
```
Sources: [packages/openapi/src/requests/generators/curl.ts:23-43](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/curl.ts#L23-L43)

> [!CAUTION]
> When processing `multipart/form-data` request bodies, the cURL generator verifies that `data.body` is an object type and throws an explicit `[CURL] request body must be an object.` error if non-object inputs are passed.
> Sources: [packages/openapi/src/requests/generators/curl.ts:23-25](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/curl.ts#L23-L25)

### JavaScript Fetch Generation

The `javascript` code usage generator constructs browser-compatible `fetch()` API snippets, managing request configuration options, headers, cookies, and media type adaptations. It collects configuration properties in an internal `Map` and populates a header record with content types, custom headers, and combined cookie strings separated by semicolons.
Sources: [packages/openapi/src/requests/generators/javascript.ts:5-26](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/javascript.ts#L5-L26)

```typescript
  if (Object.keys(headers).length > 0) {
    options.set('headers', JSON.stringify(headers, null, 2));
  }

  let body: string | undefined;
  if (data.body && data.bodyMediaType) {
    const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);
    body = adapter?.generateExample(data as { body: unknown }, {
      lang: 'js',
      addImport(from, name) {
        s.unshift(`import { ${name} } from "${from}"`);
      },
    });
  }

  if (body) {
    s.push(body);
    options.set('body', 'body');
  }

  const params = [doubleQuote(data.url)];
  if (options.size > 0) {
    const str = Array.from(options.entries())
      .map(([k, v]) => indent(k === v ? k : `${k}: ${v}`))
      .join(',\n');

    params.push(`{\n${str}\n}`);
  }

  s.push(`fetch(${params.join(', ')})`);

  return s.join('\n\n');
},
```
Sources: [packages/openapi/src/requests/generators/javascript.ts:27-59](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/javascript.ts#L27-L59)

> [!TIP]
> The JavaScript generator resolves media adapters for request bodies when `data.bodyMediaType` is present, supporting dynamic import injection into the snippet scope (such as module imports for form data or specialized binary parsers) via the `addImport` callback.
> Sources: [packages/openapi/src/requests/generators/javascript.ts:31-40](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/javascript.ts#L31-L40)

## Compiled Language Generators

### Go, C#, and Java Client Snippets

The compiled language generators construct strongly typed HTTP client snippets for Go, C#, and Java, mapping request configurations, headers, cookies, and media type adapters into native execution patterns. The Go generator populates an `imports` array with `fmt`, `net/http`, and `io/ioutil`, maps custom headers and cookie strings into a `req.Header` collection, and builds the request using `http.NewRequest` with `http.DefaultClient.Do`.
Sources: [packages/openapi/src/requests/generators/go.ts:5-62](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/go.ts#L5-L62)

| Generator | Language Tag | Default Imports / Namespaces | Core Client Class |
| :--- | :--- | :--- | :--- |
| **Go** | `go` | `fmt`, `net/http`, `io/ioutil` | `http.DefaultClient` |
| **C#** | `csharp` | `System`, `System.Net.Http`, `System.Text` | `HttpClient` |
| **Java** | `java` | `java.net.URI`, `java.net.http.HttpClient`, `java.net.http.HttpRequest`, `java.net.http.HttpResponse`, `java.net.http.HttpResponse.BodyHandlers`, `java.time.Duration` | `HttpClient` |

Sources: [packages/openapi/src/requests/generators/go.ts:9](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/go.ts#L9), [packages/openapi/src/requests/generators/csharp.ts:10](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/csharp.ts#L10), [packages/openapi/src/requests/generators/java.ts:11-18](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/java.ts#L11-L18)

> [!NOTE]
> The C# generator transforms incoming HTTP methods by capitalizing the first character, lowercasing the remainder, and appending `Async` (e.g., `GetAsync`, `PostAsync`) to match `HttpClient` method signatures.
> Sources: [packages/openapi/src/requests/generators/csharp.ts:57-63](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/csharp.ts#L57-L63)

### Request Body and Media Adaptation

When a request body and `bodyMediaType` are present, each compiled generator resolves a media adapter to output payload examples and inject language-specific package imports into the snippet scope via the `addImport` callback. The Java generator configures an `HttpClient` builder with a 10-second connect timeout using `Duration.ofSeconds(10)`, constructs an `HttpRequest` via `HttpRequest.newBuilder()`, appends headers and cookie strings, and invokes the dynamic HTTP method builder.
Sources: [packages/openapi/src/requests/generators/java.ts:21-72](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/java.ts#L21-L72)

```typescript
// Add response handling
s.push('try {');
s.push(
  indent(
    'HttpResponse<String> response = client.send(requestBuilder.build(), BodyHandlers.ofString());',
  ),
);
s.push(indent('System.out.println("Status code: " + response.statusCode());'));
s.push(indent('System.out.println("Response body: " + response.body());'));
s.push('} catch (Exception e) {');
s.push(indent('e.printStackTrace();'));
s.push('}');

```
Sources: [packages/openapi/src/requests/generators/java.ts:74-86](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/java.ts#L74-L86)

> [!WARNING]
> The Java generator wraps client execution inside a `try-catch` block that catches general `Exception` instances and outputs stack traces via `e.printStackTrace();` during response handling.
> Sources: [packages/openapi/src/requests/generators/java.ts:75-86](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/java.ts#L75-L86)

## Python Requests Generation

### Constructing Python Requests Syntax

The Python requests generator builds executable HTTP request snippets using the `requests` library, incorporating dynamic method calls, URL strings, and dictionary literals for headers and cookies. The generator initializes an `imports` set with `requests`, evaluates any request body and media type adapter, and appends keyword arguments to a `params` array containing the uppercase HTTP method and target URL.
Sources: [packages/openapi/src/requests/generators/python.ts:5-27](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/python.ts#L5-L27)

| Parameter / Component | Data Structure | Python Output Format | Source Package Import Added |
| :--- | :--- | :--- | :--- |
| **Method & URL** | `data.method`, `data.url` | `["GET", url]` | `requests` |
| **Request Body** | `data.body`, `bodyMediaType` | `data = body` | None (handled by adapter) |
| **Headers** | `Record<string, string>` | `headers = { ... }` | None |
| **Cookies** | `Record<string, string>` | `cookies = { ... }` | None |
| **Date Field** | `Date` instance | `datetime.datetime(...)` | `datetime` |

Sources: [packages/openapi/src/requests/generators/python.ts:9-46](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/python.ts#L9-L46), [packages/openapi/src/requests/generators/python.ts:72-74](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/python.ts#L72-L74)

> [!NOTE]
> When request headers or cookies contain entries, the generator serializes them into indented dictionary literals via `generatePythonObject` before appending them to the `requests.request` parameter list.
> Sources: [packages/openapi/src/requests/generators/python.ts:29-46](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/python.ts#L29-L46)

### Object Serialization and Type Mapping

The `generatePythonObject` utility recursively converts arbitrary JavaScript values into valid Python syntax literals, managing null, boolean, numeric, string, array, date, and object types.
Sources: [packages/openapi/src/requests/generators/python.ts:60-82](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/python.ts#L60-L82)

```typescript
if (v === null) {
  return 'None';
} else if (typeof v === 'boolean') {
  return v ? 'True' : 'False';
} else if (typeof v === 'string') {
  return doubleQuote(v);
} else if (typeof v === 'number') {
  return v.toString();
} else if (Array.isArray(v)) {
  const items = v.map((item) => generatePythonObject(item, imports));
  return `[${items.join(', ')}]`;
} else if (v instanceof Date) {
  imports.add('datetime');
  return `datetime.datetime(${v.getFullYear()}, ${v.getMonth() + 1}, ${v.getDate()}, ${v.getHours()}, ${v.getMinutes()}, ${v.getSeconds()}, ${v.getMilliseconds()})`;
} else if (typeof v === 'object') {
  const entries = Object.entries(v).map(
    ([key, value]) => `  ${doubleQuote(key)}: ${generatePythonObject(value, imports)}`,
  );
  return `{\n${entries.join(', \n')}\n}`;
} else {
  throw new Error(`Unsupported type: ${typeof v}`);
}
```
Sources: [packages/openapi/src/requests/generators/python.ts:61-82](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/python.ts#L61-L82)

> [!WARNING]
> Encountering an unsupported JavaScript type during object serialization throws an immediate error with the message `Unsupported type: ${typeof v}`, halting snippet generation.
> Sources: [packages/openapi/src/requests/generators/python.ts:80-82](https://github.com/blade47/fumadocs/blob/a9f988897e7dc4ef3d62b2865d80da2f5607701e/packages/openapi/src/requests/generators/python.ts#L80-L82)

## Related

- [OpenAPI Interactive UI](https://www.doc0.dev/docs/e8872a72-1909-479c-b585-dc74c6e26726/technical/api-documentation/openapi-interactive-ui)


## Sitemap

See the full [sitemap](https://www.doc0.dev/docs/e8872a72-1909-479c-b585-dc74c6e26726/llms.txt) for all pages in this wiki.
