cURL
curl -X POST "https://api.cartesia.ai/agents/documents" \
-H "X-API-Key: your-api-key" \
-H "Cartesia-Version: 2025-04-16" \
-H "Content-Type: application/json" \
-d '{
"folder_id": "folder_abc",
"name": "Return Policy",
"content": "Customers may return any unopened item within 30 days...",
"metadata": {"category": "policy", "audience": "customer"}
}'import requests
url = "https://api.cartesia.ai/agents/documents"
payload = {
"folder_id": "<string>",
"content": "<string>",
"name": "<string>",
"metadata": {}
}
headers = {
"Cartesia-Version": "<cartesia-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Cartesia-Version': '<cartesia-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({folder_id: '<string>', content: '<string>', name: '<string>', metadata: {}})
};
fetch('https://api.cartesia.ai/agents/documents', 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.cartesia.ai/agents/documents",
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([
'folder_id' => '<string>',
'content' => '<string>',
'name' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Cartesia-Version: <cartesia-version>",
"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.cartesia.ai/agents/documents"
payload := strings.NewReader("{\n \"folder_id\": \"<string>\",\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Cartesia-Version", "<cartesia-version>")
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.cartesia.ai/agents/documents")
.header("Cartesia-Version", "<cartesia-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"folder_id\": \"<string>\",\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cartesia.ai/agents/documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Cartesia-Version"] = '<cartesia-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"folder_id\": \"<string>\",\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"content": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"metadata": {}
}Documents
Create Document
Upload a document into a knowledge base folder
POST
/
agents
/
documents
cURL
curl -X POST "https://api.cartesia.ai/agents/documents" \
-H "X-API-Key: your-api-key" \
-H "Cartesia-Version: 2025-04-16" \
-H "Content-Type: application/json" \
-d '{
"folder_id": "folder_abc",
"name": "Return Policy",
"content": "Customers may return any unopened item within 30 days...",
"metadata": {"category": "policy", "audience": "customer"}
}'import requests
url = "https://api.cartesia.ai/agents/documents"
payload = {
"folder_id": "<string>",
"content": "<string>",
"name": "<string>",
"metadata": {}
}
headers = {
"Cartesia-Version": "<cartesia-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Cartesia-Version': '<cartesia-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({folder_id: '<string>', content: '<string>', name: '<string>', metadata: {}})
};
fetch('https://api.cartesia.ai/agents/documents', 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.cartesia.ai/agents/documents",
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([
'folder_id' => '<string>',
'content' => '<string>',
'name' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Cartesia-Version: <cartesia-version>",
"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.cartesia.ai/agents/documents"
payload := strings.NewReader("{\n \"folder_id\": \"<string>\",\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Cartesia-Version", "<cartesia-version>")
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.cartesia.ai/agents/documents")
.header("Cartesia-Version", "<cartesia-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"folder_id\": \"<string>\",\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cartesia.ai/agents/documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Cartesia-Version"] = '<cartesia-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"folder_id\": \"<string>\",\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"content": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"metadata": {}
}Authorizations
Cartesia API key (sk_car_...). Get one at play.cartesia.ai/keys.
Headers
API version header.
Available options:
2026-03-01 Example:
"2026-03-01"
Body
application/json
The folder to upload the document into.
The document text. Maximum 1 MB.
Minimum string length:
1An optional display name for the document.
User-defined string-keyed metadata. Used to filter retrieval at query time.
Show child attributes
Show child attributes
Response
Document created.
The ID of the document.
The document's display name, or null if unnamed.
The full document text.
When the document was uploaded.
User-defined string-keyed metadata.
Show child attributes
Show child attributes
Was this page helpful?
⌘I