curl --request POST \
--url https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"credential_secret_id": "<string>",
"base_url": "<string>",
"endpoint_path": "<string>",
"request_timeout_ms": 1073741824,
"idle_timeout_ms": 1073741824,
"auth_options": {
"header_name": "<string>",
"service": "<string>",
"region": "<string>"
},
"headers": {},
"secret_headers": {}
}
'import requests
url = "https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs"
payload = {
"name": "<string>",
"credential_secret_id": "<string>",
"base_url": "<string>",
"endpoint_path": "<string>",
"request_timeout_ms": 1073741824,
"idle_timeout_ms": 1073741824,
"auth_options": {
"header_name": "<string>",
"service": "<string>",
"region": "<string>"
},
"headers": {},
"secret_headers": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
credential_secret_id: '<string>',
base_url: '<string>',
endpoint_path: '<string>',
request_timeout_ms: 1073741824,
idle_timeout_ms: 1073741824,
auth_options: {header_name: '<string>', service: '<string>', region: '<string>'},
headers: {},
secret_headers: {}
})
};
fetch('https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'credential_secret_id' => '<string>',
'base_url' => '<string>',
'endpoint_path' => '<string>',
'request_timeout_ms' => 1073741824,
'idle_timeout_ms' => 1073741824,
'auth_options' => [
'header_name' => '<string>',
'service' => '<string>',
'region' => '<string>'
],
'headers' => [
],
'secret_headers' => [
]
]),
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"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"credential_secret_id\": \"<string>\",\n \"base_url\": \"<string>\",\n \"endpoint_path\": \"<string>\",\n \"request_timeout_ms\": 1073741824,\n \"idle_timeout_ms\": 1073741824,\n \"auth_options\": {\n \"header_name\": \"<string>\",\n \"service\": \"<string>\",\n \"region\": \"<string>\"\n },\n \"headers\": {},\n \"secret_headers\": {}\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"credential_secret_id\": \"<string>\",\n \"base_url\": \"<string>\",\n \"endpoint_path\": \"<string>\",\n \"request_timeout_ms\": 1073741824,\n \"idle_timeout_ms\": 1073741824,\n \"auth_options\": {\n \"header_name\": \"<string>\",\n \"service\": \"<string>\",\n \"region\": \"<string>\"\n },\n \"headers\": {},\n \"secret_headers\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"credential_secret_id\": \"<string>\",\n \"base_url\": \"<string>\",\n \"endpoint_path\": \"<string>\",\n \"request_timeout_ms\": 1073741824,\n \"idle_timeout_ms\": 1073741824,\n \"auth_options\": {\n \"header_name\": \"<string>\",\n \"service\": \"<string>\",\n \"region\": \"<string>\"\n },\n \"headers\": {},\n \"secret_headers\": {}\n}"
response = http.request(request)
puts response.read_body{
"config": {
"id": "<string>",
"org_id": "<string>",
"management_kind": "tenant",
"name": "<string>",
"api_format": "openai-responses",
"api_variant": "<string>",
"base_url": "<string>",
"endpoint_path": "<string>",
"request_timeout_ms": 123,
"idle_timeout_ms": 123,
"auth_kind": "<string>",
"auth_options": {
"header_name": "<string>",
"service": "<string>",
"region": "<string>"
},
"credential_secret_id": "<string>",
"headers": {},
"secret_headers": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"model_catalog": {
"status": "ok",
"models": [
{
"slug": "<string>",
"display_name": "<string>",
"context_window_tokens": 1073741824,
"max_output_tokens": 1073741824,
"supports_reasoning": true,
"supported_reasoning_efforts": [
"<string>"
],
"pricing": {
"input_usd_per_million": "<string>",
"output_usd_per_million": "<string>",
"cache_read_input_usd_per_million": "<string>",
"cache_write_input_usd_per_million": "<string>"
}
}
],
"error": "<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>"
}Create model provider config
Create a model provider config, validate the configured credential where the provider exposes a validation endpoint, then probe the provider’s /models endpoint. The result is returned as model_catalog; a failed probe does not fail creation.
curl --request POST \
--url https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"credential_secret_id": "<string>",
"base_url": "<string>",
"endpoint_path": "<string>",
"request_timeout_ms": 1073741824,
"idle_timeout_ms": 1073741824,
"auth_options": {
"header_name": "<string>",
"service": "<string>",
"region": "<string>"
},
"headers": {},
"secret_headers": {}
}
'import requests
url = "https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs"
payload = {
"name": "<string>",
"credential_secret_id": "<string>",
"base_url": "<string>",
"endpoint_path": "<string>",
"request_timeout_ms": 1073741824,
"idle_timeout_ms": 1073741824,
"auth_options": {
"header_name": "<string>",
"service": "<string>",
"region": "<string>"
},
"headers": {},
"secret_headers": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
credential_secret_id: '<string>',
base_url: '<string>',
endpoint_path: '<string>',
request_timeout_ms: 1073741824,
idle_timeout_ms: 1073741824,
auth_options: {header_name: '<string>', service: '<string>', region: '<string>'},
headers: {},
secret_headers: {}
})
};
fetch('https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'credential_secret_id' => '<string>',
'base_url' => '<string>',
'endpoint_path' => '<string>',
'request_timeout_ms' => 1073741824,
'idle_timeout_ms' => 1073741824,
'auth_options' => [
'header_name' => '<string>',
'service' => '<string>',
'region' => '<string>'
],
'headers' => [
],
'secret_headers' => [
]
]),
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"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"credential_secret_id\": \"<string>\",\n \"base_url\": \"<string>\",\n \"endpoint_path\": \"<string>\",\n \"request_timeout_ms\": 1073741824,\n \"idle_timeout_ms\": 1073741824,\n \"auth_options\": {\n \"header_name\": \"<string>\",\n \"service\": \"<string>\",\n \"region\": \"<string>\"\n },\n \"headers\": {},\n \"secret_headers\": {}\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"credential_secret_id\": \"<string>\",\n \"base_url\": \"<string>\",\n \"endpoint_path\": \"<string>\",\n \"request_timeout_ms\": 1073741824,\n \"idle_timeout_ms\": 1073741824,\n \"auth_options\": {\n \"header_name\": \"<string>\",\n \"service\": \"<string>\",\n \"region\": \"<string>\"\n },\n \"headers\": {},\n \"secret_headers\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omnara.com/v1/orgs/{orgID}/model-provider-configs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"credential_secret_id\": \"<string>\",\n \"base_url\": \"<string>\",\n \"endpoint_path\": \"<string>\",\n \"request_timeout_ms\": 1073741824,\n \"idle_timeout_ms\": 1073741824,\n \"auth_options\": {\n \"header_name\": \"<string>\",\n \"service\": \"<string>\",\n \"region\": \"<string>\"\n },\n \"headers\": {},\n \"secret_headers\": {}\n}"
response = http.request(request)
puts response.read_body{
"config": {
"id": "<string>",
"org_id": "<string>",
"management_kind": "tenant",
"name": "<string>",
"api_format": "openai-responses",
"api_variant": "<string>",
"base_url": "<string>",
"endpoint_path": "<string>",
"request_timeout_ms": 123,
"idle_timeout_ms": 123,
"auth_kind": "<string>",
"auth_options": {
"header_name": "<string>",
"service": "<string>",
"region": "<string>"
},
"credential_secret_id": "<string>",
"headers": {},
"secret_headers": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"model_catalog": {
"status": "ok",
"models": [
{
"slug": "<string>",
"display_name": "<string>",
"context_window_tokens": 1073741824,
"max_output_tokens": 1073741824,
"supports_reasoning": true,
"supported_reasoning_efforts": [
"<string>"
],
"pricing": {
"input_usd_per_million": "<string>",
"output_usd_per_million": "<string>",
"cache_read_input_usd_per_million": "<string>",
"cache_write_input_usd_per_million": "<string>"
}
}
],
"error": "<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}$Body
Connect Omnara to a model API endpoint. Use a preset for built-in providers, or provide api_format and base_url for a custom endpoint. When omitted, endpoint_path and auth settings are filled from api_format.
Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not.
1 - 64^sec_[a-z2-7]{26}$openai, openrouter, anthropic openai-responses, openai-chat-completions, anthropic-messages default, openrouter, bedrock Provider endpoint base URL. Normal API mode requires a public HTTPS endpoint; localhost and loopback endpoints are accepted only when the API is running in insecure dev mode.
1URL path under base_url. Defaults to /responses for OpenAI Responses, /chat/completions for Chat Completions, and /messages for Anthropic Messages.
1^/Total deadline for one provider attempt, including reasoning and response streaming, in milliseconds. Defaults to 3600000 (60 minutes). Retries have separate deadlines.
1 <= x <= 2147483647Maximum wait for response headers or the next response bytes, in milliseconds. Heartbeats count as activity. Defaults to 300000 (5 minutes). Local response processing does not consume this idle budget.
1 <= x <= 2147483647bearer_token, api_key_header, sigv4 Non-secret authentication settings. Use an empty object with bearer_token. With api_key_header, set {"header_name":"..."}; Anthropic Messages defaults to {"header_name":"x-api-key"}. With sigv4, set the AWS signing service and region.
Show child attributes
Show child attributes
Extra HTTP headers sent with every request to this provider. Values are stored and returned as plain text; use secret_headers for keys and tokens.
Show child attributes
Show child attributes
Extra HTTP headers whose values come from org-owned generic secrets, mapping header names to secret references.
Show child attributes
Show child attributes
Response
Created route response.
Show child attributes
Show child attributes
The provider's model catalog, obtained by validating the configured credential and probing the provider's /models endpoint. A failed probe does not affect the stored config; treat it as a warning that the base URL or API key may be invalid.
Show child attributes
Show child attributes