Skip to main content
March 25
FeatureAPI

v2 Stateful API

The v2 API introduces a stateful layer on top of the existing extraction engine — upload files once, save configs, and reference them across calls using file:// and config:// URIs.
  • File management — upload a file with POST /api/v2/files and receive a file://<uuid> URI. Use that URI in any subsequent parse, extract, batch, or classify call instead of re-uploading the file.
  • Config management — save a named extraction config with POST /api/v2/configs and reference it as config://<uuid>. Supports parse, extract, and classify config types so you can reuse the same schema or prompt across requests without repeating parameters.
  • Parse endpointPOST /api/v2/parse converts documents to markdown or HTML. Accepts a file upload, a URL, or a file:// URI.
  • Extract endpointPOST /api/v2/extract runs structured extraction and returns JSON or CSV. Accepts a file upload, URL, or file:// URI plus an inline config or config:// URI.
  • Classify endpointPOST /api/v2/classify classifies documents by type with optional split mode that identifies page-level document boundaries within a single multi-page file.
  • Batch endpointPOST /api/v2/batch accepts a list of items, each with its own input and config, and returns a per-item result array in one response.

Example: Upload then extract

# 1. Upload the file
FILE_ID=$(curl -s -X POST https://api.nanonets.com/api/v2/files \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@invoice.pdf" | jq -r '.file_id')

# 2. Save a config
CONFIG_ID=$(curl -s -X POST https://api.nanonets.com/api/v2/configs \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Invoice config","type":"extract","params":{"schema":{"invoice_number":"string","total":"number"}}}' \
  | jq -r '.config_id')

# 3. Extract using both URIs
curl -X POST https://api.nanonets.com/api/v2/extract \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"input\": \"$FILE_ID\", \"config\": \"$CONFIG_ID\"}"
March 25
ImprovementsAPI

OCR 3 Engine for JSON Extraction

JSON extraction now uses the NanoNets OCR 3 model, improving accuracy for structured field extraction on dense or complex documents. The upgraded engine is applied automatically for both single-page and multi-page flows — no change to your API calls required.

Automatic Image Unwarping

Documents with physically curved, skewed, or warped pages are now automatically corrected before extraction. The unwarping step runs prior to OCR and significantly improves accuracy on scanned books, photographed receipts, and other non-flat documents.
March 23
Enterprise

AWS Marketplace

Nanonets Extraction API is now available as a SaaS subscription through AWS Marketplace. Marketplace customers can subscribe directly from the AWS console and have usage metered and billed through their existing AWS account.
  • Consolidated billing — charges appear on your AWS invoice alongside other Marketplace subscriptions.
  • Existing Stripe plans unaffected — current Stripe subscribers continue on their existing plan; Marketplace billing is a separate path.
  • Same API, same keys — Marketplace accounts use the same API surface and credentials as direct-signup accounts.
March 17
Feature

New File Format Support

The following file types can now be submitted to all extraction endpoints:
CategoryNew formats
ImagesPSD, PCX, PPM, APNG, CUR, DCX
DocumentsDOTX, WPD
SpreadsheetsXLSM, XLTX, XLTM, QPW
March 9
FeatureAPI

MCP Access and Reusable Extraction Workflows

Since the February 20 updates, Nanonets has added several new ways to connect documents and reuse extraction workflows without resubmitting the same files.
  • Connect AI assistants through the hosted MCP server — use OAuth 2.1 sign-in for Claude and other MCP clients, with built-in document extraction and exploration tools.
  • Reuse existing uploads by record_id — rerun sync, async, streaming, or batch extraction on previously uploaded files instead of sending the same file again.
  • Upload files in one request via /api/v1/upload/file — send multipart form data and get a record_id back immediately for follow-on extraction calls.
  • Embed metadata directly in JSON results — use metadata_options=unified to merge bounding boxes and confidence data into the response structure you consume.
March 5
FeatureUI

Batch File Organization

Files can now be organized into named batches (folders) directly from the Files page.
  • Create and delete batches — give each batch a name and optional description.
  • Move files into batches — assign any uploaded file to a batch using the batch picker.
  • Filter by batch — the Files page filters to show only files in the selected batch, keeping large workspaces organized.

Document Navigation

Multi-page document results now include next/previous page controls:
  • Page navigation — step through pages of extraction results without returning to the file list.
  • JSON viewer improvements — unified metadata fields (value, confidence score, and bounding box) are displayed inline per field. Table results with many rows are paginated at 50 rows per page.

Larger File Uploads

The file upload limit has been increased to 500 MB for paid plans (free plan remains at 50 MB). The limit is now consistent across the API, MCP proxy, and UI upload paths.
February 24
FeatureAPI

TypeScript SDK

The official TypeScript SDK for the Nanonets Extraction API is now available, with full type coverage for all v1 endpoints.
  • Full type coverage — every request and response is typed, including nested objects, enums, and optional fields.
  • Sync and async extraction — call /api/v1/extract/sync, /api/v1/extract/async, /api/v1/extract/batch, and /api/v1/extract/stream with typed parameters.
  • File upload helpers — pass a File, Blob, or ReadStream directly; the SDK handles multipart encoding.
  • Documentation — full usage guide and examples available in the TypeScript SDK docs.
February 20
FeatureUI

Excel Viewer

Extraction results for Excel and spreadsheet files are now displayed in a native viewer directly in the results UI.
  • In-browser spreadsheet rendering — rows, columns, and cell values are rendered in a spreadsheet-style grid without downloading the file.
  • Multi-sheet navigation — documents with multiple sheets show a tab bar; switch between sheets without leaving the results view.
  • Integrated with the results page — the viewer loads automatically when the extracted file is a spreadsheet format.

Excel Extraction Pipeline

Excel files are now processed through a dedicated extraction pipeline that preserves spreadsheet structure in the output.
  • Sheet-aware extraction — each sheet is extracted separately and included in the structured response.
  • Preprocessing step — spreadsheet data is normalized before extraction to improve field and table accuracy.
  • Compatible with existing optionsoutput_format, json_options, and metadata_options all work with Excel inputs.
February 20
FeatureAPI

Python SDK

The official Python SDK for the Nanonets Extraction API is now available, with support for both sync and async usage patterns.
  • Sync and async clients — use NanonetsClient for synchronous calls or AsyncNanonetsClient with asyncio.
  • Typed models — all request and response objects are Pydantic models with IDE autocompletion.
  • File upload support — pass a file path, bytes, or file-like object directly to extraction methods.
  • Documentation — full usage guide and examples available in the Python SDK docs.
February 20
FeatureUI

AI-Powered Schema Generation from Natural Language

You can now generate JSON extraction schemas directly from natural language descriptions in the schema builder interface.
  • Natural language input — describe what you want to extract in plain English instead of manually building complex JSON schemas.
  • One-click generation — click the new schema generation icon in the schema builder and provide a text prompt to instantly generate a valid JSON schema.
  • Automatic validation — generated schemas are validated and can be edited using the visual schema builder or kept as raw JSON.
  • Smart parsing — complex schemas with nested objects and arrays are automatically detected and handled appropriately.

How to Use

  1. Navigate to the Configuration page in your extraction workflow
  2. In the JSON Options schema builder section, click the new Generate Schema from Prompt icon (layers icon) next to the Paste Schema button
  3. Enter a description of your desired schema, for example:
    “I want to extract invoice information including invoice number, date, total amount, customer name, and a list of line items with product name, quantity, and price.”
  4. Click Generate Schema and the AI will create a structured JSON schema matching your requirements
  5. The generated schema automatically populates the schema builder where you can review, edit, or use it directly

Example Input

Extract purchase order data with PO number, vendor name,
order date, delivery address, and line items containing
item description, quantity, unit price, and total price

Generated Schema

{
  "type": "object",
  "properties": {
    "po_number": {
      "type": "string",
      "description": "Purchase order number"
    },
    "vendor_name": {
      "type": "string",
      "description": "Name of the vendor"
    },
    "order_date": {
      "type": "string",
      "format": "date",
      "description": "Date the order was placed"
    },
    "delivery_address": {
      "type": "string",
      "description": "Delivery address"
    },
    "line_items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "item_description": {
            "type": "string",
            "description": "Description of the item"
          },
          "quantity": {
            "type": "number",
            "description": "Quantity ordered"
          },
          "unit_price": {
            "type": "number",
            "description": "Price per unit"
          },
          "total_price": {
            "type": "number",
            "description": "Total price for this line item"
          }
        },
        "required": [
          "item_description",
          "quantity",
          "unit_price",
          "total_price"
        ],
        "additionalProperties": false
      },
      "description": "List of line items in the purchase order"
    }
  },
  "required": [
    "po_number",
    "vendor_name",
    "order_date",
    "delivery_address",
    "line_items"
  ],
  "additionalProperties": false
}
February 20
FeatureAPI

Webhooks

You can now configure a webhook URL to receive the full extraction result automatically when async file processing completes — no polling required.
  • Complete data delivery — the webhook POST payload contains the same result structure as the GET /v1/extract/results/{record_id} API, including all requested formats (markdown, json, csv, html) with metadata.
  • New Webhooks page — configure and manage your webhook URL from the dedicated Webhooks page in the sidebar.
  • Request context included — the payload includes filename, output_format, pages_processed, processing_time, created_at, and the original request_config.

Example Webhook Payload

{
  "event": "file.processed",
  "success": true,
  "record_id": "12345",
  "status": "completed",
  "result": {
    "markdown": {
      "content": "# Invoice\n\n| Item | Amount |\n|---|---|\n| Widget | $50.00 |",
      "metadata": {}
    }
  },
  "processing_time": 2.45,
  "filename": "invoice.pdf",
  "output_format": "markdown",
  "pages_processed": 3,
  "created_at": "2026-02-20T10:30:00.000Z"
}
February 10
FeatureAPI

Document Classification API

You can now classify documents with dedicated endpoints for single-file and high-volume workflows.
  • New /api/v1/classify/sync endpoint — classify a single document and get category, document type, and explanation in one response.
  • New /api/v1/classify/batch endpoint — classify up to 50 files per request for higher-throughput document triage.
  • Routing-ready output — classification labels make it easier to route documents to downstream extraction or review flows.

Bounding Boxes in JSON Responses

Bounding boxes are now supported in JSON extraction responses (output_format=json), for both single-page images and multi-page PDFs.
  • Per-field bounding boxes — each extracted field in the JSON output includes a bounding box mapping back to its location in the source document.
  • Multi-page support — page-aware resolution of bounding boxes.

Example Request

curl -X POST https://api.nanonets.com/api/v1/extract/sync \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@invoice.pdf" \
  -F "output_format=json" \
  -F 'json_options=["invoice_number","total","vendor"]' \
  -F "include_metadata=confidence_score,bounding_boxes"

Example Response

{
  "result": {
    "json": {
      "content": {
        "invoice_number": "INV-2024-001",
        "total": 1250.00,
        "vendor": "Acme Corp"
      },
      "metadata": {
        "confidence_score": { "invoice_number": 98, "total": 95, "vendor": 92 },
        "bounding_boxes": {
          "invoice_number": { "page": 1, "x": 0.62, "y": 0.08, "width": 0.15, "height": 0.02, "confidence": 0.99 },
          "total": { "page": 1, "x": 0.70, "y": 0.85, "width": 0.12, "height": 0.02, "confidence": 0.98 },
          "vendor": { "page": 1, "x": 0.10, "y": 0.12, "width": 0.18, "height": 0.02, "confidence": 0.97 }
        }
      }
    }
  }
}
February 6
FeatureAPI

Word-Level Bounding Boxes

New word-level bounding box extraction for precise per-word coordinate mapping:
  • Block-level (include_metadata=bounding_boxes) — Existing behavior. Returns one bounding box per paragraph or region detected by layout analysis. Ideal for highlighting sections, table rows, or paragraphs.
  • Word-level (include_metadata=bounding_boxes_word) — New. Returns one bounding box per individual word using advanced OCR. Enables fine-grained annotation, search-hit highlighting, and word-by-word document overlays.
Word-level elements include positional metadata (markdown_line, word_offset) that maps each word back to its position in the original markdown, preserving full markdown rendering (tables, headings, formatting) while enabling individual word highlighting.

Response Structure

Both block and word-level bounding box responses follow the same structure:
{
  "result": {
    "markdown": {
      "content": "# Invoice\n\n| Date | Amount |\n| --- | --- |\n| 12/24/18 | $44.78 |",
      "metadata": {
        "bounding_boxes": {
          "success": true,
          "bounding_box_type": "word",
          "elements": [
            {
              "id": "word_0",
              "content": "Invoice",
              "type": "word",
              "page": 1,
              "markdown_line": 0,
              "word_offset": 0,
              "bounding_box": {
                "x": 0.695,
                "y": 0.055,
                "width": 0.051,
                "height": 0.007,
                "confidence": 0.99,
                "page": 1,
                "normalized": true
              }
            }
          ],
          "original_markdown": "# Invoice\n\n| Date | Amount |\n| --- | --- |\n| 12/24/18 | $44.78 |",
          "page_dimensions": { "pages": [{ "page": 1, "width": 1604, "height": 2048 }], "total_pages": 1 }
        }
      }
    }
  }
}
Supports both single-page images and multi-page PDFs.
January 13
FeatureUI

API Playground UI

New interactive web playground for testing document extraction:
  • Output format selection - Choose from Markdown, JSON, CSV/Excel, or HTML output
  • Schema Builder - Visual JSON schema editor with support for nested objects, arrays, and enums up to 10 levels deep
  • Field List mode - Quick extraction with simple field name arrays
  • Metadata options - Enable confidence scores and bounding boxes per field
December 15
FeatureAPI

Streaming Extraction Endpoint

New /v1/extract/stream endpoint for real-time extraction via Server-Sent Events (SSE):
  • Streaming mode - Content delivered in small chunks as it’s generated
  • Batch mode - Content sent all at once when extraction completes
December 8
FeatureAPI

v1 Extraction API

New /v1/extract endpoints with a cleaner, more consistent interface:
  • Sync extraction (/v1/extract/sync) - Process documents synchronously with immediate results
  • Async extraction (/v1/extract/async) - Queue documents for background processing
  • Batch extraction (/v1/extract/batch) - Process up to 50 files in a single request
  • Fetch result (/v1/extract/results/<record_id>) - Fetch the results for a single record_id
  • Results endpoints (/v1/extract/results) - List and retrieve extraction results with pagination
All endpoints support file upload, URL, and base64 input methods.
November 27
FeatureAPI

Multi-Page JSON Extraction with Confidence Scoring

Enhanced JSON extraction now processes multi-page documents and returns responses based on the best confidence score, improving accuracy for complex documents.

Bounding Box Extraction API

New /extract-with-bounding-boxes endpoint that returns extracted data with precise coordinate information for each field, enabling document annotation and validation workflows.

Response Dimensions

API responses now include dimension metadata (width/height) for processed documents, useful for coordinate calculations and rendering.
November 21
FeatureEnterprise

Streaming & Partial Results

  • New streaming extraction endpoint at /v1/extract/stream
  • Partial results API to retrieve in-progress extractions
  • Improved delimiter handling for chunked responses

Billing & Usage APIs

  • Credit usage reporting integration with Stripe
  • Subscription status tracking
  • Document processing limits per plan
November 14
EnterpriseImprovements

On-Premise License APIs

New license management APIs for enterprise on-premise deployments, including activation and validation endpoints.

Repetition Detection & Retry

Improved extraction reliability with automatic retry when repetition patterns are detected in model outputs.

Excel & DOCX Processing

Fixed file processing for Excel spreadsheets and Word documents with improved error handling.
October 17
FeatureAPI

OpenAI-Compatible Chat Completions API

Full OpenAI-compatible /v1/chat/completions endpoint supporting:
  • PDF and document uploads directly in requests
  • All major file types (PDF, Excel, Word, images)
  • Drop-in replacement for OpenAI SDK integrations

Hierarchy Extraction API

New API for extracting document hierarchies and structure, including parent-child relationships and table of contents with linked IDs.
October 10
Improvements

Custom Prompt Instructions

Support for custom prompt instructions in markdown format, allowing fine-tuned extraction behavior for specific use cases.

Expanded File Type Support

Extended support for additional file formats in chat completions:
  • PDF documents
  • Excel spreadsheets (.xlsx, .xls)
  • Word documents (.docx)
  • All major image formats

OpenAI SDK Upgrade

Updated to latest OpenAI SDK version for improved compatibility and performance.

Coming Soon

Batch Processing

Process multiple documents in a single API call with consolidated results.

Webhook Retries

Automatic retry with exponential backoff for failed webhook deliveries.