curl --request POST \
--url https://api.{domain}/v1/model-credentials \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"key": "sk-ant-api03-…",
"label": "Anthropic"
}
'import requests
url = "https://api.{domain}/v1/model-credentials"
payload = {
"key": "sk-ant-api03-…",
"label": "Anthropic"
}
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({key: 'sk-ant-api03-…', label: 'Anthropic'})
};
fetch('https://api.{domain}/v1/model-credentials', 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.{domain}/v1/model-credentials",
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([
'key' => 'sk-ant-api03-…',
'label' => 'Anthropic'
]),
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.{domain}/v1/model-credentials"
payload := strings.NewReader("{\n \"key\": \"sk-ant-api03-…\",\n \"label\": \"Anthropic\"\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.{domain}/v1/model-credentials")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"sk-ant-api03-…\",\n \"label\": \"Anthropic\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.{domain}/v1/model-credentials")
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 \"key\": \"sk-ant-api03-…\",\n \"label\": \"Anthropic\"\n}"
response = http.request(request)
puts response.read_body{
"object": "model_credential",
"id": "<string>",
"model": "<string>",
"label": "<string>",
"connector": "<string>",
"is_default": true,
"last4": "<string>",
"verified": true
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}Connect a model provider
Connect a model provider with one of your own keys.
curl --request POST \
--url https://api.{domain}/v1/model-credentials \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"key": "sk-ant-api03-…",
"label": "Anthropic"
}
'import requests
url = "https://api.{domain}/v1/model-credentials"
payload = {
"key": "sk-ant-api03-…",
"label": "Anthropic"
}
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({key: 'sk-ant-api03-…', label: 'Anthropic'})
};
fetch('https://api.{domain}/v1/model-credentials', 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.{domain}/v1/model-credentials",
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([
'key' => 'sk-ant-api03-…',
'label' => 'Anthropic'
]),
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.{domain}/v1/model-credentials"
payload := strings.NewReader("{\n \"key\": \"sk-ant-api03-…\",\n \"label\": \"Anthropic\"\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.{domain}/v1/model-credentials")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"sk-ant-api03-…\",\n \"label\": \"Anthropic\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.{domain}/v1/model-credentials")
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 \"key\": \"sk-ant-api03-…\",\n \"label\": \"Anthropic\"\n}"
response = http.request(request)
puts response.read_body{
"object": "model_credential",
"id": "<string>",
"model": "<string>",
"label": "<string>",
"connector": "<string>",
"is_default": true,
"last4": "<string>",
"verified": true
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"request_id": "<string>"
}
}Authorizations
A gbr_pat_ access token. Scopes are recorded on the token when it is minted.
Headers
Retrying with the same key replays the first answer instead of acting again.
255Body
The provider key. Verified against the provider before it is stored, and returned nowhere afterwards.
Which vendor issued the key. Only needed when the prefix does not say: several vendors issue keys starting with sk-, and we ask rather than send your secret to vendors you never named.
Omit to accept the connector's default.
For custom, and for self-hosted or proxied endpoints.
A name for the Console's list. Defaults to the provider's.
Whether sessions naming no credential get this one. The first connection is always the default. Must be a boolean — a string is refused rather than read as false, because this decides whose bill every future turn lands on.
Response
Connect a model provider with one of your own keys.
Always model_credential. Names the shape, so a value can be identified without knowing which call returned it.
"model_credential"Pass as agent.model_credential_id.
agent.model must match this.
Yours, from the Console. For recognising the connection.
Which provider integration it uses.
Whether a session that names no credential gets this one.
The last four characters of the key. On create only; the key itself is never returned.
Whether the provider accepted a probe before this was stored.