curl --request GET \
--url https://api.cloudhumans.com/claudia/v1/projects/{project}/settings \
--header 'Authorization: Bearer <token>' \
--header 'cloudchat-instance: <cloudchat-instance>'import requests
url = "https://api.cloudhumans.com/claudia/v1/projects/{project}/settings"
headers = {
"cloudchat-instance": "<cloudchat-instance>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'cloudchat-instance': '<cloudchat-instance>', Authorization: 'Bearer <token>'}
};
fetch('https://api.cloudhumans.com/claudia/v1/projects/{project}/settings', 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.cloudhumans.com/claudia/v1/projects/{project}/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"cloudchat-instance: <cloudchat-instance>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cloudhumans.com/claudia/v1/projects/{project}/settings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cloudchat-instance", "<cloudchat-instance>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cloudhumans.com/claudia/v1/projects/{project}/settings")
.header("cloudchat-instance", "<cloudchat-instance>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudhumans.com/claudia/v1/projects/{project}/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cloudchat-instance"] = '<cloudchat-instance>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"name": "acme_support",
"readOnlyPaths": [
"classificationSettings.enabled"
]
}{
"error": "Forbidden: token holds no claim for the requested account"
}{
"error": "Forbidden: token holds no claim for the requested account"
}{
"error": "Forbidden: token holds no claim for the requested account"
}{
"error": "Forbidden: token holds no claim for the requested account"
}Read a project's settings
Every setting of this project your role is allowed to see, as one object. This is also the discovery call for writing: the keys it returns, minus the ones it lists in readOnlyPaths, are exactly the keys updateProjectSettings will accept from you. What you may see is decided per account by CloudChat and resolved on every call, so read this against the account you intend to write through.
curl --request GET \
--url https://api.cloudhumans.com/claudia/v1/projects/{project}/settings \
--header 'Authorization: Bearer <token>' \
--header 'cloudchat-instance: <cloudchat-instance>'import requests
url = "https://api.cloudhumans.com/claudia/v1/projects/{project}/settings"
headers = {
"cloudchat-instance": "<cloudchat-instance>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'cloudchat-instance': '<cloudchat-instance>', Authorization: 'Bearer <token>'}
};
fetch('https://api.cloudhumans.com/claudia/v1/projects/{project}/settings', 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.cloudhumans.com/claudia/v1/projects/{project}/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"cloudchat-instance: <cloudchat-instance>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cloudhumans.com/claudia/v1/projects/{project}/settings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cloudchat-instance", "<cloudchat-instance>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cloudhumans.com/claudia/v1/projects/{project}/settings")
.header("cloudchat-instance", "<cloudchat-instance>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudhumans.com/claudia/v1/projects/{project}/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cloudchat-instance"] = '<cloudchat-instance>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"name": "acme_support",
"readOnlyPaths": [
"classificationSettings.enabled"
]
}{
"error": "Forbidden: token holds no claim for the requested account"
}{
"error": "Forbidden: token holds no claim for the requested account"
}{
"error": "Forbidden: token holds no claim for the requested account"
}{
"error": "Forbidden: token holds no claim for the requested account"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
The CloudChat instance the account lives in, e.g. 4. Sent as a header, and required: with accountId it forms the pair that names exactly one account, which accountId alone does not. listMyCloudChatAccounts returns the value to send here alongside each accountId.
Path Parameters
The ClaudIA project to act on, by name. Get the names from listMyClaudiaProjects — a project these credentials do not cover answers 404, indistinguishable from one that does not exist.
Query Parameters
The CloudChat account whose permissions decide what you may read and write here, e.g. 7. It is permission context, not the resource: the project is named in the path. Only unique within an instance, so it is always read together with the cloudchat-instance header — get the pair from listMyCloudChatAccounts. An account your credentials hold no editing claim for answers 403.
Response
The settings you are allowed to read.
How one ClaudIA project behaves — the same settings the ClaudIA app shows on its settings screens. The set of keys is NOT fixed: it is whatever your role is allowed to see on this account, resolved against CloudChat on every call, so two callers reading the same project can legitimately get different keys. Read this before patching: the keys present here, minus the ones listed in readOnlyPaths, are exactly the keys updateProjectSettings accepts from you. Nested settings arrive as nested objects, and a key is addressed in readOnlyPaths, in the history and in an error as its dotted path (greetingsSettings.staticGreeting).
The project these settings belong to. Always present, whatever your permissions.
"acme_support"
Dotted paths present in this response that you may read but not write. Sending one of them to updateProjectSettings is refused. Absent when there are none. The platform base-prompt modules (basePromptModules.modules.* beyond the client-editable five) and basePromptModules.enabled appear here: readable for diagnosis, never writable.
Dotted paths present in this response that you may read but not write. Sending one of them to updateProjectSettings is refused. Absent when there are none.
["classificationSettings.enabled"]