process_ document
Indíquele la URL de un documento y recibirá JSON estructurado. Los PDF devuelven texto, metadatos incrustados, número de páginas y tablas con líneas; los CSV vuelven como filas; el texto plano y el HTML devuelven su texto. El tipo se detecta a partir de las cabeceras de respuesta, la URL y los propios bytes mágicos del archivo, así que no necesita conocerlo de antemano.
Casos de uso
Ingesta de informes
Convierta los PDF trimestrales en texto y tablas que pueda comparar, indexar o cargar en un almacén de datos.
RAG sobre documentos
Extraiga el texto de artículos y manuales para dividirlo en fragmentos, con el título y el autor ya separados.
Recolección de tablas
Extraiga las tablas con líneas de un PDF como arrays de filas, indicando de qué página procede cada una.
Vigilancia de documentos oficiales
Vigile las publicaciones en PDF de un regulador y analice cada nueva en cuanto aparezca.
Endpoints CSV
Lea un CSV publicado en una URL como texto sin procesar y como filas analizadas, sin descargarlo usted mismo.
Auditorías de metadatos
Recopile el título, el autor, el productor y las fechas incrustados en un conjunto de documentos para encontrar archivos obsoletos o mal etiquetados.
Endpoint
/api/v1/tools/process_documentParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Required | - | El documento que se descargará. Debe ser una URL http o https absoluta y válida. Example: https://example.com/reports/q3-infrastructure.pdf |
document_type | string | Optional | auto | `auto`, `pdf`, `csv`, `txt`, `docx` o `xlsx`. `auto` decide a partir de la cabecera `Content-Type`, la extensión de la URL y los bytes mágicos del archivo. `docx` y `xlsx` pasan la validación pero devuelven 501 en este endpoint. Example: auto |
extract_text | boolean | Optional | true | Devuelve el texto del documento en `text`, junto con `text_length`. Limitado a 200.000 caracteres y, en los PDF, a las primeras 200 páginas; una nota lo indica cuando se alcanza cualquiera de los dos límites. El texto HTML se lee con una línea por elemento de bloque. Example: true |
extract_metadata | boolean | Optional | true | Devuelve las propiedades incrustadas del documento. Los PDF aportan título, autor, asunto, creador, productor y ambas fechas; el HTML aporta título, descripción y autor; los CSV y TXT no llevan ninguna. Example: true |
extract_tables | boolean | Optional | false | Devuelve las tablas con líneas como arrays de filas. Los PDF aportan hasta 20 tablas de 1.000 filas cada una; un CSV vuelve como una única tabla; las páginas HTML reciben una nota que explica que aquí no se extraen tablas. Example: true |
extract_images | boolean | Optional | false | No está disponible en la API REST alojada. Activarlo devuelve `images: null` y una nota que remite al servidor MCP de CrawlForge, en lugar de fingir que no encontró ninguna. Example: false |
timeout | number | Optional | 30000 | Tiempo de espera de la descarga en milisegundos, de 1000 a 60000. El endpoint se ejecuta dentro de una función de 30 segundos, así que la descarga se limita a 20.000 ms sea cual sea el valor que envíe. Example: 30000 |
respect_robots | boolean | Optional | true | Respeta el robots.txt del sitio de destino. Con el valor `true`, una ruta que robots.txt no permita a `CrawlForge` se rechaza con un 403 antes de descargar nada y no se cobran credits. Póngalo en `false` solo para destinos con los que tenga su propio acuerdo: la respuesta incluye entonces una entrada `warnings` y la anulación queda registrada en su API key. Example: true |
max_inline_chars | number | Optional | 40000 | Tamaño máximo del resultado que se devuelve en línea, en caracteres de su JSON (de 1.000 a 10.000.000). Por encima, la respuesta incluye `preview` (los primeros `max_inline_chars` caracteres del campo de texto principal del resultado), `result_handle`, `total_chars`, `truncated: true` y `expires_at`, y [read_result](/docs/api-reference/tools/read-result) lee el resto por 1 credit por llamada. Los resultados almacenados se conservan 1 hora. Example: 40000 |
redact_pii | boolean | object | Optional | false | Elimine los datos personales del texto que devuelve esta llamada, antes de que el resultado se almacene o se envíe de vuelta. `true` es la forma abreviada de `{ mode: "fast" }`: las cuatro clases de expresiones regulares, etiquetadas. Siempre que pida redacción, la respuesta lleva `redaction: { entities, count, mode }` dentro de `data`, incluso cuando no hubo coincidencias (`count: 0`), de modo que «no se encontró nada» nunca se confunde con «se ignoró el parámetro»; una clase sin coincidencias se omite en lugar de informarse como `0`. La redacción se ejecuta **antes** de almacenar el resultado, así que un resultado grande que se lea después con [read_result](/docs/api-reference/tools/read-result) ya viene redactado. Dos límites deliberados: las direcciones (`url`, `link`, `href`, `canonical_url`) nunca se redactan, y los contadores derivados del texto (`content_length`, `word_count`, `character_count`) lo describen tal como se extrajo, antes de la redacción. Example: true |
Límites que conviene conocer
Todos ellos se anuncian en notes en lugar de fallar en silencio.
Content-Length y después con los bytes realmente recibidos, así que una cabecera mentirosa no cuela.page_count sigue informando de la extensión real del documento, y pages_read indica qué páginas se leyeron.notes.Ejemplos de solicitud
curl -X POST https://crawlforge.dev/api/v1/tools/process_document \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/reports/q3-infrastructure.pdf",
"extract_tables": true
}'Ejemplo de respuesta
{ "success": true, "data": { "url": "https://example.com/reports/q3-infrastructure.pdf", "document_type": "pdf", "content_type": "application/pdf", "file_size": 1842665, "processed_at": "2026-08-27T02:27:50.833Z", "page_count": 14, "pages_read": { "start": 1, "end": 14, "count": 14, "total_pages": 14 }, "text": "Q3 Infrastructure Review\n\nRequest volume grew 38% quarter over quarter while p95 latency held flat...", "text_length": 101, "metadata": { "title": "Q3 Infrastructure Review", "author": "Dana Reyes", "subject": "Quarterly capacity planning", "creator": "LaTeX with hyperref", "producer": "pdfTeX-1.40.25", "creation_date": "D:20260812141055Z", "modification_date": "D:20260814093012Z" }, "tables": [ { "page": 4, "rows": 3, "columns": 3, "data": [ [ "Region", "Requests", "p95 ms" ], [ "us-east", "18,204,551", "412" ], [ "eu-west", "9,118,340", "458" ] ] } ] }, "credits_used": 2, "credits_remaining": 998, "processing_time": 4210}data.document_typeEl tipo que determinó la detección, que puede diferir del que solicitódata.content_typeLa cabecera `Content-Type` que envió el servidor, tal cual: a menudo es incorrecta, y por eso también se comprueban los bytes mágicosdata.file_sizeBytes realmente recibidosdata.page_countPáginas del documento. Solo en PDF, y se informa del total aunque solo se hayan leído las primeras 200data.pages_readSolo en PDF, siempre que se lea texto o tablas: las páginas de las que salen, numeradas desde 1 y con ambos extremos incluidos, como `{ start, end, count, total_pages }`data.text_lengthCaracteres de `text` tras cualquier truncamiento, no la extensión completa del documentodata.metadata.creation_dateLas fechas de PDF se devuelven exactamente como están incrustadas, con la forma `D:AAAAMMDDHHmmSS`. Analícelas usted mismodata.tables[].pageLa página en la que se encontró la tabla, para poder rastrear el resultado hasta el originaldata.tables[].columnsSe deriva de las líneas verticales dibujadas en el PDF. Un valor de 1 significa que la tabla no estaba dividida en columnas por líneascredits_used2 credits fijos por documento, sea cual sea su número de páginasManejo de errores
URL no válida (400 Bad Request)
VALIDATION_ERROR. url es obligatorio y debe analizarse como una URL absoluta. El mismo estado cubre un timeout fuera de 1000-60000, un document_type desconocido y una URL que resuelve a una dirección privada o local.
docx o xlsx (501 Not Implemented)
UNSUPPORTED_DOCUMENT_TYPE. Los formatos de Office no se analizan en la API REST alojada. El servidor MCP de CrawlForge (npm: crawlforge-mcp-server) sí los procesa con la misma API key.
Documento demasiado grande (413 Payload Too Large)
DOCUMENT_TOO_LARGE. Supera el límite de 25MB. Se comprueba antes de la descarga y de nuevo después, así que un Content-Length inexacto también se detecta.
Documento inalcanzable (502 Bad Gateway)
DOCUMENT_FETCH_ERROR cuando la URL devolvió un estado distinto de 2xx —el mensaje lo incluye— o FETCH_FAILED cuando falló la propia conexión.
El destino agotó el tiempo de espera (504 Gateway Timeout)
FETCH_TIMEOUT. El documento no llegó dentro del presupuesto de descarga.
El procesamiento falló (500 Internal Server Error)
TOOL_ERROR. Un PDF corrupto o cifrado acaba aquí. Una llamada fallida no se cobra.
Bloqueado por robots.txt (403 Forbidden)
El robots.txt del sitio de destino no permite esta ruta a CrawlForge. Establezca respect_robots: false para anularlo si tiene su propio acuerdo con el destino: la anulación queda registrada en su API key. La anulación no alcanza a un host incluido en la lista de exclusión permanente de CrawlForge, que se rechaza sea cual sea el valor de respect_robots.
Un PDF escaneado es una imagen de texto, así que se analiza correctamente y no devuelve casi nada: page_count parecerá correcto mientras text_length está cerca de cero. Este endpoint no hace OCR; compruebe text_length antes de fiarse del resultado.
Costo en credits
Qué incluye:
Detección de tipo a partir de cabeceras, URL y bytes mágicos
Texto de PDF hasta 200 páginas y 200.000 caracteres
Metadatos incrustados del PDF, incluidas ambas marcas de tiempo
Hasta 20 tablas con líneas, junto con su número de página
Análisis de CSV y extracción de texto plano y HTML
Recomendaciones por plan:
Plan Free: 1,000 credits de prueba por única vez = 500 documentos
Plan Hobby: 5,000 credits = 2,500 documentos ($19/mo)
Plan Professional: 100,000 credits = 50,000 documentos ($99/mo)
Herramientas relacionadas
¿Listo para probar process_document? Regístrese gratis y obtenga 1,000 credits para empezar a crear.