Skip to Content
APIResumen

API — Resumen

Este playground expone POST /api/analyze como fachada didáctica sobre src/lib/docmind-server.ts, que delega en @dragon708/docmind-node y, para acciones solo PDF o solo DOCX, en helpers de @dragon708/docmind-pdf y @dragon708/docmind-docx. El OCR raster y TIFF multipágina pueden usar @dragon708/docmind-ocr mediante el campo JSON options y las acciones siguientes.

  • No es una API de producto lista para producción (sin versionado ni API keys en este ejemplo).
  • Refleja las acciones de Server test, Client test (SDK en navegador, incl. extractStructuredData), PDF lab (/[locale]/pdf-lab), DOCX lab (/[locale]/docx-lab) y OCR lab (/[locale]/ocr-lab).
  • Desplegar esta ruta en Vercel (u otro Next.js serverless) exige outputFileTracingIncludes / serverExternalPackages para PDF.js y Tesseract—véase Instalación.

Petición

  • Método / URL: POST /api/analyze
  • Content-Type: multipart/form-data

Campos del formulario

CampoObligatorioDescripción
fileSíFichero subido (File en FormData).
actionNo (por defecto analyze)Ver Acciones.
ocrModeSí*off | auto | force. Se mapea a pdf.ocr (y lógica del playground) donde aplique—ver Modo OCR. *La ruta lo valida siempre; envía un valor aunque la acción lo ignore.
languageNoCadena recortada: ocr.langs, pdf.ocrLangs y langs del pipeline. No aplica a detect-kind ni capabilities.
maxPagesNoEntero positivo: tope de páginas PDF desde la 1 donde la ruta lo use (analyze, extract-text, convert-html, extract-structured, acciones PDF.js por página, acciones DOCX que reenvían maxPages, …). Vacío = sin tope.
ocrStrategyNoPipeline OCR PDF: native-first, ocr-only o hybrid, o vacío para el valor por defecto del SDK. Se usa cuando corre OCR (analyze, extract-text, convert-html, extract-structured, pdf-extract-text-by-page, pdf-extract-pages con ocrMode ≠ off).
planIntentNoPara explain-plan: analyzeFile | extractText | extractMetadata | convertToHtml | runOcr | extractStructuredData.
formValuesNoObjeto JSON solo para pdf-fill-form (nombre de campo → string | boolean | string[]). Objeto vacío si no aplica.
docxInclude_structure, docxInclude_headings, …NoValor 1 / true / on activa esa clave en options.docx.include en analyze, extract-text, convert-html, ocr, explain-plan, extract-structured y docx-analyze. Ver src/lib/docxInclude.ts.
optionsNoCadena JSON (objeto) para @dragon708/docmind-ocr en acciones raster (sección siguiente) y para extract-structured (rama imagen: preprocess opcional hacia extractStructuredData). Campos: langs, preprocess, debug, TIFF maxPages / pageSeparator, mimeHint, y (para action=ocr) implementation: "pkg" (o engine: "docmind-ocr" / source: "pkg") para usar ocr() del paquete en lugar de runOcr de Node. Omitido o vacío = {}. JSON inválido → 400.

Acciones

Núcleo (router / facetas)

actionWrapperNotas
analyzeanalyzeServerFileanalyzeFile completo + NodeAnalyzeOptions.
detect-kinddetectServerFileKind{ fileKind }.
extract-textextractServerTextocrMode → pdf.ocr (PDF escaneados: auto / force; en Node, extractText fuerza PDF OCR off si no pasas pdf.ocr).
extract-metadataextractServerMetadataEl playground puede completar número de páginas con getPdfPageCount si el stub de metadatos PDF seguía en pages: 0.
convert-htmlconvertServerToHtmlMismos ocrMode / idioma / maxPages / ocrStrategy que analyze para PDF.
ocrrunServerOcr o serverOcrRasterPor defecto: runOcr de Node (PDF forzado + imagen). Si options marca OCR del paquete (implementation: "pkg", o engine: "docmind-ocr", o source: "pkg"), llama a ocr() de @dragon708/docmind-ocr vía serverOcrRaster.
capabilitiesgetServerCapabilities
explain-planexplainServerAnalysisPlanOpcional planIntent.
extract-structuredextractServerStructuredDataCualquier fileKind: extractStructuredData en Node con pdf.ocr / maxPages / ocrStrategy del formulario, docx.include opcional desde docxInclude_*, imagen: ocr.langs y options.preprocess desde language / options. Forma JSON: StructuredDocumentResult.

Solo PDF (@dragon708/docmind-pdf)

Exige fileKind === "pdf" (si no, 400).

actionHelperFunción
pdf-extract-text-by-pageserverPdfExtractTextByPageTexto por página. Con ocrMode: off = solo capa PDF.js; auto = pipeline native-first; force = estrategia ocrStrategy (por defecto ocr-only).
pdf-extract-pagesserverPdfExtractPagesMismo OCR + metadatos de viewport por página.
extract-pdf-by-page(alias)Igual que pdf-extract-text-by-page.
pdf-outlineserverPdfOutline
pdf-linksserverPdfLinks
pdf-annotationsserverPdfAnnotations
pdf-form-fieldsserverPdfFormFields
pdf-fill-formserverPdfFillFormRequiere formValues JSON.
pdf-flatten-formserverPdfFlattenForm

Solo DOCX

Exige fileKind === "docx" (si no, 400).

actionComportamiento
docx-analyzeanalyzeServerFile + casillas docxInclude_*.
docx-extract-textextractServerText + includes DOCX.
docx-convert-htmlconvertServerToHtml + includes + idioma.
docx-structureAnalyze con include.structure.
docx-headingsinclude.headings.
docx-blocksinclude.blocks.
docx-tablesinclude.tables.
docx-pages-approxinclude.pagesApprox.
docx-images-raw | docx-images-web | docx-images-bothserverExtractImagesFromDocx con mode.

Cruce de formatos: extract-structured también está en las UIs de DOCX lab y PDF lab (mismo valor de action); conviene subir el tipo de archivo acorde para un resultado útil.

Acciones OCR raster (@dragon708/docmind-ocr)

Entrada: bytes de imagen raster o TIFF. El playground usa language como ocr.langs si options.langs va vacío. OCR lab construye options.

actionHelperFunción
ocr (con options pkg)serverOcrRasterFachada ocr(): rasters de una página + enrutado TIFF multipágina.
ocr-detailedserverOcrImageDetailedBloques/líneas, tiempos, options.preprocess opcional.
ocr-tiffserverOcrTiffSolo TIFF multipágina; options.maxPages, options.pageSeparator.
normalize-onlyserverNormalizeImageForOcrMetadatos de normalización; options.debug.returnNormalized: true incluye PNG en base64 en JSON.
preprocess-onlyserverPreprocessImageForOcrMetadatos de preprocess; options.debug.returnPreprocessed: true para PNG base64.

options.preprocess (cuando aplica): grayscale, threshold (0–255), resize: { width?, height?, fit? }, normalize. Ver tipos del paquete PreprocessImageOptions.

Modo OCR según acción

Usa ocrMode → pdf.ocr (o equivalente)Papel
analyze, explain-plan, extract-text, convert-html, extract-structuredMisma política que en el SDK con pdf: { ocr, ocrLangs?, … }.
pdf-extract-text-by-page, pdf-extract-pagesoff: solo texto nativo PDF.js. auto: runPdfOcrPipeline con native-first. force: pipeline según ocrStrategy.
Acciones DOCX basadas en analyzeSe reenvía sharedPdfOpts; en un DOCX puro no afecta el PDF.
detect-kind, capabilities, extract-metadata, ocr (rama Node), estructura PDF sin OCRocrMode sigue siendo obligatorio en el formulario; la acción puede ignorarlo.
ocr (rama pkg), ocr-detailed, ocr-tiff, normalize-only, preprocess-onlyocrMode flexible: valores inválidos o vacíos se tratan como auto (sin 400).

JSON de éxito y binarios DOCX

En respuestas correctas, result pasa por sanitizeDocxBinaryForJson: en imágenes embebidas DOCX se eliminan data / Uint8Array del JSON (sustituidos por dataByteLength) para no inflar la respuesta como { "0": …, "1": … }. Se mantienen cadenas base64 para vistas previas o clientes. Es específico del playground; usa el SDK en proceso si necesitas bytes crudos.

Respuesta de error

{ "success": false, "action": "analyze", "result": null, "error": "Mensaje legible", "code": "codigo_docmind_opcional" }

Si el valor lanzado es DocMindError, se rellena code. Otros fallos pueden devolver HTTP 500 con mensaje genérico.

Ejemplo (curl)

curl -s -X POST "http://localhost:3000/api/analyze" \ -F "action=analyze" \ -F "ocrMode=auto" \ -F "language=eng" \ -F "file=@./muestra.pdf"

(Ajusta origen y ruta a tu servidor de desarrollo.)

Ver también