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.app
Version
v1
Auth
None required

Endpoint

POST
/api/v1/extract

Upload 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

HeaderValueRequired
Content-Typemultipart/form-dataRequired

Form Fields

FieldTypeDescription
filesFile(s)One or more files to extract. Use the same field name for batch uploads.

Response

Top-Level Fields

FieldTypeDescription
apiVersionstringAlways "v1"
timestampstringISO-8601 timestamp of the response
totalFilesnumberNumber of files submitted
successfulnumberNumber of successfully extracted files
failednumberNumber of failed extractions
resultsExtractionResult[]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

FieldTypeDescription
documentIdstring (UUID)Unique identifier for this extraction
fileNamestringOriginal file name
mimeTypestringDetected MIME type
metadataobjectFile-level metadata (pageCount, sheetCount, etc.)
chunksContentChunk[]Ordered list of content chunks

ContentChunk

FieldTypeDescription
idstring (UUID)Unique chunk identifier
typestringOne of: "heading", "paragraph", "table", "list"
textstringExtracted and normalized text content
pagenumber?Source page number (1-indexed), if applicable
sectionstring?Logical section or slide name, if available

Supported Formats

FormatExtensionsMIME TypeLibrary
PDF.pdfapplication/pdfpdfjs-serverless
Word.docx, .docapplication/vnd.openxml...documentmammoth
Excel.xlsx, .xlsapplication/vnd.openxml...sheetexceljs
CSV / TSV.csv, .tsvtext/csv, text/tab-separated-valuescsv-parse
PowerPoint.pptx, .pptapplication/vnd.openxml...presentationjszip
HTML.html, .htmtext/htmlbuilt-in
Images.png, .jpg, .jpeg, .webp, .tiff, .gif, .bmpimage/*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/extract

The GET endpoint returns supported formats, limits, and usage info — useful for health checks and integration discovery.

Error Handling

StatusConditionDescription
200Success (even partial)All or some files extracted. Check results[i].success per file.
400No files providedRequest had no files in the 'files' form field.
415Wrong content typeExpected multipart/form-data.
500Server errorUnhandled 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.