Multi-Language
Go, TypeScript, and Python — idiomatic style per language, cursor pagination, retry logic, and bearer auth.
A typical SaaS API publishing three official SDKs. Each language gets idiomatic naming conventions, the right enum style, and appropriate optional field handling — all from a single file.
opensdk: "1.0.0"
openapi:
$ref: "./spec/openapi.yaml"
version: "3.1"
sdk:
name: "acme-api"
version: "2.1.0"
license: "Apache-2.0"
homepage: "https://docs.acme.com/sdk"
repository: "https://github.com/acme/acme-sdks"
languages:
- language: go
package:
name: "github.com/acme/acme-go"
registry: pkg.go.dev
style:
naming: snake_case
modelNaming: PascalCase
optionalStyle: pointer
dateStyle: native
features:
auth: bearer
retries:
enabled: true
maxAttempts: 3
backoff: exponential
retryOn: [429, 500, 502, 503, 504]
pagination:
strategy: cursor
iteratorHelper: true
context: true
operationOverrides:
- operationId: getInternalStatus
ignore: true
- operationId: createWidget
methodName: NewWidget
additionalProperties:
generateInterfaces: true
- language: typescript
package:
name: "@acme/api"
registry: npm
style:
naming: camelCase
enumStyle: string-union
optionalStyle: question-mark
dateStyle: string
features:
auth: bearer
retries:
enabled: true
maxAttempts: 3
backoff: exponential
pagination:
strategy: cursor
iteratorHelper: true
streaming: true
webhooks: true
mocking: true
additionalProperties:
usePromises: true
treeshakable: true
- language: python
package:
name: "acme-api"
registry: pypi
style:
naming: snake_case
modelNaming: PascalCase
enumStyle: string-enum
optionalStyle: null-union
dateStyle: native
features:
auth: bearer
retries:
enabled: true
maxAttempts: 3
backoff: exponential
pagination:
strategy: cursor
iteratorHelper: true
additionalProperties:
asyncSupport: true
pydanticVersion: "v2"
codegenRules:
validation:
- rule: no-unnamed-operations
severity: error
- rule: required-tags
severity: error
- rule: no-inline-schemas
severity: warn
breakingChangePolicy: major-version-bump
outputStructure: by-tag