Skip to content

Documentos API

La Documents API permite subir, gestionar y consultar los documentos indexados en la plataforma. Cada documento atraviesa una pipeline de procesamiento automatico que lo hace disponible para la busqueda semantica.

Upload

Upload individual

POST /api/documents/upload
Content-Type: multipart/form-data
CampoTipoObligatorioDescripcion
fileFileSiDocumento a subir
topicIdstringNoCategoria de destino
descriptionstringNoDescripcion del documento
confidentialitystringNoNivel: public, internal, confidential

Ejemplo:

bash
curl -X POST https://api.queria.pro/api/documents/upload \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -F "file=@contrato_suministro.pdf" \
  -F "topicId=topic_123" \
  -F "description=Contrato anual proveedor ABC" \
  -F "confidentiality=internal"

Respuesta:

json
{
  "success": true,
  "data": {
    "id": "doc_8f3a2b1c",
    "name": "contrato_suministro.pdf",
    "mimeType": "application/pdf",
    "size": 2458624,
    "status": "UPLOADED",
    "topicId": "topic_123",
    "message": "Documento subido, procesamiento iniciado",
    "createdAt": "2026-03-04T10:30:00Z"
  }
}

Upload multiple

POST /api/documents/upload-multiple
Content-Type: multipart/form-data

Soporta hasta 10 archivos simultaneos. Cada archivo se procesa en paralelo.

CampoTipoDescripcion
files[]File[]Array de documentos (max 10)
topicIdstringCategoria comun para todos los archivos

Respuesta:

json
{
  "success": true,
  "data": {
    "uploaded": 3,
    "documents": [
      { "id": "doc_001", "name": "File1.pdf", "status": "UPLOADED" },
      { "id": "doc_002", "name": "File2.docx", "status": "UPLOADED" },
      { "id": "doc_003", "name": "File3.xlsx", "status": "UPLOADED" }
    ]
  }
}

Import desde URL

POST /api/documents/upload-url
json
{
  "url": "https://ejemplo.com/docs/informe-2025.pdf",
  "topicId": "topic_123",
  "description": "Informe anual descargado del portal"
}

Limites de tamano

FormatoTamano maximo
PDF50 MB
DOCX, XLSX, PPTX25 MB
TXT, CSV, MD10 MB
HTML5 MB

Uploads simultaneos maximos: 10 archivos por peticion. Rate limit: 10 uploads por minuto.

Listar y buscar

GET /api/documents

Query parameters:

ParametroTipoDefaultDescripcion
pagenumber1Pagina actual
limitnumber20Resultados por pagina (max 100)
searchstring-Busqueda en nombre y descripcion
statusstring-Filtra por estado: UPLOADED, PROCESSING, VECTORIZED, ERROR
topicIdstring-Filtra por categoria
mimeTypestring-Filtra por tipo de archivo
sortstringcreatedAtCampo de ordenacion: name, createdAt, updatedAt
orderstringdescDireccion: asc o desc

Ejemplo:

bash
curl -X GET "https://api.queria.pro/api/documents?status=VECTORIZED&topicId=topic_123&limit=10" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Respuesta:

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "doc_8f3a2b1c",
        "name": "contrato_suministro.pdf",
        "originalName": "contrato_suministro.pdf",
        "mimeType": "application/pdf",
        "size": 2458624,
        "status": "VECTORIZED",
        "chunkCount": 47,
        "topicId": "topic_123",
        "topicName": "Contratos",
        "createdAt": "2026-03-04T10:30:00Z",
        "updatedAt": "2026-03-04T10:31:15Z"
      }
    ],
    "pagination": { "page": 1, "limit": 10, "total": 156, "totalPages": 16 }
  }
}

Detalle del documento

Informacion del documento

GET /api/documents/:id
json
{
  "success": true,
  "data": {
    "id": "doc_8f3a2b1c",
    "name": "contrato_suministro.pdf",
    "originalName": "contrato_suministro.pdf",
    "mimeType": "application/pdf",
    "size": 2458624,
    "status": "VECTORIZED",
    "topicId": "topic_123",
    "topic": {
      "id": "topic_123",
      "name": "Contratos",
      "color": "#3B82F6"
    },
    "description": "Contrato de suministro de servicios",
    "chunkCount": 47,
    "pageCount": 12,
    "processingInfo": {
      "ocrUsed": false,
      "language": "es",
      "processingTime": 15234
    },
    "createdAt": "2026-03-04T10:30:00Z",
    "updatedAt": "2026-03-04T10:31:15Z"
  }
}

Chunks del documento

GET /api/documents/:id/chunks

Devuelve los fragmentos de texto indexados con sus metadatos.

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "chk_001",
        "content": "Art. 1 - Objeto del contrato. El presente acuerdo...",
        "chunkType": "ARTICLE",
        "chunkIndex": 0,
        "page": 1,
        "metadata": {
          "charCount": 680,
          "tokenCount": 180
        }
      }
    ],
    "pagination": { "page": 1, "limit": 20, "total": 47, "totalPages": 3 }
  }
}

Estado de procesamiento

GET /api/documents/:id/status
json
{
  "success": true,
  "data": {
    "id": "doc_8f3a2b1c",
    "status": "PROCESSING",
    "currentStep": "EMBEDDING",
    "progress": 72,
    "steps": [
      { "name": "PARSING", "status": "completed", "duration": 1200 },
      { "name": "CHUNKING", "status": "completed", "duration": 800, "chunksCreated": 47 },
      { "name": "EMBEDDING", "status": "in_progress", "progress": 72 },
      { "name": "STORAGE", "status": "pending" }
    ]
  }
}

Estados del documento

Un documento atraviesa los siguientes estados durante el procesamiento:

UPLOADED --> PROCESSING --> VECTORIZED
                |
                +--> ERROR
EstadoDescripcion
UPLOADEDArchivo recibido, en espera de procesamiento
PROCESSINGPipeline activo (parsing, chunking, embedding, storage)
VECTORIZEDProcesamiento completado, documento disponible para la busqueda
ERRORError durante el procesamiento

Fases de la pipeline: PARSING -> CHUNKING -> EMBEDDING -> STORAGE.

Gestion

Actualizar metadatos

PUT /api/documents/:id
json
{
  "topicId": "topic_789",
  "description": "Descripcion actualizada del documento",
  "confidentiality": "confidential"
}

Eliminar documento

DELETE /api/documents/:id

Elimina el documento, todos los chunks asociados y los vectores de la base de datos vectorial.

Eliminacion multiple

DELETE /api/documents
json
{
  "documentIds": ["doc_8f3a2b1c", "doc_4d5e6f7g", "doc_1a2b3c4d"]
}

Reprocesar documento

POST /api/documents/:id/reprocess

Relanza la pipeline de procesamiento. Util tras actualizaciones a la configuracion de chunking o embedding.

json
{
  "success": true,
  "data": {
    "id": "doc_8f3a2b1c",
    "status": "PROCESSING",
    "message": "Reprocesamiento iniciado"
  }
}

Descarga y vista previa

Descarga original

GET /api/documents/:id/download

Devuelve el archivo original con las cabeceras Content-Disposition apropiadas.

Vista previa

GET /api/documents/:id/preview?page=1
json
{
  "success": true,
  "data": {
    "totalPages": 12,
    "currentPage": 1,
    "content": "Texto extraido de la pagina...",
    "previewUrl": "/api/documents/doc_8f3a2b1c/preview-image?page=1"
  }
}

Generacion de documentos

Queria incluye un motor de generacion de documentos basado en templates.

Lista templates

GET /api/doc-engine/templates

Schema template

GET /api/doc-engine/templates/:id/schema

Devuelve el schema de los campos requeridos para el rendering.

Rendering documento

POST /api/doc-engine/render
json
{
  "templateId": "tpl_report_standard",
  "data": {
    "titulo": "Informe Trimestral Q1 2026",
    "autor": "Mario Rossi",
    "secciones": [
      { "titulo": "Resumen", "contenido": "..." },
      { "titulo": "Analisis", "contenido": "..." }
    ]
  },
  "format": "docx"
}

Devuelve el archivo DOCX generado como descarga directa.

Errores comunes

CodigoErrorDescripcion
400INVALID_FILE_TYPEFormato de archivo no soportado
413FILE_TOO_LARGEEl archivo supera el tamano maximo
422PROCESSING_ERRORError durante el procesamiento del documento

Webhook (Coming Soon)

Eventos de documento para notificaciones asincronas:

EventoDescripcion
document.uploadedDocumento subido
document.vectorizedProcesamiento completado
document.errorError de procesamiento

Queria - Document Intelligence con Cog-RAG