API DOCUMENTATION
Nural+ Extractor API
Convert any document into clean, structured JSON. Upload PDFs, Word docs, spreadsheets, presentations, images — and get normalized, chunked content ready for LLMs and AI pipelines.
Base URL
https://neural-extarctor.netlify.appVersion
v1Auth
None requiredEndpoint
POST
/api/v1/extractUpload one or more files and receive structured extraction results as JSON. Files are processed in parallel with per-file error isolation.
Max File Size
50 MB per file
Max Duration
60 seconds
Batch Upload
Multiple files per request
CORS
All origins allowed
Request
Headers
| Header | Value | Required |
|---|---|---|
Content-Type | multipart/form-data | Required |
Form Fields
| Field | Type | Description |
|---|---|---|
files | File(s) | One or more files to extract. Use the same field name for batch uploads. |
Response
Top-Level Fields
| Field | Type | Description |
|---|---|---|
apiVersion | string | Always "v1" |
timestamp | string | ISO-8601 timestamp of the response |
totalFiles | number | Number of files submitted |
successful | number | Number of successfully extracted files |
failed | number | Number of failed extractions |
results | ExtractionResult[] | Per-file extraction results |
Example Response
json
{
"apiVersion": "v1",
"timestamp": "2026-03-02T12:00:00.000Z",
"totalFiles": 2,
"successful": 1,
"failed": 1,
"results": [
{
"success": true,
"document": {
"documentId": "550e8400-e29b-41d4-a716-446655440000",
"fileName": "report.pdf",
"mimeType": "application/pdf",
"metadata": { "pageCount": 12 },
"chunks": [
{
"id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"type": "heading",
"text": "Introduction",
"page": 1
},
{
"id": "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
"type": "paragraph",
"text": "This report covers the quarterly results...",
"page": 1,
"section": "Introduction"
}
]
}
},
{
"success": false,
"fileName": "corrupt.pdf",
"error": "Failed to parse PDF: Invalid header"
}
]
}Schema
ExtractedDocument
| Field | Type | Description |
|---|---|---|
documentId | string (UUID) | Unique identifier for this extraction |
fileName | string | Original file name |
mimeType | string | Detected MIME type |
metadata | object | File-level metadata (pageCount, sheetCount, etc.) |
chunks | ContentChunk[] | Ordered list of content chunks |
ContentChunk
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Unique chunk identifier |
type | string | One of: "heading", "paragraph", "table", "list" |
text | string | Extracted and normalized text content |
page | number? | Source page number (1-indexed), if applicable |
section | string? | Logical section or slide name, if available |
Supported Formats
| Format | Extensions | MIME Type | Library |
|---|---|---|---|
.pdf | application/pdf | pdfjs-serverless | |
| Word | .docx, .doc | application/vnd.openxml...document | mammoth |
| Excel | .xlsx, .xls | application/vnd.openxml...sheet | exceljs |
| CSV / TSV | .csv, .tsv | text/csv, text/tab-separated-values | csv-parse |
| PowerPoint | .pptx, .ppt | application/vnd.openxml...presentation | jszip |
| HTML | .html, .htm | text/html | built-in |
| Images | .png, .jpg, .jpeg, .webp, .tiff, .gif, .bmp | image/* | sharp + Tesseract.js |
Examples
cURL — Single File
bash
curl -X POST https://neural-extarctor.netlify.app/api/v1/extract \
-F "files=@report.pdf"cURL — Batch Upload
bash
curl -X POST https://neural-extarctor.netlify.app/api/v1/extract \
-F "files=@report.pdf" \
-F "files=@data.xlsx" \
-F "files=@notes.docx"JavaScript / Fetch
javascript
const formData = new FormData();
formData.append("files", fileInput.files[0]);
const response = await fetch("/api/v1/extract", {
method: "POST",
body: formData,
});
const data = await response.json();
console.log(data.results);Python
python
import requests
url = "https://neural-extarctor.netlify.app/api/v1/extract"
files = [
("files", ("report.pdf", open("report.pdf", "rb"), "application/pdf")),
("files", ("data.xlsx", open("data.xlsx", "rb"),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")),
]
response = requests.post(url, files=files)
print(response.json())GET — Service Discovery
bash
curl https://neural-extarctor.netlify.app/api/v1/extractThe GET endpoint returns supported formats, limits, and usage info — useful for health checks and integration discovery.
Error Handling
| Status | Condition | Description |
|---|---|---|
| 200 | Success (even partial) | All or some files extracted. Check results[i].success per file. |
| 400 | No files provided | Request had no files in the 'files' form field. |
| 415 | Wrong content type | Expected multipart/form-data. |
| 500 | Server error | Unhandled internal error. |
Per-file isolation: Even on a
200 response, individual files may have failed. Always check results[i].success for each file in the response.MIME fallback: If the browser sends
application/octet-stream, the API automatically detects MIME type from the file extension.