The Ottili AI API selects models through a routing layer rather than forcing you
to pin a single provider model. This keeps your integration stable while Ottili
swaps underlying providers for price, quality and region.
The full model-line, versioning and capability matrix are part of the public API contract documented in this reference. This page is the fastest path to listing and selecting models on the public surface.
Selecting a model
Every generation request accepts a model field:
{ "model": "ottili/auto" }ottili/vale-1.2— efficient, cheap, everyday coding (DeepSeek V4 Flash).ottili/cairn-1.2— premium, agentic, larger repo work (DeepSeek V4 Pro).ottili/auto— the adaptive router picks Vale↔Cairn per request, plan and availability.- A specific public id — pins to that model when it is available to your company.
If a pinned model is unknown, legacy (helix), or reserved (spire), the API
returns model_not_found (HTTP 404) — fail-closed, never a silent paid
downgrade.
Listing available models
Model availability is entitlement- and region-scoped. Query the live model list
to see what your company can use:
curl "https://api.ai.ottili.one/v1/models" \
-H "Authorization: Bearer otk_live_xxx"Tenant context is resolved from the API key — you do not* send
X-Platform-Company or any company_id header (raw company-ID headers
are ignored on the public surface).
Each model describes its capabilities (OpenAI-compatible id/owned_by/
pricing plus Ottili extensions supports_streaming/supports_tools/
supports_json_mode/tier/lifecycle_status/capabilities):
{
"object": "list",
"data": [
{
"id": "ottili/vale-1.2",
"object": "model",
"owned_by": "ottili",
"context_length": 1000000,
"pricing": { "prompt": "0.000000200", "completion": "0.000000400" },
"supports_streaming": true,
"supports_tools": true,
"supports_json_mode": true,
"tier": "fast",
"lifecycle_status": "active",
"capabilities": { "streaming": true, "tools": true, "json_schema": true, "reasoning": false }
}
]
}owned_by is always ottili — no provider name or upstream slug is ever
serialized (provider isolation). Pricing is the current PRICING_VERSION
configuration, never a hard-coded "final" retail price.
Availability states
| State | Meaning |
|---|---|
active | Generally available to eligible companies. |
deprecated | Still served but scheduled for retirement; a deprecation warning is surfaced. |
reserved | Announced but not yet enabled (e.g. ottili/spire-1.2); not served and not dispatchable. |
Availability depends on your plan, remaining credits and region. Treat
lifecycle_status as advisory and always handle the not-available error case
(model_not_found, HTTP 404).
Capability flags
Check capabilities before relying on a feature. Not every model supports
tool calls or structured outputs. The errors reference explains the code returned
when a requested capability is unsupported (capability_unsupported, HTTP 400).
Was this article helpful?
