API · knowledge

knowledge operations in the OpenAPI contract that accept an API key.

Updated:

GET /knowledge

Listar los ítems de la base de conocimiento del bot

Sesión con cualquier rol, o API key con config:read. Sin paginación (lista completa del workspace).

  • Authentication: API key or dashboard session
  • Scopes: config:read

Parameters

NameInRequiredTypeDescription
typequeryNostring text, faq, catalog_item, file, web, listing
include_inactivequeryNoboolean default false

Responses

StatusDescription
200Ítems (array<KnowledgeItem>)
defaultError (RFC 9457) (Problem)

POST /knowledge

Crear un ítem de conocimiento (texto, FAQ o ítem de catálogo)

Owner/manager con CSRF, o API key con config:write. Con AI_LIMITS_ENABLED activo, admisión externa puede devolver 429 (ai_limit_reached, ai_usage_uncertain, ai_busy, ai_request_rate_limited). Calcula el embedding (503 si no hay proveedor de embeddings configurado, 502 si falla). Auditado.

  • Authentication: API key or dashboard session
  • Scopes: config:write

Request body (required)

  • application/json: KnowledgeItemCreate

Responses

StatusDescription
201Creado (versión 1) (KnowledgeItem)
409Error (RFC 9457) (Problem)
422Error (RFC 9457) (Problem)
429Error (RFC 9457) (Problem)
502Error (RFC 9457) (Problem)
503Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

PATCH /knowledge/{item_id}

Editar un ítem (nueva versión) o activarlo/desactivarlo

Owner/manager con CSRF, o API key con config:write. Cambiar título o contenido sube version y requiere embedding; con admisión IA activada puede devolver429 ai_limit_reached/ai_usage_uncertain/ai_busy/ai_request_rate_limited sin cambiar el ítem. Cambios de active no usan IA. Auditado.

  • Authentication: API key or dashboard session
  • Scopes: config:write

Parameters

NameInRequiredTypeDescription
item_idpathYesstring (uuid)

Request body (required)

  • application/json: KnowledgeItemUpdate

Responses

StatusDescription
200Ítem actualizado (KnowledgeItem)
404Error (RFC 9457) (Problem)
422Error (RFC 9457) (Problem)
429Error (RFC 9457) (Problem)
502Error (RFC 9457) (Problem)
503Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

DELETE /knowledge/{item_id}

Dar de baja un ítem (baja lógica)

Owner/manager con CSRF, o API key con config:write. El ítem deja de responder en el bot pero se conserva su historial; devuelve el ítem con active=false.

  • Authentication: API key or dashboard session
  • Scopes: config:write

Parameters

NameInRequiredTypeDescription
item_idpathYesstring (uuid)

Responses

StatusDescription
200Ítem dado de baja (KnowledgeItem)
404Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

POST /knowledge/files

Subir un PDF a la base de conocimiento

Owner/manager con CSRF, o API key con config:write. 422 si el PDF es inválido, ilegible o supera el tamaño máximo. El PDF va como cuerpo crudo con Content-Type application/pdf (sin multipart, un archivo por llamada); tamaño máximo acotado por el servidor. Se parte en ítems de tipo file. Admisión IA opt-in puede devolver429 con códigos ai_limit_reached/ai_usage_uncertain/ai_busy/ai_request_rate_limited; una denegación revierte la ingesta.

  • Authentication: API key or dashboard session
  • Scopes: config:write

Parameters

NameInRequiredTypeDescription
filenamequeryYesstring

Request body (required)

  • application/pdf: string

Responses

StatusDescription
201Ítems creados a partir del PDF (array<KnowledgeItem>)
422Error (RFC 9457) (Problem)
429Error (RFC 9457) (Problem)
502Error (RFC 9457) (Problem)
503Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

GET /knowledge/live-queries

GET consulta HTTP en vivo (F2-49)

Solo sesión owner/manager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant/consulta/versión/parámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría.

  • Authentication: API key or dashboard session
  • Scopes: None

Responses

StatusDescription
200Resultado (array<LiveQueryOut>)
defaultError (RFC 9457) (Problem)

POST /knowledge/live-queries

POST consulta HTTP en vivo (F2-49)

Solo sesión owner/manager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant/consulta/versión/parámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría.

  • Authentication: API key or dashboard session
  • Scopes: None

Request body (required)

  • application/json: LiveQueryCreate

Responses

StatusDescription
201Resultado (LiveQueryOut)
defaultError (RFC 9457) (Problem)

PUT /knowledge/live-queries/{query_id}

PUT consulta HTTP en vivo (F2-49)

Solo sesión owner/manager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant/consulta/versión/parámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría.

  • Authentication: API key or dashboard session
  • Scopes: None

Parameters

NameInRequiredTypeDescription
query_idpathYesstring (uuid)

Request body (required)

  • application/json: LiveQueryUpdate

Responses

StatusDescription
200Resultado (LiveQueryOut)
defaultError (RFC 9457) (Problem)

DELETE /knowledge/live-queries/{query_id}

DELETE consulta HTTP en vivo (F2-49)

Solo sesión owner/manager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant/consulta/versión/parámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría.

  • Authentication: API key or dashboard session
  • Scopes: None

Parameters

NameInRequiredTypeDescription
query_idpathYesstring (uuid)

Responses

StatusDescription
200Resultado (LiveQueryOut)
defaultError (RFC 9457) (Problem)

POST /knowledge/live-queries/{query_id}/test

POST consulta HTTP en vivo (F2-49)

Solo sesión owner/manager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant/consulta/versión/parámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría.

  • Authentication: API key or dashboard session
  • Scopes: None

Parameters

NameInRequiredTypeDescription
query_idpathYesstring (uuid)

Request body (required)

  • application/json: LiveQueryTest

Responses

StatusDescription
200Resultado (LiveQueryResult)
defaultError (RFC 9457) (Problem)

POST /knowledge/search

Buscar en la base de conocimiento (lo mismo que ve el bot)

Sesión con cualquier rol, o API key con config:read. Búsqueda semántica; sirve al simulador del panel. Con admisión IA activada puede devolver429 ai_limit_reached/ai_usage_uncertain/ai_busy/ai_request_rate_limited.

  • Authentication: API key or dashboard session
  • Scopes: config:read

Request body (required)

  • application/json: KnowledgeSearch

Responses

StatusDescription
200Resultados ordenados por score (array<KnowledgeSearchHit>)
422Error (RFC 9457) (Problem)
429Error (RFC 9457) (Problem)
502Error (RFC 9457) (Problem)
503Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

GET /knowledge/sources

Listar las fuentes web de la base de conocimiento

Solo sesión (cualquier rol); las API keys no tienen acceso a las fuentes (traen URLs, se mantienen en el panel). Sin paginación (máximo 10 por workspace).

  • Authentication: API key or dashboard session
  • Scopes: None

Responses

StatusDescription
200Fuentes (array<KnowledgeSource>)
defaultError (RFC 9457) (Problem)

POST /knowledge/sources

Registrar una página web o un listado como fuente de conocimiento (F2-47, F2-48)

Solo sesión owner/manager con CSRF. La URL debe ser http(s) pública: se valida contra SSRF (IPs privadas, loopback, link-local/metadata, credenciales en la URL, DNS) y vuelve a validarse en cada traída y en cada redirección; 422 unsafe_source_url si no es válida. La URL tampoco puede llevar secretos en el query (?api_key=…, ?token=… y variantes: 422 unsafe_source_url; las credenciales van por fuera de la URL). No hace la traída: queda pending y el worker la importa en su próximo ciclo (≤ 1 min), una sola página, sin JavaScript, respetando robots.txt, solo text/html/text/plain, tope de tamaño. Los ítems importados son de tipo web y el bot los recibe como dato citado no confiable, nunca como instrucción. Tope de 10 fuentes por workspace (409 knowledge_source_limit_reached); URL repetida 409 knowledge_source_duplicate. Auditado. F2-48: kind = csv, json, rss o sheet registra un listado estructurado (misma traída segura, sin robots.txt, tope 2 MiB y 1000 filas) con mapping declarativo y credentials opcionales (cifradas, nunca devueltas); los ítems son de tipo listing. 422 knowledge_invalid_mapping si el mapeo no es válido. kind=site importa una SECCIÓN: url es el prefijo (p. ej. https://fiuit.com/es/docs); el worker lee el sitemap.xml del dominio (y sus índices), toma solo las URLs del mismo host que cuelgan del prefijo (hasta max_pages, 50 por defecto, máx. 200) y trae cada una con la misma traída segura (SSRF, tamaño, tiempo, robots.txt, sin seguir a otros dominios). Cada refresco agrega las páginas nuevas, actualiza las que cambiaron (hash del contenido) y archiva las que desaparecieron. Sin sitemap: last_error=no_sitemap.

  • Authentication: API key or dashboard session
  • Scopes: None

Request body (required)

  • application/json: KnowledgeSourceCreate

Responses

StatusDescription
201Fuente creada (status=pending) (KnowledgeSource)
409Error (RFC 9457) (Problem)
422Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

GET /knowledge/sources/{source_id}

Ver una fuente web (estado, último refresco, error legible)

Solo sesión (cualquier rol). last_error es un código corto (blocked_address, robots_disallowed, too_large, unsupported_content_type, timeout, empty_content...), nunca el texto de una excepción.

  • Authentication: API key or dashboard session
  • Scopes: None

Parameters

NameInRequiredTypeDescription
source_idpathYesstring (uuid)

Responses

StatusDescription
200Fuente (KnowledgeSource)
404Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

PATCH /knowledge/sources/{source_id}

Cambiar el intervalo de refresco o pausar/reanudar una fuente

Solo sesión owner/manager con CSRF. paused=true detiene el refresco (los ítems ya importados siguen disponibles); paused=false la reanuda y la agenda de inmediato. Auditado.

  • Authentication: API key or dashboard session
  • Scopes: None

Parameters

NameInRequiredTypeDescription
source_idpathYesstring (uuid)

Request body (required)

  • application/json: KnowledgeSourceUpdate

Responses

StatusDescription
200Fuente actualizada (KnowledgeSource)
404Error (RFC 9457) (Problem)
422Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

DELETE /knowledge/sources/{source_id}

Borrar una fuente y los ítems que importó

Solo sesión owner/manager con CSRF. Los ítems manuales no se tocan. Auditado.

  • Authentication: API key or dashboard session
  • Scopes: None

Parameters

NameInRequiredTypeDescription
source_idpathYesstring (uuid)

Responses

StatusDescription
204Borrada
404Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

GET /knowledge/sources/{source_id}/pages

Páginas importadas de una fuente de sección (kind=site)

Solo sesión (cualquier rol). Una fila por página con su estado (ok o archived). Vacío para los demás tipos de fuente.

  • Authentication: API key or dashboard session
  • Scopes: None

Parameters

NameInRequiredTypeDescription
source_idpathYesstring (uuid)

Responses

StatusDescription
200Páginas (array<KnowledgeSourcePage>)
404Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

POST /knowledge/sources/{source_id}/refresh

Pedir un refresco inmediato de una fuente

Solo sesión owner/manager con CSRF. Agenda la fuente para el próximo ciclo del worker y reanuda una pausada (reinicia el contador de errores; si la fuente está en error, el contador se conserva para que los reprogramados cortos no reintenten en bucle); la traída no ocurre dentro de la petición. Devuelve 409 knowledge_source_refresh_cooldown si la última traída exitosa fue hace menos de KNOWLEDGE_REFRESH_COOLDOWN_MINUTES (15 por defecto). Sin cambios en el contenido (mismo content_hash) no se vuelven a generar embeddings. Auditado.

  • Authentication: API key or dashboard session
  • Scopes: None

Parameters

NameInRequiredTypeDescription
source_idpathYesstring (uuid)

Responses

StatusDescription
202Refresco agendado (KnowledgeSource)
404Error (RFC 9457) (Problem)
409Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)

POST /knowledge/sources/preview

Vista previa de un listado, sin guardar (F2-48)

Solo sesión owner/manager con CSRF. Trae el listado con la misma traída segura que el worker y devuelve las primeras filas ya mapeadas (máx. 10), el total leído y las columnas/claves detectadas, para validar el mapeo ANTES de crear la fuente. No guarda nada (ni la fuente ni la credencial) y no devuelve la credencial. Límite: 10 vistas previas por minuto y workspace (429 knowledge_preview_rate_limited). 422 knowledge_listing_failed con reason (código corto: blocked_address, invalid_url, too_large, unsupported_content_type, http_error, timeout, invalid_listing, empty_content, mapping_column_missing, invalid_mapping...) o knowledge_invalid_mapping.

  • Authentication: API key or dashboard session
  • Scopes: None

Request body (required)

  • application/json: KnowledgeSourcePreview

Responses

StatusDescription
200Primeras filas mapeadas (KnowledgeSourcePreviewResult)
422Error (RFC 9457) (Problem)
429Error (RFC 9457) (Problem)
defaultError (RFC 9457) (Problem)