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