curl --request PATCH \
--url https://api.ryvo.so/v1/knowledge/documents/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Price list 2026",
"folder_id": "6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d"
}
'import requests
url = "https://api.ryvo.so/v1/knowledge/documents/{id}"
payload = {
"title": "Price list 2026",
"folder_id": "6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({title: 'Price list 2026', folder_id: '6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d'})
};
fetch('https://api.ryvo.so/v1/knowledge/documents/{id}', 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.ryvo.so/v1/knowledge/documents/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Price list 2026',
'folder_id' => '6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d'
]),
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.ryvo.so/v1/knowledge/documents/{id}"
payload := strings.NewReader("{\n \"title\": \"Price list 2026\",\n \"folder_id\": \"6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.ryvo.so/v1/knowledge/documents/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Price list 2026\",\n \"folder_id\": \"6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ryvo.so/v1/knowledge/documents/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Price list 2026\",\n \"folder_id\": \"6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d\"\n}"
response = http.request(request)
puts response.read_body{
"id": "9b1c2d3e-4f50-4a6b-8c7d-0e1f2a3b4c5d",
"title": "Price list 2026.pdf",
"source": "upload",
"source_url": null,
"mime": "application/pdf",
"bytes": 184320,
"status": "ready",
"folder_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"auto_refresh": true,
"last_refreshed_at": "2023-11-07T05:31:56Z",
"last_refresh_error": "<string>",
"chunks": 37,
"agents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "invalid_query",
"message": "limit must be an integer between 1 and 100.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "unauthorized",
"message": "Invalid or revoked API key.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "plan_limit",
"message": "Knowledge base requires the Engine module on your plan.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "not_found",
"message": "Resource not found.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded. Retry in 32s (see the Retry-After header).",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}Update a document
Changes the title, moves the document to a folder (folder_id: null
moves it to the root) or toggles auto_refresh, which only applies
to url documents. Send at least one field.
curl --request PATCH \
--url https://api.ryvo.so/v1/knowledge/documents/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Price list 2026",
"folder_id": "6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d"
}
'import requests
url = "https://api.ryvo.so/v1/knowledge/documents/{id}"
payload = {
"title": "Price list 2026",
"folder_id": "6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({title: 'Price list 2026', folder_id: '6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d'})
};
fetch('https://api.ryvo.so/v1/knowledge/documents/{id}', 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.ryvo.so/v1/knowledge/documents/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Price list 2026',
'folder_id' => '6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d'
]),
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.ryvo.so/v1/knowledge/documents/{id}"
payload := strings.NewReader("{\n \"title\": \"Price list 2026\",\n \"folder_id\": \"6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.ryvo.so/v1/knowledge/documents/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Price list 2026\",\n \"folder_id\": \"6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ryvo.so/v1/knowledge/documents/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Price list 2026\",\n \"folder_id\": \"6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d\"\n}"
response = http.request(request)
puts response.read_body{
"id": "9b1c2d3e-4f50-4a6b-8c7d-0e1f2a3b4c5d",
"title": "Price list 2026.pdf",
"source": "upload",
"source_url": null,
"mime": "application/pdf",
"bytes": 184320,
"status": "ready",
"folder_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"auto_refresh": true,
"last_refreshed_at": "2023-11-07T05:31:56Z",
"last_refresh_error": "<string>",
"chunks": 37,
"agents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "invalid_query",
"message": "limit must be an integer between 1 and 100.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "unauthorized",
"message": "Invalid or revoked API key.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "plan_limit",
"message": "Knowledge base requires the Engine module on your plan.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "not_found",
"message": "Resource not found.",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded. Retry in 32s (see the Retry-After header).",
"request_id": "f0c0a9d2-8b1e-4d8a-9c2f-6e5b7a1d2c3b"
}Autorizaciones
A Bearer token. Create keys in the portal under Settings > API keys
(https://app.ryvo.so/developers). The token has the form
ryvo_live_<64 hex characters> and is shown once.
Header: Authorization: Bearer ryvo_live_...
Parámetros de ruta
The document uuid.
Cuerpo
Respuesta
The document after the update.
"9b1c2d3e-4f50-4a6b-8c7d-0e1f2a3b4c5d"
"Price list 2026.pdf"
upload, url "upload"
null
"application/pdf"
184320
processing, ready, error "ready"
Only meaningful on url documents.
Indexed fragments. The visible proof that the document is searchable.
37
The agents whose published version consults this document, directly or through its folder.
Show child attributes
Show child attributes

