UpdateAIProviderKey
Updates an AI provider key with the information in the request body. Sending the redacted placeholder for the API key keeps the stored credential unchanged.
curl --request PATCH \
--url https://api.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys \
--header 'Content-Type: application/json' \
--data '
{
"object": {
"last_probe": {
"failure_class": "AI_FAILURE_CLASS_UNSPECIFIED",
"outcome": "OUTCOME_UNSPECIFIED",
"probe_time": "2023-11-07T05:31:56Z"
},
"tenant_meta": {}
},
"request": {
"force": true,
"update_mask": "<string>"
}
}
'import requests
url = "https://api.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys"
payload = {
"object": {
"last_probe": {
"failure_class": "AI_FAILURE_CLASS_UNSPECIFIED",
"outcome": "OUTCOME_UNSPECIFIED",
"probe_time": "2023-11-07T05:31:56Z"
},
"tenant_meta": {}
},
"request": {
"force": True,
"update_mask": "<string>"
}
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
object: {
last_probe: {
failure_class: 'AI_FAILURE_CLASS_UNSPECIFIED',
outcome: 'OUTCOME_UNSPECIFIED',
probe_time: '2023-11-07T05:31:56Z'
},
tenant_meta: {}
},
request: {force: true, update_mask: '<string>'}
})
};
fetch('https://api.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys', 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.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys",
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([
'object' => [
'last_probe' => [
'failure_class' => 'AI_FAILURE_CLASS_UNSPECIFIED',
'outcome' => 'OUTCOME_UNSPECIFIED',
'probe_time' => '2023-11-07T05:31:56Z'
],
'tenant_meta' => [
]
],
'request' => [
'force' => true,
'update_mask' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"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.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys"
payload := strings.NewReader("{\n \"object\": {\n \"last_probe\": {\n \"failure_class\": \"AI_FAILURE_CLASS_UNSPECIFIED\",\n \"outcome\": \"OUTCOME_UNSPECIFIED\",\n \"probe_time\": \"2023-11-07T05:31:56Z\"\n },\n \"tenant_meta\": {}\n },\n \"request\": {\n \"force\": true,\n \"update_mask\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
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.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys")
.header("Content-Type", "application/json")
.body("{\n \"object\": {\n \"last_probe\": {\n \"failure_class\": \"AI_FAILURE_CLASS_UNSPECIFIED\",\n \"outcome\": \"OUTCOME_UNSPECIFIED\",\n \"probe_time\": \"2023-11-07T05:31:56Z\"\n },\n \"tenant_meta\": {}\n },\n \"request\": {\n \"force\": true,\n \"update_mask\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"object\": {\n \"last_probe\": {\n \"failure_class\": \"AI_FAILURE_CLASS_UNSPECIFIED\",\n \"outcome\": \"OUTCOME_UNSPECIFIED\",\n \"probe_time\": \"2023-11-07T05:31:56Z\"\n },\n \"tenant_meta\": {}\n },\n \"request\": {\n \"force\": true,\n \"update_mask\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"meta": {
"name": "<string>",
"annotations": {},
"create_time": "2023-11-07T05:31:56Z",
"created_by": "<string>",
"description": "<string>",
"index_data": {
"data": [
"<string>"
],
"search_score": 123,
"tenant": "<string>",
"will_be_deleted_at": "2023-11-07T05:31:56Z"
},
"kind": "<string>",
"parent_kind": "<string>",
"parent_uuid": "<string>",
"references": {},
"tags": [
"<string>"
],
"update_time": "2023-11-07T05:31:56Z",
"updated_by": "<string>",
"upsert_time": "2023-11-07T05:31:56Z",
"version": "<string>"
},
"tenant_meta": {
"namespace": "<string>"
},
"last_probe": {
"failure_class": "AI_FAILURE_CLASS_UNSPECIFIED",
"outcome": "OUTCOME_UNSPECIFIED",
"probe_time": "2023-11-07T05:31:56Z",
"remediation": "<string>"
},
"spec": {
"provider": "PROVIDER_UNSPECIFIED",
"api_key": "<string>",
"api_version": "<string>",
"disabled": true,
"embedding_model_aliases": [
{
"model": "EMBEDDING_MODEL_UNSPECIFIED",
"alias": "<string>"
}
],
"endpoint": "<string>",
"model_aliases": [
{
"model": "AVAILABLE_LLM_UNSPECIFIED",
"alias": "<string>"
}
]
},
"uuid": "<string>"
}{
"code": 123,
"details": [
{
"@type": "<string>"
}
],
"message": "<string>"
}Path Parameters
Namespaces are a way to organize organizational units into virtual groupings of resources. Namespaces must be a fully qualified name, for example, the child namespace of namespace "endor.prod" called "app" is called "endor.prod.app".
Body
Response
A successful response.
AIProviderKey stores a customer-provided (bring-your-own-key) LLM credential and entry point for a specific AI provider. When one is configured and enabled, the platform routes the tenant's AI requests through the customer's own provider account instead of Endor-managed credentials.
Common fields for all Endor Labs resources.
Show child attributes
Show child attributes
Tenant related data for the tenant containing the resource.
Show child attributes
Show child attributes
LastProbe records what the most recent credential check found. A check that rejects the credentials blocks the save, so it is never recorded.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The UUID of the AI provider key.
Was this page helpful?
curl --request PATCH \
--url https://api.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys \
--header 'Content-Type: application/json' \
--data '
{
"object": {
"last_probe": {
"failure_class": "AI_FAILURE_CLASS_UNSPECIFIED",
"outcome": "OUTCOME_UNSPECIFIED",
"probe_time": "2023-11-07T05:31:56Z"
},
"tenant_meta": {}
},
"request": {
"force": true,
"update_mask": "<string>"
}
}
'import requests
url = "https://api.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys"
payload = {
"object": {
"last_probe": {
"failure_class": "AI_FAILURE_CLASS_UNSPECIFIED",
"outcome": "OUTCOME_UNSPECIFIED",
"probe_time": "2023-11-07T05:31:56Z"
},
"tenant_meta": {}
},
"request": {
"force": True,
"update_mask": "<string>"
}
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
object: {
last_probe: {
failure_class: 'AI_FAILURE_CLASS_UNSPECIFIED',
outcome: 'OUTCOME_UNSPECIFIED',
probe_time: '2023-11-07T05:31:56Z'
},
tenant_meta: {}
},
request: {force: true, update_mask: '<string>'}
})
};
fetch('https://api.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys', 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.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys",
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([
'object' => [
'last_probe' => [
'failure_class' => 'AI_FAILURE_CLASS_UNSPECIFIED',
'outcome' => 'OUTCOME_UNSPECIFIED',
'probe_time' => '2023-11-07T05:31:56Z'
],
'tenant_meta' => [
]
],
'request' => [
'force' => true,
'update_mask' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"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.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys"
payload := strings.NewReader("{\n \"object\": {\n \"last_probe\": {\n \"failure_class\": \"AI_FAILURE_CLASS_UNSPECIFIED\",\n \"outcome\": \"OUTCOME_UNSPECIFIED\",\n \"probe_time\": \"2023-11-07T05:31:56Z\"\n },\n \"tenant_meta\": {}\n },\n \"request\": {\n \"force\": true,\n \"update_mask\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
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.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys")
.header("Content-Type", "application/json")
.body("{\n \"object\": {\n \"last_probe\": {\n \"failure_class\": \"AI_FAILURE_CLASS_UNSPECIFIED\",\n \"outcome\": \"OUTCOME_UNSPECIFIED\",\n \"probe_time\": \"2023-11-07T05:31:56Z\"\n },\n \"tenant_meta\": {}\n },\n \"request\": {\n \"force\": true,\n \"update_mask\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.endorlabs.com/v1/namespaces/{object.tenant_meta.namespace}/ai-provider-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"object\": {\n \"last_probe\": {\n \"failure_class\": \"AI_FAILURE_CLASS_UNSPECIFIED\",\n \"outcome\": \"OUTCOME_UNSPECIFIED\",\n \"probe_time\": \"2023-11-07T05:31:56Z\"\n },\n \"tenant_meta\": {}\n },\n \"request\": {\n \"force\": true,\n \"update_mask\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"meta": {
"name": "<string>",
"annotations": {},
"create_time": "2023-11-07T05:31:56Z",
"created_by": "<string>",
"description": "<string>",
"index_data": {
"data": [
"<string>"
],
"search_score": 123,
"tenant": "<string>",
"will_be_deleted_at": "2023-11-07T05:31:56Z"
},
"kind": "<string>",
"parent_kind": "<string>",
"parent_uuid": "<string>",
"references": {},
"tags": [
"<string>"
],
"update_time": "2023-11-07T05:31:56Z",
"updated_by": "<string>",
"upsert_time": "2023-11-07T05:31:56Z",
"version": "<string>"
},
"tenant_meta": {
"namespace": "<string>"
},
"last_probe": {
"failure_class": "AI_FAILURE_CLASS_UNSPECIFIED",
"outcome": "OUTCOME_UNSPECIFIED",
"probe_time": "2023-11-07T05:31:56Z",
"remediation": "<string>"
},
"spec": {
"provider": "PROVIDER_UNSPECIFIED",
"api_key": "<string>",
"api_version": "<string>",
"disabled": true,
"embedding_model_aliases": [
{
"model": "EMBEDDING_MODEL_UNSPECIFIED",
"alias": "<string>"
}
],
"endpoint": "<string>",
"model_aliases": [
{
"model": "AVAILABLE_LLM_UNSPECIFIED",
"alias": "<string>"
}
]
},
"uuid": "<string>"
}{
"code": 123,
"details": [
{
"@type": "<string>"
}
],
"message": "<string>"
}