curl --request POST \
--url https://api.qovery.com/organization/{organizationId}/llmProvider \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "",
"credential": ""
}
'import requests
url = "https://api.qovery.com/organization/{organizationId}/llmProvider"
payload = {
"name": "<string>",
"description": "",
"credential": ""
}
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({name: '<string>', description: '', credential: ''})
};
fetch('https://api.qovery.com/organization/{organizationId}/llmProvider', 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/organization/{organizationId}/llmProvider",
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>',
'description' => '',
'credential' => ''
]),
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/organization/{organizationId}/llmProvider"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\"\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.qovery.com/organization/{organizationId}/llmProvider")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qovery.com/organization/{organizationId}/llmProvider")
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 \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\"\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>"
}Create an LLM provider
Configure a reusable LLM provider for an organization.
curl --request POST \
--url https://api.qovery.com/organization/{organizationId}/llmProvider \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "",
"credential": ""
}
'import requests
url = "https://api.qovery.com/organization/{organizationId}/llmProvider"
payload = {
"name": "<string>",
"description": "",
"credential": ""
}
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({name: '<string>', description: '', credential: ''})
};
fetch('https://api.qovery.com/organization/{organizationId}/llmProvider', 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/organization/{organizationId}/llmProvider",
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>',
'description' => '',
'credential' => ''
]),
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/organization/{organizationId}/llmProvider"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\"\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.qovery.com/organization/{organizationId}/llmProvider")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qovery.com/organization/{organizationId}/llmProvider")
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 \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\"\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>"
}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
Organization 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 Response
LLM provider created
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.
Was this page helpful?