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. 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 |
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.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, "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.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.
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: 50,000 credits = 25,000 documentos ($99/mo)