curl --request POST \
--url https://api.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"response": "<string>",
"label": "<string>",
"topic": "<string>"
}
'import requests
url = "https://api.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries"
payload = {
"title": "<string>",
"response": "<string>",
"label": "<string>",
"topic": "<string>"
}
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({title: '<string>', response: '<string>', label: '<string>', topic: '<string>'})
};
fetch('https://api.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries', 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/knowledge-bases/{kbId}/entries",
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([
'title' => '<string>',
'response' => '<string>',
'label' => '<string>',
'topic' => '<string>'
]),
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.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"response\": \"<string>\",\n \"label\": \"<string>\",\n \"topic\": \"<string>\"\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.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"response\": \"<string>\",\n \"label\": \"<string>\",\n \"topic\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries")
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 \"title\": \"<string>\",\n \"response\": \"<string>\",\n \"label\": \"<string>\",\n \"topic\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"disabled": false,
"createdAt": "2026-08-10T14:32:05",
"updatedAt": "2026-08-10T18:20:41",
"id": "6683f1c2a4b19e0012ab34cd",
"title": "Prazo de entrega",
"response": "Entregamos em até 5 dias úteis.",
"label": "logistica",
"topic": "Entregas",
"type": "N1"
}{
"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"
}Create a content entry
Add a single piece of content. Use bulk import when loading many at once.
curl --request POST \
--url https://api.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"response": "<string>",
"label": "<string>",
"topic": "<string>"
}
'import requests
url = "https://api.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries"
payload = {
"title": "<string>",
"response": "<string>",
"label": "<string>",
"topic": "<string>"
}
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({title: '<string>', response: '<string>', label: '<string>', topic: '<string>'})
};
fetch('https://api.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries', 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/knowledge-bases/{kbId}/entries",
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([
'title' => '<string>',
'response' => '<string>',
'label' => '<string>',
'topic' => '<string>'
]),
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.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"response\": \"<string>\",\n \"label\": \"<string>\",\n \"topic\": \"<string>\"\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.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"response\": \"<string>\",\n \"label\": \"<string>\",\n \"topic\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudhumans.com/claudia/v1/knowledge-bases/{kbId}/entries")
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 \"title\": \"<string>\",\n \"response\": \"<string>\",\n \"label\": \"<string>\",\n \"topic\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"disabled": false,
"createdAt": "2026-08-10T14:32:05",
"updatedAt": "2026-08-10T18:20:41",
"id": "6683f1c2a4b19e0012ab34cd",
"title": "Prazo de entrega",
"response": "Entregamos em até 5 dias úteis.",
"label": "logistica",
"topic": "Entregas",
"type": "N1"
}{
"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.
Path Parameters
Knowledge base to operate on. Get the ids from listMyKnowledgeBases.
Body
Content to create or replace.
What the content is about — the question it answers.
The answer itself.
Support level this content answers at. INTERACTIVE is rejected.
N1, N2, INTERACTIVE Tag to apply. Omit to leave the content untagged.
Topic to group this content under.
Response
The content as stored.
A piece of content used to answer your customers.
Disabled content stays stored but is not used to answer.
false
When it was created (ISO-8601).
"2026-08-10T14:32:05"
When it last changed (ISO-8601).
"2026-08-10T18:20:41"
Use this id in the single-entry endpoints.
"6683f1c2a4b19e0012ab34cd"
What the content is about — the question it answers.
"Prazo de entrega"
The answer itself.
"Entregamos em até 5 dias úteis."
Tag applied to this content. Empty when untagged.
"logistica"
Topic this content is grouped under.
"Entregas"
Support level this content answers at.
N1, N2, INTERACTIVE "N1"