Skip to content

Resources

The resources section defines how your SDK is organized. Resources group related API operations into logical namespaces.

resources:
users:
methods:
list: get /users
create: post /users
get: get /users/{id}

This generates:

client.users.list();
client.users.create({ name: "John" });
client.users.get("user-123");
PropertyRequiredTypeDescription
methodsYesobjectMap of method names to operations
modelsNoarrayAssociated model names
subresourcesNoobjectNested resource definitions

Methods map SDK method names to OpenAPI operations.

methods:
<method_name>: <http_method> <path>
resources:
users:
methods:
list: get /users # GET /users
create: post /users # POST /users
get: get /users/{id} # GET /users/{id}
update: put /users/{id} # PUT /users/{id}
delete: delete /users/{id} # DELETE /users/{id}
orders:
methods:
list: get /orders
create: post /orders
get: get /orders/{order_id}
cancel: post /orders/{order_id}/cancel

Soxom uses these conventional names based on HTTP method and path pattern:

HTTP MethodPath PatternConventional Name
GET/resourceslist
GET/resources/{id}get
POST/resourcescreate
PUT/resources/{id}update
PATCH/resources/{id}patch
DELETE/resources/{id}delete

You can use any method name you prefer:

methods:
fetchAll: get /users # Custom name
archive: delete /users/{id} # Custom name for delete

Use $client to define methods directly on the client object:

resources:
$client:
methods:
health: get /health
version: get /version
users:
methods:
list: get /users

Generated usage:

// Methods on client root
client.health();
client.version();
// Resource methods
client.users.list();

Associate OpenAPI schema models with resources for documentation and IDE hints:

resources:
users:
models:
- User
- UserCreate
- UserUpdate
methods:
list: get /users
create: post /users
get: get /users/{id}
update: put /users/{id}

Define nested resources for hierarchical APIs:

resources:
users:
methods:
list: get /users
get: get /users/{user_id}
subresources:
settings:
methods:
get: get /users/{user_id}/settings
update: put /users/{user_id}/settings
preferences:
methods:
get: get /users/{user_id}/preferences
update: put /users/{user_id}/preferences

Generated usage:

// Main resource
client.users.list();
client.users.get("user-123");
// Nested subresources
client.users.settings.get("user-123");
client.users.settings.update("user-123", { theme: "dark" });
client.users.preferences.get("user-123");

Subresources can be nested multiple levels:

resources:
organizations:
methods:
list: get /organizations
get: get /organizations/{org_id}
subresources:
teams:
methods:
list: get /organizations/{org_id}/teams
get: get /organizations/{org_id}/teams/{team_id}
subresources:
members:
methods:
list: get /organizations/{org_id}/teams/{team_id}/members
add: post /organizations/{org_id}/teams/{team_id}/members

Generated usage:

client.organizations.teams.list("org-123");
client.organizations.teams.members.list("org-123", "team-456");
client.organizations.teams.members.add("org-123", "team-456", { userId: "user-789" });
resources:
# Root level methods
$client:
methods:
health: get /health
# Users with subresources
users:
models:
- User
- UserCreate
- UserUpdate
- UserSettings
methods:
list: get /users
create: post /users
get: get /users/{user_id}
update: put /users/{user_id}
delete: delete /users/{user_id}
subresources:
settings:
methods:
get: get /users/{user_id}/settings
update: put /users/{user_id}/settings
# Orders
orders:
models:
- Order
- OrderCreate
methods:
list: get /orders
create: post /orders
get: get /orders/{order_id}
cancel: post /orders/{order_id}/cancel
# Chat with nested completions
chat:
subresources:
completions:
models:
- ChatCompletion
- ChatCompletionChunk
methods:
create: post /chat/completions

Path parameters in the OpenAPI spec automatically become method arguments:

methods:
get: get /users/{user_id}/posts/{post_id}
// Path parameters become method arguments
client.users.posts.get("user-123", "post-456");