curl --request PUT \
--url https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"provider_model_slug": "<string>",
"context_window_tokens": 1073741824,
"max_output_tokens": 1073741824,
"default_max_output_tokens": 1073741824,
"supports_tools": true,
"supports_reasoning": true,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": [
"<string>"
],
"input_modalities": [
"<string>"
],
"output_modalities": [
"<string>"
],
"api_variant_options": {}
}
'import requests
url = "https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}"
payload = {
"name": "<string>",
"provider_model_slug": "<string>",
"context_window_tokens": 1073741824,
"max_output_tokens": 1073741824,
"default_max_output_tokens": 1073741824,
"supports_tools": True,
"supports_reasoning": True,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": ["<string>"],
"input_modalities": ["<string>"],
"output_modalities": ["<string>"],
"api_variant_options": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
provider_model_slug: '<string>',
context_window_tokens: 1073741824,
max_output_tokens: 1073741824,
default_max_output_tokens: 1073741824,
supports_tools: true,
supports_reasoning: true,
default_reasoning_effort: '<string>',
supported_reasoning_efforts: ['<string>'],
input_modalities: ['<string>'],
output_modalities: ['<string>'],
api_variant_options: {}
})
};
fetch('https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'provider_model_slug' => '<string>',
'context_window_tokens' => 1073741824,
'max_output_tokens' => 1073741824,
'default_max_output_tokens' => 1073741824,
'supports_tools' => true,
'supports_reasoning' => true,
'default_reasoning_effort' => '<string>',
'supported_reasoning_efforts' => [
'<string>'
],
'input_modalities' => [
'<string>'
],
'output_modalities' => [
'<string>'
],
'api_variant_options' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"provider_model_slug\": \"<string>\",\n \"context_window_tokens\": 1073741824,\n \"max_output_tokens\": 1073741824,\n \"default_max_output_tokens\": 1073741824,\n \"supports_tools\": true,\n \"supports_reasoning\": true,\n \"default_reasoning_effort\": \"<string>\",\n \"supported_reasoning_efforts\": [\n \"<string>\"\n ],\n \"input_modalities\": [\n \"<string>\"\n ],\n \"output_modalities\": [\n \"<string>\"\n ],\n \"api_variant_options\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"provider_model_slug\": \"<string>\",\n \"context_window_tokens\": 1073741824,\n \"max_output_tokens\": 1073741824,\n \"default_max_output_tokens\": 1073741824,\n \"supports_tools\": true,\n \"supports_reasoning\": true,\n \"default_reasoning_effort\": \"<string>\",\n \"supported_reasoning_efforts\": [\n \"<string>\"\n ],\n \"input_modalities\": [\n \"<string>\"\n ],\n \"output_modalities\": [\n \"<string>\"\n ],\n \"api_variant_options\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"provider_model_slug\": \"<string>\",\n \"context_window_tokens\": 1073741824,\n \"max_output_tokens\": 1073741824,\n \"default_max_output_tokens\": 1073741824,\n \"supports_tools\": true,\n \"supports_reasoning\": true,\n \"default_reasoning_effort\": \"<string>\",\n \"supported_reasoning_efforts\": [\n \"<string>\"\n ],\n \"input_modalities\": [\n \"<string>\"\n ],\n \"output_modalities\": [\n \"<string>\"\n ],\n \"api_variant_options\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"org_id": "<string>",
"model_provider_config_id": "<string>",
"management_kind": "tenant",
"name": "<string>",
"current_revision_id": "<string>",
"provider_model_slug": "<string>",
"context_window_tokens": 123,
"max_output_tokens": 123,
"supports_tools": true,
"supports_reasoning": true,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": [
"<string>"
],
"input_modalities": [
"<string>"
],
"output_modalities": [
"<string>"
],
"api_variant_options": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"revision_created_at": "2023-11-07T05:31:56Z",
"default_max_output_tokens": 123,
"default_cache_retention": "none"
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Update configured model
curl --request PUT \
--url https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"provider_model_slug": "<string>",
"context_window_tokens": 1073741824,
"max_output_tokens": 1073741824,
"default_max_output_tokens": 1073741824,
"supports_tools": true,
"supports_reasoning": true,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": [
"<string>"
],
"input_modalities": [
"<string>"
],
"output_modalities": [
"<string>"
],
"api_variant_options": {}
}
'import requests
url = "https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}"
payload = {
"name": "<string>",
"provider_model_slug": "<string>",
"context_window_tokens": 1073741824,
"max_output_tokens": 1073741824,
"default_max_output_tokens": 1073741824,
"supports_tools": True,
"supports_reasoning": True,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": ["<string>"],
"input_modalities": ["<string>"],
"output_modalities": ["<string>"],
"api_variant_options": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
provider_model_slug: '<string>',
context_window_tokens: 1073741824,
max_output_tokens: 1073741824,
default_max_output_tokens: 1073741824,
supports_tools: true,
supports_reasoning: true,
default_reasoning_effort: '<string>',
supported_reasoning_efforts: ['<string>'],
input_modalities: ['<string>'],
output_modalities: ['<string>'],
api_variant_options: {}
})
};
fetch('https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'provider_model_slug' => '<string>',
'context_window_tokens' => 1073741824,
'max_output_tokens' => 1073741824,
'default_max_output_tokens' => 1073741824,
'supports_tools' => true,
'supports_reasoning' => true,
'default_reasoning_effort' => '<string>',
'supported_reasoning_efforts' => [
'<string>'
],
'input_modalities' => [
'<string>'
],
'output_modalities' => [
'<string>'
],
'api_variant_options' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"provider_model_slug\": \"<string>\",\n \"context_window_tokens\": 1073741824,\n \"max_output_tokens\": 1073741824,\n \"default_max_output_tokens\": 1073741824,\n \"supports_tools\": true,\n \"supports_reasoning\": true,\n \"default_reasoning_effort\": \"<string>\",\n \"supported_reasoning_efforts\": [\n \"<string>\"\n ],\n \"input_modalities\": [\n \"<string>\"\n ],\n \"output_modalities\": [\n \"<string>\"\n ],\n \"api_variant_options\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"provider_model_slug\": \"<string>\",\n \"context_window_tokens\": 1073741824,\n \"max_output_tokens\": 1073741824,\n \"default_max_output_tokens\": 1073741824,\n \"supports_tools\": true,\n \"supports_reasoning\": true,\n \"default_reasoning_effort\": \"<string>\",\n \"supported_reasoning_efforts\": [\n \"<string>\"\n ],\n \"input_modalities\": [\n \"<string>\"\n ],\n \"output_modalities\": [\n \"<string>\"\n ],\n \"api_variant_options\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs/{modelProviderConfigID}/models/{configuredModelID}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"provider_model_slug\": \"<string>\",\n \"context_window_tokens\": 1073741824,\n \"max_output_tokens\": 1073741824,\n \"default_max_output_tokens\": 1073741824,\n \"supports_tools\": true,\n \"supports_reasoning\": true,\n \"default_reasoning_effort\": \"<string>\",\n \"supported_reasoning_efforts\": [\n \"<string>\"\n ],\n \"input_modalities\": [\n \"<string>\"\n ],\n \"output_modalities\": [\n \"<string>\"\n ],\n \"api_variant_options\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"org_id": "<string>",
"model_provider_config_id": "<string>",
"management_kind": "tenant",
"name": "<string>",
"current_revision_id": "<string>",
"provider_model_slug": "<string>",
"context_window_tokens": 123,
"max_output_tokens": 123,
"supports_tools": true,
"supports_reasoning": true,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": [
"<string>"
],
"input_modalities": [
"<string>"
],
"output_modalities": [
"<string>"
],
"api_variant_options": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"revision_created_at": "2023-11-07T05:31:56Z",
"default_max_output_tokens": 123,
"default_cache_retention": "none"
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>",
"current_digest": "<string>",
"issues": [
{
"path": "<string>",
"message": "<string>",
"line": 2,
"column": 2
}
]
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
An opaque Omnara personal or organization bearer token.
Path Parameters
^org_[a-z2-7]{26}$^mpc_[a-z2-7]{26}$^mdl_[a-z2-7]{26}$Body
Update a configured model. Omitted fields keep their current values. Runtime changes create a new immutable model revision; changing only name just renames the model.
User-assigned configured model name used by agent YAML as model.name. Renaming affects future YAML resolution but does not change existing agents.
1 - 64Exact provider model slug sent to the provider endpoint. Free-pool, :online, and preset model ids are not accepted on Omnara-managed OpenRouter providers.
1Total token window for this model, including input and output.
2 <= x <= 2147483647Known output-token ceiling for this model. Omitted keeps the current value. Null clears it to unknown for every API format.
1 <= x <= 2147483647Optional per-request output allowance unless a project or agent overrides it. Without a default or known ceiling, Messages uses 64000 tokens; other formats omit the allowance.
1 <= x <= 2147483647Prompt-cache preference for model requests; short when omitted. short applies the route's default caching (explicit cache breakpoints where the provider requires them) and, where the route accepts one, a stable conversation key for cache-aware routing. long prefers the route's extended cache lifetime where one exists (currently Anthropic's one-hour cache, which on Bedrock requires Claude 4.5 or newer) and behaves like short elsewhere. none sends no Omnara-managed cache controls or conversation key; providers may still cache prefixes on their own.
none, short, long Whether this configured model can receive tool definitions and emit tool calls. Agent configs with enabled tools are rejected when this is false. Omitted keeps the current value.
Whether Omnara should use this model's reasoning features. For OpenAI Responses, this also enables encrypted reasoning replay for stateless calls. Omitted keeps the current value.
Default reasoning effort to send for models/API formats that support effort-style reasoning controls. Requires supports_reasoning=true. When supported_reasoning_efforts is present, this value must be listed there.
Reasoning effort values this configured model accepts. Requires supports_reasoning=true when non-empty.
Input types this configured model accepts. Omnara recognizes text, image, and file; an empty list leaves capabilities unspecified.
Output types this configured model can return. Omnara currently consumes text output.
Extra top-level JSON fields to include in provider requests for this configured model. Use this for provider-specific settings that Omnara does not expose as typed fields, such as OpenRouter provider routing or sampling parameters. Omnara still controls the fields it needs to run the agent correctly, including the model, prompt/messages, streaming, tools, output-token limit, and selected reasoning policy. Provider passthrough values for those fields are ignored. For OpenRouter routing options, see https://openrouter.ai/docs/guides/routing/provider-selection and general request parameters at https://openrouter.ai/docs/api/reference/parameters. Omnara-managed OpenRouter providers accept only sampling, reasoning, and per-model routing options here.
Response
Route response.
^mdl_[a-z2-7]{26}$^org_[a-z2-7]{26}$^mpc_[a-z2-7]{26}$Lifecycle owner. Tenant-managed resources can be changed through tenant APIs. Cluster-managed resources are installed and lifecycle-managed by the control plane; individual APIs may explicitly expose tenant-editable settings.
tenant, cluster User-assigned configured model name used by agent YAML as model.name.
1 - 64^mrev_[a-z2-7]{26}$Exact provider model slug sent to the provider endpoint by the current revision.
Total token window for this model, including input and output.
Known output-token ceiling for this model, or null when unknown.
Whether this configured model can receive tool definitions and emit tool calls.
Whether Omnara should use this model's reasoning features.
Default reasoning effort to send for models/API formats that support effort-style reasoning controls.
Reasoning effort values this configured model accepts.
Input types this configured model accepts. Omnara recognizes text, image, and file; an empty list leaves capabilities unspecified.
Output types this configured model can return.
Extra top-level JSON fields to include in provider requests for this configured model. Use this for provider-specific settings that Omnara does not expose as typed fields, such as OpenRouter provider routing or sampling parameters. Omnara still controls the fields it needs to run the agent correctly, including the model, prompt/messages, streaming, tools, output-token limit, and selected reasoning policy. Provider passthrough values for those fields are ignored. For OpenRouter routing options, see https://openrouter.ai/docs/guides/routing/provider-selection and general request parameters at https://openrouter.ai/docs/api/reference/parameters. Omnara-managed OpenRouter providers accept only sampling, reasoning, and per-model routing options here.
Default per-request output-token cap sent to the provider unless an agent config overrides it.
Prompt-cache preference for model requests; short when omitted. short applies the route's default caching (explicit cache breakpoints where the provider requires them) and, where the route accepts one, a stable conversation key for cache-aware routing. long prefers the route's extended cache lifetime where one exists (currently Anthropic's one-hour cache, which on Bedrock requires Claude 4.5 or newer) and behaves like short elsewhere. none sends no Omnara-managed cache controls or conversation key; providers may still cache prefixes on their own.
none, short, long