curl --request PUT \
--url https://api.openworklabs.com/v1/org/auto-router \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"enabled": true,
"routes": [
{
"providerId": "<string>",
"modelId": "<string>",
"prompt": "<string>"
}
]
}
'import requests
url = "https://api.openworklabs.com/v1/org/auto-router"
payload = {
"enabled": True,
"routes": [
{
"providerId": "<string>",
"modelId": "<string>",
"prompt": "<string>"
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enabled: true,
routes: [{providerId: '<string>', modelId: '<string>', prompt: '<string>'}]
})
};
fetch('https://api.openworklabs.com/v1/org/auto-router', 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.openworklabs.com/v1/org/auto-router",
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([
'enabled' => true,
'routes' => [
[
'providerId' => '<string>',
'modelId' => '<string>',
'prompt' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.openworklabs.com/v1/org/auto-router"
payload := strings.NewReader("{\n \"enabled\": true,\n \"routes\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.openworklabs.com/v1/org/auto-router")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"enabled\": true,\n \"routes\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/org/auto-router")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"enabled\": true,\n \"routes\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"enabled": true,
"routing": "ready",
"routes": [
{
"id": "<string>",
"providerId": "<string>",
"modelId": "<string>",
"prompt": "<string>",
"thinkingLevel": "default",
"isDefault": true
}
],
"canEdit": true
}{
"error": "unknown_model",
"route": 0,
"message": "<string>"
}{
"error": "unauthorized"
}{
"error": "forbidden",
"reason": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "auto_router_not_configured",
"message": "<string>"
}Save the Auto Router
Replaces the organization’s Auto Router: whether it is enabled and its routes in order. Each route names an AI Gateway model from the options list, a description of when to use it, and one thinking level the model allows. The first route is the default model: its prompt is fixed (any prompt sent for it is ignored), Auto uses it when no other route matches, and it is the fallback when the router cannot decide. Every other route needs a prompt; enabling needs at least one route and is refused with auto_router_not_configured while the AI Gateway has no TypeSafe key. Requires the Manage Gateway providers permission, a recent sign-in and the Auto Router feature.
curl --request PUT \
--url https://api.openworklabs.com/v1/org/auto-router \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"enabled": true,
"routes": [
{
"providerId": "<string>",
"modelId": "<string>",
"prompt": "<string>"
}
]
}
'import requests
url = "https://api.openworklabs.com/v1/org/auto-router"
payload = {
"enabled": True,
"routes": [
{
"providerId": "<string>",
"modelId": "<string>",
"prompt": "<string>"
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enabled: true,
routes: [{providerId: '<string>', modelId: '<string>', prompt: '<string>'}]
})
};
fetch('https://api.openworklabs.com/v1/org/auto-router', 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.openworklabs.com/v1/org/auto-router",
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([
'enabled' => true,
'routes' => [
[
'providerId' => '<string>',
'modelId' => '<string>',
'prompt' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.openworklabs.com/v1/org/auto-router"
payload := strings.NewReader("{\n \"enabled\": true,\n \"routes\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.openworklabs.com/v1/org/auto-router")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"enabled\": true,\n \"routes\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/org/auto-router")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"enabled\": true,\n \"routes\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"prompt\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"enabled": true,
"routing": "ready",
"routes": [
{
"id": "<string>",
"providerId": "<string>",
"modelId": "<string>",
"prompt": "<string>",
"thinkingLevel": "default",
"isDefault": true
}
],
"canEdit": true
}{
"error": "unknown_model",
"route": 0,
"message": "<string>"
}{
"error": "unauthorized"
}{
"error": "forbidden",
"reason": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "auto_router_not_configured",
"message": "<string>"
}Authorizations
Organization API key passed as the x-api-key header. The raw key is the header value; do not prefix it with Bearer.
Body
Was this page helpful?