Skip to content

soxom.yaml Reference

Complete reference for all soxom.yaml configuration options.

version: "1.0" # Required
sdk: {} # Required
spec: {} # Required
targets: [] # Required
resources: {} # Optional
pagination: {} # Optional
authentication: {} # Optional
retries: {} # Optional
timeouts: {} # Optional
streaming: {} # Optional

Configuration file version.

PropertyTypeRequiredDefault
versionstringYes-
version: "1.0"

SDK package metadata.

PropertyTypeRequiredDefaultDescription
namestringYes-Package base name
versionstringYes-Semantic version
descriptionstringNo-Package description
sdk:
name: my-sdk
version: 1.0.0
description: SDK for My API

OpenAPI specification source.

PropertyTypeRequiredDefaultDescription
pathstringYes*-Local path to spec
originstringNo-Remote URL for spec

*Either path or origin required.

spec:
path: ./openapi.yaml
origin: https://api.example.com/openapi.yaml

Target languages for SDK generation.

targets:
- typescript
- python
- go
- java
PropertyTypeDefaultDescription
package_namestringkebab-case of sdk.namenpm package name. Use a scoped name (e.g. @acme/sdk) for organization-scoped packages.
module_formatstringesmesm or cjs. Controls the package.json#type field and which conditional exports are emitted.
generator_versionstringlatestPinned generator version (e.g. "0.1.0").
targets:
typescript:
package_name: "@acme/sdk"
module_format: esm
generator_version: "0.1.0"
PropertyTypeDefaultDescription
package_namestringsdk.namePyPI package name
min_versionstring"3.8"Minimum Python version
targets:
python:
package_name: acme-sdk
min_version: "3.9"
PropertyTypeDefaultDescription
modulestring-Go module path
targets:
go:
module: github.com/acme/sdk-go
PropertyTypeDefaultDescription
group_idstringcom.exampleMaven group ID
artifact_idstringsdk.nameMaven artifact ID
targets:
java:
group_id: com.acme
artifact_id: acme-sdk
PropertyTypeDefaultDescription
package_idstringPascalCase form of sdk.nameNuGet package ID
root_namespacestringsame as package_idRoot C# namespace
target_frameworksstring[][netstandard2.0, net8.0, net9.0]Target framework monikers
generator_versionstringlatestPinned generator version
targets:
csharp:
package_id: Acme.Sdk
root_namespace: Acme.Sdk
target_frameworks: [netstandard2.0, net8.0, net9.0]
generator_version: "0.1.0"

SDK structure and method mapping.

PropertyTypeDescription
$clientobjectMethods on client root
<name>objectResource namespace
PropertyTypeDescription
methodsobjectMethod name → operation mapping
modelsarrayAssociated schema names
subresourcesobjectNested resources
resources:
$client:
methods:
health: get /health
users:
models:
- User
- UserCreate
methods:
list: get /users
create: post /users
get: get /users/{id}
update: put /users/{id}
delete: delete /users/{id}
subresources:
settings:
methods:
get: get /users/{id}/settings
update: put /users/{id}/settings

Pagination configuration.

PropertyTypeDefaultDescription
default_typestringcursorcursor or offset
schemesobject-Pagination scheme definitions
pagination:
default_type: cursor
schemes:
cursor:
cursor:
request_param: after
response_property: next_cursor
limit:
request_param: limit
default: 20
max: 100
has_more:
response_property: has_more
PropertyTypeDescription
cursor.request_paramstringQuery parameter name
cursor.response_propertystringResponse field with next cursor
limit.request_paramstringLimit query parameter
limit.defaultintegerDefault page size
limit.maxintegerMaximum page size
has_more.response_propertystringBoolean field for more pages
pagination:
schemes:
offset:
offset:
request_param: offset
limit:
request_param: limit
default: 20
total:
response_property: total

Authentication configuration.

PropertyTypeDefaultDescription
defaultstring-Default auth method
env_varsobject-Environment variable mappings
oauth2object-OAuth 2.0 specific settings
authentication:
default: bearer
env_vars:
bearer:
token: ACME_API_TOKEN
api_key:
key: ACME_API_KEY
basic:
username: ACME_USERNAME
password: ACME_PASSWORD
oauth2:
client_id: ACME_CLIENT_ID
client_secret: ACME_CLIENT_SECRET
oauth2:
token_url: https://api.example.com/oauth/token
auto_refresh: true
default_scopes:
- read
- write

Retry configuration.

PropertyTypeDefaultDescription
enabledbooleantrueEnable retries
max_attemptsinteger3Maximum retry attempts
backoffobject-Backoff settings
retry_onarraySee belowStatus codes to retry
retry_connection_errorsbooleantrueRetry on connection errors
respect_retry_afterbooleantrueHonor Retry-After header
PropertyTypeDefaultDescription
initial_interval_msinteger500Initial delay
max_interval_msinteger30000Maximum delay
multipliernumber2.0Exponential multiplier
jitternumber0.25Randomization factor
retry_on:
- 408 # Request Timeout
- 429 # Too Many Requests
- 500 # Internal Server Error
- 502 # Bad Gateway
- 503 # Service Unavailable
- 504 # Gateway Timeout
retries:
enabled: true
max_attempts: 3
backoff:
initial_interval_ms: 500
max_interval_ms: 30000
multiplier: 2.0
jitter: 0.25
retry_on:
- 429
- 500
- 502
- 503
- 504
retry_connection_errors: true
respect_retry_after: true

Timeout configuration.

PropertyTypeDefaultDescription
default_msinteger60000Total request timeout
connect_msinteger10000Connection timeout
read_msinteger30000Read timeout
operationsobject-Per-operation overrides
timeouts:
default_ms: 60000
connect_ms: 10000
read_ms: 30000
operations:
batch_process:
default_ms: 300000
reports_generate:
default_ms: 120000
upload_file:
default_ms: 600000

Streaming configuration.

PropertyTypeDefaultDescription
sse.enabledbooleantrueEnable SSE support
sse.sentinel_eventsarray["[DONE]"]Events to filter out
streaming:
sse:
enabled: true
sentinel_events:
- "[DONE]"
- "END"

version: "1.0"
sdk:
name: acme-sdk
version: 1.0.0
description: SDK for Acme API
spec:
path: ./openapi.yaml
targets:
typescript:
package_name: "@acme/sdk"
module_format: esm
python:
package_name: acme-sdk
min_version: "3.9"
go:
module: github.com/acme/sdk-go
java:
group_id: com.acme
artifact_id: acme-sdk
csharp:
package_id: Acme.Sdk
root_namespace: Acme.Sdk
target_frameworks: [netstandard2.0, net8.0, net9.0]
resources:
$client:
methods:
health: get /health
users:
models: [User, UserCreate]
methods:
list: get /users
create: post /users
get: get /users/{id}
pagination:
default_type: cursor
schemes:
cursor:
cursor:
request_param: after
response_property: next_cursor
limit:
request_param: limit
default: 20
max: 100
has_more:
response_property: has_more
authentication:
default: bearer
env_vars:
bearer:
token: ACME_API_TOKEN
retries:
enabled: true
max_attempts: 3
timeouts:
default_ms: 60000
streaming:
sse:
enabled: true