Create a Smart Router
curl --request POST \
--url https://api.openworklabs.com/v1/org/auto-routers \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"assignment": {
"everyone": true,
"teamIds": [
"<string>"
],
"memberIds": [
"<string>"
]
},
"models": [
{
"providerId": "<string>",
"modelId": "<string>",
"tasks": [
"<string>"
]
}
]
}
'import requests
url = "https://api.openworklabs.com/v1/org/auto-routers"
payload = {
"name": "<string>",
"assignment": {
"everyone": True,
"teamIds": ["<string>"],
"memberIds": ["<string>"]
},
"models": [
{
"providerId": "<string>",
"modelId": "<string>",
"tasks": ["<string>"]
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
assignment: {everyone: true, teamIds: ['<string>'], memberIds: ['<string>']},
models: [{providerId: '<string>', modelId: '<string>', tasks: ['<string>']}]
})
};
fetch('https://api.openworklabs.com/v1/org/auto-routers', 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-routers",
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>',
'assignment' => [
'everyone' => true,
'teamIds' => [
'<string>'
],
'memberIds' => [
'<string>'
]
],
'models' => [
[
'providerId' => '<string>',
'modelId' => '<string>',
'tasks' => [
'<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-routers"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"assignment\": {\n \"everyone\": true,\n \"teamIds\": [\n \"<string>\"\n ],\n \"memberIds\": [\n \"<string>\"\n ]\n },\n \"models\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"tasks\": [\n \"<string>\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.openworklabs.com/v1/org/auto-routers")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"assignment\": {\n \"everyone\": true,\n \"teamIds\": [\n \"<string>\"\n ],\n \"memberIds\": [\n \"<string>\"\n ]\n },\n \"models\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"tasks\": [\n \"<string>\"\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/org/auto-routers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"assignment\": {\n \"everyone\": true,\n \"teamIds\": [\n \"<string>\"\n ],\n \"memberIds\": [\n \"<string>\"\n ]\n },\n \"models\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"tasks\": [\n \"<string>\"\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"routing": "ready",
"canEdit": true,
"routers": [
{
"id": "<string>",
"name": "<string>",
"assignment": {
"everyone": true,
"teamIds": [
"<string>"
],
"memberIds": [
"<string>"
]
},
"models": [
{
"id": "<string>",
"providerId": "<string>",
"modelId": "<string>",
"tasks": [
"<string>"
]
}
],
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"tasks": [
"<string>"
]
}{
"error": "unknown_model",
"message": "<string>",
"model": 0
}{
"error": "unauthorized"
}{
"error": "forbidden",
"reason": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "auto_router_not_configured",
"message": "<string>"
}Inference Providers
Create a Smart Router
Creates a Smart Router: its name, who it applies to, and its AI Gateway models in order, each with the tasks it handles (at least one). Tasks are shared across the organization and matched case-insensitively; new names are created. The first model wins ties and is used when the router cannot decide. Refused with auto_router_not_configured while the AI Gateway has no TypeSafe key. Assigning it to everyone also needs the Share with everyone permission. Requires the Manage Gateway providers permission, a recent sign-in and the Smart Model Router feature. Returns the whole list.
POST
/
v1
/
org
/
auto-routers
Create a Smart Router
curl --request POST \
--url https://api.openworklabs.com/v1/org/auto-routers \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"assignment": {
"everyone": true,
"teamIds": [
"<string>"
],
"memberIds": [
"<string>"
]
},
"models": [
{
"providerId": "<string>",
"modelId": "<string>",
"tasks": [
"<string>"
]
}
]
}
'import requests
url = "https://api.openworklabs.com/v1/org/auto-routers"
payload = {
"name": "<string>",
"assignment": {
"everyone": True,
"teamIds": ["<string>"],
"memberIds": ["<string>"]
},
"models": [
{
"providerId": "<string>",
"modelId": "<string>",
"tasks": ["<string>"]
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
assignment: {everyone: true, teamIds: ['<string>'], memberIds: ['<string>']},
models: [{providerId: '<string>', modelId: '<string>', tasks: ['<string>']}]
})
};
fetch('https://api.openworklabs.com/v1/org/auto-routers', 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-routers",
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>',
'assignment' => [
'everyone' => true,
'teamIds' => [
'<string>'
],
'memberIds' => [
'<string>'
]
],
'models' => [
[
'providerId' => '<string>',
'modelId' => '<string>',
'tasks' => [
'<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-routers"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"assignment\": {\n \"everyone\": true,\n \"teamIds\": [\n \"<string>\"\n ],\n \"memberIds\": [\n \"<string>\"\n ]\n },\n \"models\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"tasks\": [\n \"<string>\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.openworklabs.com/v1/org/auto-routers")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"assignment\": {\n \"everyone\": true,\n \"teamIds\": [\n \"<string>\"\n ],\n \"memberIds\": [\n \"<string>\"\n ]\n },\n \"models\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"tasks\": [\n \"<string>\"\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/org/auto-routers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"assignment\": {\n \"everyone\": true,\n \"teamIds\": [\n \"<string>\"\n ],\n \"memberIds\": [\n \"<string>\"\n ]\n },\n \"models\": [\n {\n \"providerId\": \"<string>\",\n \"modelId\": \"<string>\",\n \"tasks\": [\n \"<string>\"\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"routing": "ready",
"canEdit": true,
"routers": [
{
"id": "<string>",
"name": "<string>",
"assignment": {
"everyone": true,
"teamIds": [
"<string>"
],
"memberIds": [
"<string>"
]
},
"models": [
{
"id": "<string>",
"providerId": "<string>",
"modelId": "<string>",
"tasks": [
"<string>"
]
}
],
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"tasks": [
"<string>"
]
}{
"error": "unknown_model",
"message": "<string>",
"model": 0
}{
"error": "unauthorized"
}{
"error": "forbidden",
"reason": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "auto_router_not_configured",
"message": "<string>"
}Authorizations
denApiKeybearerAuth
Organization API key passed as the x-api-key header. The raw key is the header value; do not prefix it with Bearer.
Body
application/json
Was this page helpful?