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": "",
"region": "eu-west-1",
"base_url": "https://llm-gateway.example.com/anthropic"
}
'import requests
url = "https://api.qovery.com/organization/{organizationId}/llmProvider"
payload = {
"name": "<string>",
"description": "",
"credential": "",
"region": "eu-west-1",
"base_url": "https://llm-gateway.example.com/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({
name: '<string>',
description: '',
credential: '',
region: 'eu-west-1',
base_url: 'https://llm-gateway.example.com/anthropic'
})
};
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' => '',
'region' => 'eu-west-1',
'base_url' => 'https://llm-gateway.example.com/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.qovery.com/organization/{organizationId}/llmProvider"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\",\n \"base_url\": \"https://llm-gateway.example.com/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.qovery.com/organization/{organizationId}/llmProvider")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\",\n \"base_url\": \"https://llm-gateway.example.com/anthropic\"\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 \"region\": \"eu-west-1\",\n \"base_url\": \"https://llm-gateway.example.com/anthropic\"\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>",
"base_url": "<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": "",
"region": "eu-west-1",
"base_url": "https://llm-gateway.example.com/anthropic"
}
'import requests
url = "https://api.qovery.com/organization/{organizationId}/llmProvider"
payload = {
"name": "<string>",
"description": "",
"credential": "",
"region": "eu-west-1",
"base_url": "https://llm-gateway.example.com/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({
name: '<string>',
description: '',
credential: '',
region: 'eu-west-1',
base_url: 'https://llm-gateway.example.com/anthropic'
})
};
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' => '',
'region' => 'eu-west-1',
'base_url' => 'https://llm-gateway.example.com/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.qovery.com/organization/{organizationId}/llmProvider"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\",\n \"base_url\": \"https://llm-gateway.example.com/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.qovery.com/organization/{organizationId}/llmProvider")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"\",\n \"credential\": \"\",\n \"region\": \"eu-west-1\",\n \"base_url\": \"https://llm-gateway.example.com/anthropic\"\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 \"region\": \"eu-west-1\",\n \"base_url\": \"https://llm-gateway.example.com/anthropic\"\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>",
"base_url": "<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. CLAUDE and BEDROCK match the type an agentic workflow's inline model already uses. ANTHROPIC_COMPATIBLE is a custom Anthropic-compatible API, such as a gateway, reached at its base_url; a workflow that uses it runs as a CLAUDE model.
CLAUDE, BEDROCK, ANTHROPIC_COMPATIBLE 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. CLAUDE sends it to Anthropic as an API key. ANTHROPIC_COMPATIBLE sends it to its gateway as a bearer token only, never as an API key.
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"
Root of the custom Anthropic-compatible API. Required for an ANTHROPIC_COMPATIBLE provider and refused with 400 for CLAUDE and BEDROCK. It is an absolute HTTP or HTTPS URL with a host and an optional path prefix, and no user info, query or fragment. A port, when given, must be between 1 and 65535. Like region, an edit replaces it: omitting it or sending null is refused for ANTHROPIC_COMPATIBLE, so an edit must resend it.
"https://llm-gateway.example.com/anthropic"
Response
LLM provider created
The LLM vendor this provider authenticates against. CLAUDE and BEDROCK match the type an agentic workflow's inline model already uses. ANTHROPIC_COMPATIBLE is a custom Anthropic-compatible API, such as a gateway, reached at its base_url; a workflow that uses it runs as a CLAUDE model.
CLAUDE, BEDROCK, ANTHROPIC_COMPATIBLE 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.
Root of the custom Anthropic-compatible API of an ANTHROPIC_COMPATIBLE provider. Null for CLAUDE and BEDROCK.
Was this page helpful?