Models
The catalog every agent resolves against.
Overview
Every Agent references the catalog (a model string, or the provider's default) to know which model it generates with. Models are read-only and platform-managed — there is no create/update/delete, only listing and lookup.
See the OpenAPI spec for the full endpoint and schema reference, or browse it rendered under API Reference → Models.
Data Model
Model
| Field | Type | Description |
|---|---|---|
id | string | Model catalog ID. |
display_name | string | Human-readable name. |
provider | string | The upstream provider (e.g. bedrock, openai). |
vendor | string | The model's vendor (e.g. anthropic). |
provider_model | string | The model string the runtime sends — what an Agent's model field accepts. |
input_modalities | string[] | Modalities the model accepts as input. |
output_modalities | string[] | Modalities the model can produce. |
streaming | boolean | Whether the model supports streaming responses. |
inference_types | string[] | Supported inference types. |
status | string | Availability status. |
managed | boolean | Whether this model can back a managed provider. |
Key Concepts
managed is not implied by status
status: "available" means the model is in the catalog. managed means it can
back a provider with kind: managed — a different question,
because a managed provider is priced at naturali's own cost and only models with
an authoritative published price qualify. The Anthropic Claude family has none
today, so it is available in the catalog but BYOK-only.
Filter on it rather than discovering it the hard way — creating a managed
provider on an ineligible model is a 400:
- CLI
- SDK
- curl
naturali list-models --managed true --vendor amazon
const { data } = await naturali.models.listModels({
query: { managed: true, vendor: 'amazon' },
});
curl -G https://api.naturali.ai/v1/models \
-H "Authorization: Bearer $NATURALI_API_KEY" \
-d managed=true -d vendor=amazon
Omit the filter to leave the catalog unfiltered on that axis; managed=false
returns only the BYOK-only models. Any other value is a 400 — a mistyped
filter fails rather than quietly returning the opposite half of the catalog.
Examples
- CLI
- SDK
- curl
naturali list-models
const { data } = await naturali.models.listModels();
curl https://api.naturali.ai/v1/models \
-H "Authorization: Bearer $NATURALI_API_KEY"