curl --request PATCH \
--url https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"context_window_tokens": 2,
"max_output_tokens": 2,
"default_max_output_tokens": 2,
"supports_tools": true,
"supports_reasoning": true,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": [
"<string>"
],
"input_modalities": [
"<string>"
],
"output_modalities": [
"<string>"
]
}
'import requests
url = "https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID}"
payload = {
"context_window_tokens": 2,
"max_output_tokens": 2,
"default_max_output_tokens": 2,
"supports_tools": True,
"supports_reasoning": True,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": ["<string>"],
"input_modalities": ["<string>"],
"output_modalities": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
context_window_tokens: 2,
max_output_tokens: 2,
default_max_output_tokens: 2,
supports_tools: true,
supports_reasoning: true,
default_reasoning_effort: '<string>',
supported_reasoning_efforts: ['<string>'],
input_modalities: ['<string>'],
output_modalities: ['<string>']
})
};
fetch('https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID}', 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}/projects/{projectID}/model-grants/{modelGrantID}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'context_window_tokens' => 2,
'max_output_tokens' => 2,
'default_max_output_tokens' => 2,
'supports_tools' => true,
'supports_reasoning' => true,
'default_reasoning_effort' => '<string>',
'supported_reasoning_efforts' => [
'<string>'
],
'input_modalities' => [
'<string>'
],
'output_modalities' => [
'<string>'
]
]),
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}/projects/{projectID}/model-grants/{modelGrantID}"
payload := strings.NewReader("{\n \"context_window_tokens\": 2,\n \"max_output_tokens\": 2,\n \"default_max_output_tokens\": 2,\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}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"context_window_tokens\": 2,\n \"max_output_tokens\": 2,\n \"default_max_output_tokens\": 2,\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}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"context_window_tokens\": 2,\n \"max_output_tokens\": 2,\n \"default_max_output_tokens\": 2,\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}"
response = http.request(request)
puts response.read_body{
"grant": {
"id": "<string>",
"org_id": "<string>",
"project_id": "<string>",
"configured_model_id": "<string>",
"supported_reasoning_efforts": [
"<string>"
],
"input_modalities": [
"<string>"
],
"output_modalities": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"context_window_tokens": 123,
"max_output_tokens": 123,
"default_max_output_tokens": 123,
"default_cache_retention": "none",
"supports_tools": true,
"supports_reasoning": true,
"default_reasoning_effort": "<string>"
}
}{
"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 project model grant
Updates the project’s overrides for the configured model. Omitted fields keep their current values; null clears an override so the project inherits from the configured model. The grant is live policy: agents already using the model re-apply the updated overrides on their next model call, against the configured-model revision each agent pinned at launch. Updates are validated against the configured model’s current revision only, so an update can make an agent pinned to an older, incompatible revision fail its next model call.
curl --request PATCH \
--url https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"context_window_tokens": 2,
"max_output_tokens": 2,
"default_max_output_tokens": 2,
"supports_tools": true,
"supports_reasoning": true,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": [
"<string>"
],
"input_modalities": [
"<string>"
],
"output_modalities": [
"<string>"
]
}
'import requests
url = "https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID}"
payload = {
"context_window_tokens": 2,
"max_output_tokens": 2,
"default_max_output_tokens": 2,
"supports_tools": True,
"supports_reasoning": True,
"default_reasoning_effort": "<string>",
"supported_reasoning_efforts": ["<string>"],
"input_modalities": ["<string>"],
"output_modalities": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
context_window_tokens: 2,
max_output_tokens: 2,
default_max_output_tokens: 2,
supports_tools: true,
supports_reasoning: true,
default_reasoning_effort: '<string>',
supported_reasoning_efforts: ['<string>'],
input_modalities: ['<string>'],
output_modalities: ['<string>']
})
};
fetch('https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID}', 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}/projects/{projectID}/model-grants/{modelGrantID}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'context_window_tokens' => 2,
'max_output_tokens' => 2,
'default_max_output_tokens' => 2,
'supports_tools' => true,
'supports_reasoning' => true,
'default_reasoning_effort' => '<string>',
'supported_reasoning_efforts' => [
'<string>'
],
'input_modalities' => [
'<string>'
],
'output_modalities' => [
'<string>'
]
]),
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}/projects/{projectID}/model-grants/{modelGrantID}"
payload := strings.NewReader("{\n \"context_window_tokens\": 2,\n \"max_output_tokens\": 2,\n \"default_max_output_tokens\": 2,\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}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"context_window_tokens\": 2,\n \"max_output_tokens\": 2,\n \"default_max_output_tokens\": 2,\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}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omnara.com/v1/orgs/{orgID}/projects/{projectID}/model-grants/{modelGrantID}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"context_window_tokens\": 2,\n \"max_output_tokens\": 2,\n \"default_max_output_tokens\": 2,\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}"
response = http.request(request)
puts response.read_body{
"grant": {
"id": "<string>",
"org_id": "<string>",
"project_id": "<string>",
"configured_model_id": "<string>",
"supported_reasoning_efforts": [
"<string>"
],
"input_modalities": [
"<string>"
],
"output_modalities": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"context_window_tokens": 123,
"max_output_tokens": 123,
"default_max_output_tokens": 123,
"default_cache_retention": "none",
"supports_tools": true,
"supports_reasoning": true,
"default_reasoning_effort": "<string>"
}
}{
"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}$^proj_[a-z2-7]{26}$^pmog_[a-z2-7]{26}$Body
Update a project model grant's overrides. Omitted fields keep their current values. Null clears an override so the project inherits from the configured model; for arrays, an empty array clears the override.
Project token-window limit. Cannot exceed the configured model's current limit.
x >= 1Project output-token ceiling. Cannot exceed the configured model's ceiling.
x >= 1Project default per-request output-token cap.
x >= 1Prompt-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 Project-level tool-use gate. Can disable tools, but cannot enable tools when the configured model does not support them.
Project-level reasoning gate. Can disable reasoning, but cannot enable reasoning when the configured model does not support it.
Project default reasoning effort.
Project subset of configured-model reasoning efforts. If this excludes the inherited default_reasoning_effort, set default_reasoning_effort on the grant too.
Project subset of configured-model input types.
Project subset of configured-model output types.
Response
Route response.
Show child attributes
Show child attributes