curl --request PUT \
--url https://api.qovery.com/llmProvider/{llmProviderId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "",
"credential": "",
"region": "eu-west-1"
}
'import requests
url = "https://api.qovery.com/llmProvider/{llmProviderId}"
payload = {
"name": "<string>",
"description": "",
"credential": "",
"region": "eu-west-1"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '', credential: '', region: 'eu-west-1'})
};
fetch('https://api.qovery.com/llmProvider/{llmProviderId}', 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.qovery.com/llmProvider/{llmProviderId}",
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([
'name' => '<string>',
'description' => '',
'credential' => '',
'region' => 'eu-west-1'
]),
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.qovery.com/llmProvider/{llmProviderId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.qovery.com/llmProvider/{llmProviderId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qovery.com/llmProvider/{llmProviderId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"description": "<string>",
"type": "CLAUDE",
"has_credential": true,
"scope": "ORGANIZATION",
"owner_user_sub": "<string>",
"owner_name": "<string>",
"region": "<string>"
}Edit an LLM provider
Replace an LLM provider. Sending a blank credential keeps the stored one; sending a nonblank credential rotates it.
curl --request PUT \
--url https://api.qovery.com/llmProvider/{llmProviderId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "",
"credential": "",
"region": "eu-west-1"
}
'import requests
url = "https://api.qovery.com/llmProvider/{llmProviderId}"
payload = {
"name": "<string>",
"description": "",
"credential": "",
"region": "eu-west-1"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '', credential: '', region: 'eu-west-1'})
};
fetch('https://api.qovery.com/llmProvider/{llmProviderId}', 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.qovery.com/llmProvider/{llmProviderId}",
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([
'name' => '<string>',
'description' => '',
'credential' => '',
'region' => 'eu-west-1'
]),
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.qovery.com/llmProvider/{llmProviderId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.qovery.com/llmProvider/{llmProviderId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qovery.com/llmProvider/{llmProviderId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"description": "<string>",
"type": "CLAUDE",
"has_credential": true,
"scope": "ORGANIZATION",
"owner_user_sub": "<string>",
"owner_name": "<string>",
"region": "<string>"
}Authorizations
JWT tokens should be used with OIDC account (human to machine). JWT tokens used by the Qovery console to communicate with the API have a TTL. Curl Example ' curl https://console.qovery.com/organization -H "Authorization: Bearer $qovery_token" '
Path Parameters
LLM Provider ID
Body
LLM provider name, unique per scope owner within the organization
1The LLM vendor this provider authenticates against. Matches the type an agentic workflow's inline model already uses.
CLAUDE, BEDROCK The provider credential. Encrypted at rest and never returned by the API. Blank means unchanged: on create no credential is stored, on edit the stored one is kept. Sending a nonblank value rotates it.
Cannot be changed after creation. On create, omitting it means ORGANIZATION, which requires the MANAGE_INFRASTRUCTURE permission; creating a USER provider requires CREATE_PROJECT. On edit, omitting it leaves the provider's scope unchanged, and stating a scope that differs from the provider's is refused with 400.
ORGANIZATION, USER On edit, omitting it or sending null clears the stored region. This differs from credential, where a blank value keeps the stored one. AWS region the Bedrock client calls, for example us-east-1 or eu-west-1; model availability differs by region. Only allowed for a BEDROCK provider. Any sent string, blank included, must match the pattern. Null keeps the engine default region.
^[a-z]{2}(-gov)?-[a-z]+-[0-9]+$"eu-west-1"
Response
LLM provider edited
The LLM vendor this provider authenticates against. Matches the type an agentic workflow's inline model already uses.
CLAUDE, BEDROCK Whether a credential is stored. The credential itself is never returned.
ORGANIZATION: usable by every member who can edit an agentic workflow. USER: personal to the member who created it; only that member can edit it.
ORGANIZATION, USER Identity of the owning member. Null for an ORGANIZATION provider.
Display name of the owning member. Null for an ORGANIZATION provider.
AWS region of a BEDROCK provider. Null when unset or for CLAUDE.
Was this page helpful?