API
GET /v1/models
List the models the calling API key is allowed to use, with their capabilities.
GET /v1/models
Authorization: Bearer sk-ownllm-...Lists the models the calling key is allowed to call. The list is the intersection of:
- Models installed on the paired GPU machine, and
- The key's
scopes.
Response
{
"object": "list",
"data": [
{
"id": "llama-3.3-70b",
"object": "model",
"created": 1714500000,
"owned_by": "ownllm",
"capabilities": {
"completion": true,
"vision": false,
"embedding": false,
"tools": true,
"thinking": false
},
"context_window": 131072,
"size_mb": 40000,
"runtime_profile": "auto"
},
{
"id": "qwen3.5:35b-a3b-coding-nvfp4",
"object": "model",
"created": 1714500200,
"owned_by": "ownllm",
"capabilities": {
"completion": true,
"vision": false,
"embedding": false,
"tools": true,
"thinking": true
},
"context_window": 131072,
"size_mb": 18000,
"runtime_profile": "apple-mlx",
"apple_mlx": true
}
]
}Fields beyond OpenAI
OwnLLM extends the OpenAI shape with a few non-breaking fields:
capabilities— what the model supports. Maps directly to the Ollama/api/showflags. A model withouttools: truereturnsmodel_does_not_support_toolsif the request includestools.context_window— token budget per request.size_mb— disk size, useful for clients that want to display it.runtime_profile—auto(any host) orapple-mlx(Apple Silicon only).apple_mlx—trueif the model is running through MLX acceleration on the agent. Lets clients show a small "MLX" badge.
These extra fields are additive: clients that only know the OpenAI shape ignore them.
Errors
| Status | Code | Meaning |
|---|---|---|
401 | key_invalid | The key doesn't exist or has been revoked. |
401 | key_expired | The key's TTL has elapsed. |
503 | agent_offline | The paired GPU machine isn't reachable; we can't enumerate. |
Common patterns
Match a model to a use case. Filter by capability:
const res = await fetch(`${baseUrl}/v1/models`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();
const toolModels = data.filter(m => m.capabilities.tools);Show the "MLX" badge. Read apple_mlx directly:
{model.apple_mlx && <Badge>MLX</Badge>}