Saltar al contenido principal

API Reference

Referencia manual

La referencia es manual y se actualiza con cada cambio (regla: internal/docs-playbook.md). En un release futuro se va a generar a partir del spec OpenAPI con docusaurus-plugin-openapi-docs.

Convenciones generales

  • Base URL: definida en KUATIA_API_BASE_URL (ej. http://localhost:3000 en dev).
  • Autenticación: Bearer JWT en header Authorization: Bearer <token>. El JWT lo emite Keycloak (realm por tenant).
  • Paginación: _start, _end, _sort, _order como query params; respuesta incluye header x-total-count.
  • Content-Type: application/json (excepto uploads de archivos y SOAP).
  • Tenant scoping: el tenantId viaja en el JWT y se aplica automáticamente a todos los queries — no se pasa en URL ni body.
  • Permisos: cada endpoint protegido declara @RequirePermission('<modulo>.<Accion>'). Sin el permiso: 403.

Endpoints públicos

MétodoRutaDescripción
GET/auth/realm?user=<email>Resuelve el realm Keycloak por email del usuario (paso 1 del login)
GET/auth/validate-ott?token=<ott>Valida un One-Time Token (Redis TTL 5min) — usado por UI Endpoints con ssoType=OTT
GET/Saludo raíz
GET/healthLiveness + readiness. 200 si los 3 requeridos (Postgres / Mongo / Redis) están OK; 503 en degraded
GET/soap/:id?wsdlWSDL generado dinámicamente para endpoint SOAP inbound
POST/soap/:idRecibe envelope SOAP, valida WS-Security
POST/flow/webhook/:tokenReanuda flujo pausado en nodo esperar_webhook
GET/flow/webhook/:tokenEstado de un FlowWait (WAITING / RESOLVED / EXPIRED)

Autenticados (sin permiso específico)

MétodoRutaDescripción
GET/auth/mePerfil del usuario + roles + permisos efectivos

CRUD estándar

Todos siguen _start/_end/_sort/_order y devuelven x-total-count. Permisos por módulo (List/Read/Create/Update/Delete).

RecursoMódulo de permisoNotas
/accountsaccount.*Search ?q= con Typesense, relation accountType
/account-typesaccount.*Bootstrap: 3 tipos default
/dossiersdossier.*MongoDB, dossierType como select, jerarquía con parentId + path[]
/dossier-typesdossiertype.*PostgreSQL + flowDefinition JSONB, bootstrap "general"
/documentsdocument.*MongoDB, _id=SHA-256 (content-addressed), deduplicación nativa
/document-typesdocumenttype.*PostgreSQL + flowDefinition JSONB (Layer 2), bootstrap "generic"
/taskstask.*Filtra por assignedTo. Reference TASK-YYYY-NNNN auto-generada. Enriquece con dossierState, assignee {displayName, initials}, accounts[]. Scope ?scope=mine|team|all|due|overdue
/tasks/countstask.ListConteos por bin para la bandeja: {all, mine, team, due, overdue}
/tasks/:id/activitytask.ReadTimeline: GET lista entries, POST agrega comentario, DELETE borra propio comentario
/inbox/saved-viewsinbox.SavedView.*CRUD de vistas guardadas per-user. PG inbox_saved_views
/tenantstenant.*Sin DELETE
/usersuser.*Sin CREATE (auto-provision al login)
/credentialscredential.*Secrets nunca en GET; field hasSecret: boolean en su lugar
/external-systemsexternalsystem.*Relation credential
/endpointsendpoint.*Relation system
/ui-endpointsuiendpoint.*5 modos: IFRAME / POPUP / REDIRECT / NEW_TAB / INTERNAL
/mime-handlersmimehandler.*Extractores y visores custom por tenant
/sharesshare.*WebDAV / SFTP / FTPS / SMB / S3. DELETE solo super_admin
/scheduled-reportsscheduledreport.*Reportes cron-driven
/dashboardsdashboard.*Embebe Grafana con SSO; GET /:name/iframe entrega URL firmada
/specialized-processorsspecializedprocessor.*Catálogo de procesadores invocables desde extract_with_processor
/parameter-definitionsparameter.*Definición de parámetros del sistema

Roles y permisos

MétodoRutaPermisoDescripción
POST/roles/:id/permissionsrole.AssignAsignar permiso a rol
DELETE/roles/:id/permissions/:permIdrole.AssignQuitar permiso
POST/roles/:id/usersrole.AssignAsignar usuario a rol
DELETE/roles/:id/users/:userIdrole.AssignQuitar usuario

Parámetros

MétodoRutaPermisoDescripción
GET/parametersparameter.ListResueltos del tenant (con caché Redis 3600s)
GET/parameters/systemparameter.SystemListGlobales (solo super_admin)
PUT/parameters/:keyparameter.UpdateSetear valor tenant
PUT/parameters/system/:keyparameter.SystemUpdateSetear valor global
DELETE/parameters/:keyparameter.UpdateReset al default

Integraciones

MétodoRutaPermisoDescripción
POST/credentials/:id/testcredential.TestProbar credencial (auth contra el endpoint configurado)
POST/endpoints/:id/testendpoint.TestEjecutar test manual del endpoint
GET/endpoints/:id/executionsendpoint.ReadHistorial de ejecuciones del endpoint
GET/executionsendpoint.ReadHistorial global de ejecuciones
GET/executions/:idendpoint.ReadDetalle de ejecución
POST/endpoints/import/curlendpoint.ImportImportar endpoint desde un comando cURL
POST/endpoints/import/swaggerendpoint.ImportImportar múltiples endpoints desde un OpenAPI spec

Asistente AI y RAG

MétodoRutaPermisoDescripción
POST/ai/chatai.UseChat conversacional con LLM (SSE streaming). Body: {message, conversationId?, tools?}
GET/ai/conversationsai.ViewHistoryListar conversaciones del usuario en el tenant
GET/ai/conversations/:idai.ViewHistoryDetalle de conversación con mensajes
GET/ai/modelsai.UseModelos habilitados para el tenant
GET/ai/settingsai.SettingsSettings del tenant (providers, modelo default, system prompt, tools)
PUT/ai/settingsai.SettingsActualizar settings AI del tenant
POST/rag/queryrag.QueryVector search + síntesis con LLM. Body: {query, scopes?}
POST/rag/reindexrag.ReindexEncola reindex de chunks (cola rag-indexing)

Doc-flow (Layer 2)

Sobre /documents/:id:

MétodoRutaPermisoDescripción
POST/flow/startdocument.UpdateArrancar walk. Body opcional {flowDefinitionOverride}
GET/flowdocument.ReadWalk activo o último terminado (history truncado a 20)
POST/flow/tasks/:taskId/completedocument.ReviewBody {outcome?: 'approved'|'rejected', editedFields?: object}
POST/flow/tasks/:taskId/assistant/messagedocument.AssistantReviewEnviar mensaje al asistente IA, devuelve respuesta
POST/flow/tasks/:taskId/assistant/attributedocument.AssistantReviewAgregar atributo libre al doc
DELETE/flow/tasks/:taskId/assistant/attribute/:keydocument.AssistantReviewRollback de atributo agregado en este task

ACL fino

MétodoRutaPermisoDescripción
GET/acl/rulesacl.ViewListar reglas (filtros subjectType, resourceType)
GET/acl/rules/:idacl.ViewDetalle
POST/acl/rulesacl.ManageCrear regla
PATCH/acl/rules/:idacl.ManageModificar
DELETE/acl/rules/:idacl.ManageBorrar
GET/acl/auditacl.ViewAudit chain (hash encadenado SHA-256 + HMAC)
GET/acl/denialsacl.ViewLog de denegaciones

Shares y filesystem gateway

MétodoRutaPermisoDescripción
POST/shares/:id/provisionshare.ProvisionRefrescar provisioning (SFTPGo / rclone / samba)
GET/shares/:id/connection-infoshare.ReadCómo conectarse: hosts, puertos, paths, UNC por protocolo habilitado
POST/fs/sftp/eventHMAC internoWebhook SFTPGo (upload/delete/rename/mkdir)
POST/fs/samba/eventHMAC internoWebhook samba post-write hook

S3 Gateway

9 operaciones S3-compat bajo /s3/* con auth SigV4. Ver integraciones.

Dashboards embebidos

MétodoRutaPermisoDescripción
GET/dashboards/my(cualquier dashboard.View*)Dashboards habilitados para los que el usuario tiene requiredPermission. No expone url ni el permiso
GET/dashboards/:name/iframe(verificado en requiredPermission del dashboard)Devuelve {src, sandbox} para el <DashboardLoader>
ALL/observability/grafana/*pathdashboard.*Reverse proxy autenticado a Grafana con header X-WEBAUTH-USER (auth-proxy SSO)

Operaciones administrativas

MétodoRutaPermisoDescripción
GET/admin/queuesadmin.QueueMonitorBull Board UI embebido
GET/admin/queues/metricsadmin.QueueMonitorMétricas agregadas (depth, throughput, fail rate)
POST/admin/reset-databaseadmin.ResetDatabaseDestructivo: borra datos del tenant. Body {includeConfig?} también borra integraciones
POST/admin/tenants/:id/reseedadmin.TenantReseedEncola re-seed por tenant en cola bootstrap-seed

Errores estándar

Todos los errores siguen el formato NestJS:

{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}

Códigos comunes:

  • 400 — body inválido (validación Class Validator).
  • 401 — sin JWT o expirado.
  • 403 — sin permiso requerido por el endpoint.
  • 404 — recurso no existe (o filtrado por tenant).
  • 409 — conflicto (ej. unique violation).
  • 429 — rate limit.
  • 503/health degraded.