curl --request POST \
--url https://api-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-workspace-id: <x-workspace-id>' \
--data '
{
"uploadIds": [
"5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50"
]
}
'import requests
url = "https://api-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents"
payload = { "uploadIds": ["5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f", "6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50"] }
headers = {
"x-workspace-id": "<x-workspace-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-workspace-id': '<x-workspace-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
uploadIds: ['5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f', '6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50']
})
};
fetch('https://api-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/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-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/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([
'uploadIds' => [
'5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
'6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-workspace-id: <x-workspace-id>"
],
]);
$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-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents"
payload := strings.NewReader("{\n \"uploadIds\": [\n \"5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f\",\n \"6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-workspace-id", "<x-workspace-id>")
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-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents")
.header("x-workspace-id", "<x-workspace-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"uploadIds\": [\n \"5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f\",\n \"6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-workspace-id"] = '<x-workspace-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"uploadIds\": [\n \"5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f\",\n \"6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"status": "queued",
"documentCount": 123,
"totalSizeBytes": 123,
"agentCount": 123,
"documents": [
{
"id": "<string>",
"name": "<string>",
"sizeBytes": 123,
"url": "<string>"
}
],
"errorMessages": [
"<string>"
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "<string>",
"message": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"code": "<string>",
"message": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"code": "<string>",
"message": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}Añadir documentos a una base existente
Le añade archivos a una base que ya existe, sin rehacerla — rehacerla la desvincularía de todos los agentes que la consultan.
Cero bytes viajan aquí, igual que en el alta: lo que se manda son los uploadId de
subidas ya confirmadas en el namespace knowledge-sources.
Responde 202 y no 200 porque cuando vuelve, los documentos están escritos pero el
proveedor todavía no lo sabe. La base pasa a syncing y el listado la ve volver a
ready.
No pasa a queued, y la diferencia importa si sondeas: queued significa que la
base no existe todavía en el proveedor, y ésta sí existe — lo que pasa es que está
recibiendo material nuevo.
Es idempotente por uploadIds. Un archivo se reclama exactamente una vez, así que
mandar el mismo lote dos veces —doble clic, o un reintento tras un timeout que sí
llegó— devuelve la base sin duplicar nada. Si esos archivos ya se los llevó otra
base, responde 422: no se puede.
El tope de 25 documentos es por base, no por lote. Una base con 20 documentos
rechaza un lote de 10 aunque el lote quepa por sí solo. Para calcular el hueco antes de
pedir las firmas, usa documentCount del detalle: el hueco es 25 - documentCount.
Ese número lo cuenta el proveedor, así que va un poco por detrás mientras algo se está
indexando — el 422 es la palabra final.
curl --request POST \
--url https://api-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-workspace-id: <x-workspace-id>' \
--data '
{
"uploadIds": [
"5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50"
]
}
'import requests
url = "https://api-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents"
payload = { "uploadIds": ["5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f", "6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50"] }
headers = {
"x-workspace-id": "<x-workspace-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-workspace-id': '<x-workspace-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
uploadIds: ['5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f', '6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50']
})
};
fetch('https://api-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/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-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/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([
'uploadIds' => [
'5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
'6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-workspace-id: <x-workspace-id>"
],
]);
$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-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents"
payload := strings.NewReader("{\n \"uploadIds\": [\n \"5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f\",\n \"6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-workspace-id", "<x-workspace-id>")
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-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents")
.header("x-workspace-id", "<x-workspace-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"uploadIds\": [\n \"5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f\",\n \"6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-prod.studio.getsupervisor.ai/v1/knowledge-bases/{knowledgeBaseId}/documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-workspace-id"] = '<x-workspace-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"uploadIds\": [\n \"5f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f\",\n \"6a2d3e4f-5b6c-4d7e-8f90-0b1c2d3e4f50\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"status": "queued",
"documentCount": 123,
"totalSizeBytes": 123,
"agentCount": 123,
"documents": [
{
"id": "<string>",
"name": "<string>",
"sizeBytes": 123,
"url": "<string>"
}
],
"errorMessages": [
"<string>"
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "<string>",
"message": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"code": "<string>",
"message": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"code": "<string>",
"message": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Identificador del workspace multi-tenant.
Path Parameters
Identificador de la base en Agents Studio.
Body
Los archivos que se le añaden a una base que ya existe. Cero bytes, igual que en el alta: lo que viaja son referencias a objetos que ya están en el almacén y ya se verificaron.
De 1 a 25 archivos confirmados, sin repetir. El máximo acota el lote; el tope de verdad es por base y se comprueba contra los documentos que ya tiene.
1 - 25 elementsResponse
Aceptado. Los documentos están escritos y la base quedó en syncing; el indexado
ocurre después.
Identificador de la base en Agents Studio. La referencia interna del proveedor no se publica.
queued: dada de alta, todavía no existe en el proveedor. syncing: el proveedor
la está indexando. ready: el agente ya puede consultarla. error: el indexado
falló, y errorMessages dice por qué.
queued, syncing, ready, error Cuántos agentes del workspace consultan esta base. Cuenta agentes, no conexiones: un agente con dos conexiones a la misma base suma uno.
Cero significa que ninguno la consulta, y por tanto que retirarla no cambia el comportamiento de nadie.
Vacío en el listado a propósito. Los documentos los tiene el proveedor y traerlos costaría una llamada por elemento de la página. Vienen en el detalle.
Show child attributes
Show child attributes
Vacío salvo que status sea error.
