Skip to main content
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.
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

IP Blocking & Rate Limiting

Enhanced security with IP-based access control middleware and improved rate limiting mechanisms.
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 using nucleus sampling 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.