Octri

Client shape

Client shape is what a caller actually types. These settings decide whether your SDK reads like client.users.list() or listUsers(), and whether arguments arrive as an object or positionally.

You'll find them in SDK Studio → Customize SDK Features. Each one shows a live code preview, so you can see the effect before you build.

Client style

Client style and Namespace together decide the top-level surface. These four shapes are from generated TypeScript.

typescript
import { Acme } from "acme-api";

const client = new Acme({ auth: { bearer: process.env.API_TOKEN! } });
const user = await client.users.get({ id: "usr_1" });

A client you create, with operations grouped by resource. The default, and the surface most widely used SDKs ship. Set Client style to class-based and Namespace to tags or path.

Choose a client if callers might need two configurations

Both function styles share one configuration across the process. A caller who talks to two accounts or two environments at once needs a client they can create twice.

Namespace

Namespace decides how operations are grouped once the surface is namespaced.

OptionResult
tagsGroup by your OpenAPI tags. users.list(). The default
pathGroup by URL path segments. api.users.list()
noneNo grouping. Every operation is a top-level call
Tags beat paths for most APIs

Tags are authored deliberately; paths are an accident of routing. If your spec tags its operations, tags gives better group names. path is the fallback when tags are sparse.

Method naming

Method naming only matters under a namespace.

OptionResult
shortStrips the namespace word so it isn't repeated. getUser tagged users becomes users.get(). The default
fullKeeps the operation ID intact. users.getUser()

Reach for full when your operation ids are already well named and stripping them loses meaning.

Both options read from your operation ids

Every naming setting here is downstream of the operationId in your spec, so a clear, verb-first id is worth more than any option on this page. Ten habits for writing great OpenAPI specs starts there.

Argument style

Argument style decides how parameters reach a method.

typescript
await client.users.get({ id: "usr_1" });

All arguments in one options object. Self-documenting, order-free, and adding an optional parameter later isn't a breaking change. The default for TypeScript and Java; the other languages default to positional, where a wide operation is promoted to a request object automatically so you only pay for the ceremony where it buys something.

Folder structure

Folder structure decides how generated source is laid out on disk. It changes nothing at the call site, only what someone reading the SDK repo sees.

OptionLayout
flatOne source directory, with methods grouped into resource modules
tagsA folder per OpenAPI tag. The default
pathA folder per URL path segment

Default headers

Some APIs refuse a request without a fixed header, such as an API version. Add these under Headers in the SDK settings, and every generated client sends them on every request, in all ten languages.

A header set by the caller or by the endpoint takes priority over a default header of the same name.

Default headers ship in your package

Anyone who installs the SDK can read these values, so don't use them for secrets. Authorization, Proxy-Authorization and Cookie aren't accepted here. Set up authentication for credentials instead.

Apply to every language

Most of these settings can differ per language, and Studio has an Apply to every language control next to each one.

Set it once, apply to all, then override the exceptions

Client style and namespace usually want to be consistent across languages so your docs and examples match. HTTP engine and data-model style are language-specific by nature and shouldn't be forced.

Precedence is narrowest-first: a per-endpoint override beats a per-language setting, which beats the project default.

Per-endpoint overrides

Selecting an endpoint in Studio gives you controls that apply to just that method:

Output detail

Three settings control how much the generated source explains itself.

Doc commentschoice per languagedefault: full

full documents every method and field, which powers editor tooltips. minimal makes leaner files.

outputByLang.<language>.docComments

File headerchoicedefault: include

include marks every file with a DO NOT EDIT banner. omit removes it, and needs the Enterprise plan.

Keep it on when the SDK lives in a repo where someone might try to hand-edit it. Go's tools also recognize the banner as marking generated code.

fileHeader

Usage examplechoice per languagedefault: full

full shows setup and the call in generated samples. concise shows the call alone.

outputByLang.<language>.usageExample

From the CLI

octri sdk settings set clientStyle functions changes one value. The keys are in the settings reference, and the command in SDK commands.