APIDOCINSPECT

A document in. Ready-to-use data out.

An invoice, a delivery note, a contract, a drawing — any document reaches your system already broken into fields: amounts, company details, line items, dates. No retyping, no parser per template.

СЧЕТ № 214от 3 июля 2026 г.ПОСТАВЩИКООО «Стальпро»ИНН 7714563214 / КПП 771401001ПОКУПАТЕЛЬООО «Балтийский склад»ИНН 7805419375НАИМЕНОВАНИЕКОЛ-ВОСУММАСтеллаж СТ-120012214 800,00Тележка гидравлическая3187 560,00Итого: 402 360,00 ₽В т.ч. НДС 20 %: 67 060,00 ₽РуководительООО «СТАЛЬПРО»г. МоскваСчет действителен до 17.07.2026
POST/v1/process
200 OK
{
"result": {
"number": "214",
"supplier": { "name": "ООО «Стальпро»", "inn": "7714563214" },
"customer": { "name": "ООО «Балтийский склад»", "inn": "7805419375" },
"items": [
{ "service_type": "Стеллаж СТ-1200", "quantity": 12, "amount": 214800.00 },
{ "service_type": "Тележка гидравлическая", "quantity": 3, "amount": 187560.00 }
],
"total_amount": 402360.00,
"vat_amount": 67060.00
},
"usage": { "pages": 1, "sheets": 1 },
"metadata": { "extraction_status": "full", "cached": false },
"warnings": []
}

Your first call, on your stack

curl -X POST https://api.docinspect.ru/v1/process \
-H "X-API-Key: $DOCINSPECT_API_KEY" \
-F "file=@invoice.pdf" \
-F "prompt=Extract the invoice fields" \
-F 'output_schema={
"type": "object",
"properties": {
"supplier": {"type": "object", "properties": {
"name": {"type": "string"}, "inn": {"type": "string"}}},
"total_amount": {"type": "number"}
}
}'
01

Any document, one way of working

Invoices, acts, delivery notes, contracts, drawings and scans all go through one interface. A new supplier template needs no development: the model reads it, not a rigid parser.

02

Seconds instead of hours of retyping

A standard invoice is parsed in under a second. Complex scans and unusual forms are handled by the model — the flow does not stall on an odd document.

03

Personal data never leaves your side

Names, company details and addresses are scrubbed before the model is called — the argument your security team asks for. If the scrub cannot be guaranteed, the request does not leave at all.

One endpoint for all document work

POST /v1/process takes a file and does the whole job: splits a batch into documents, extracts data in your shape, ties every value to its page. One endpoint for every task — the request fields define what to do.

POST/v1/process

Describe the task in words

A file, a prompt and a response schema. Classification, extraction, version diffing and risk analysis are different prompts, not different endpoints.

fieldoutput_schema

Extraction against a JSON schema

You define the shape of the response. A broken tax ID or totals that do not match the line items arrive as a warning in the same response, not at the quarter-end reconciliation.

fieldsplit

One PDF, 14 documents inside

A stack of paperwork often gets scanned into a single file. Splitting it is the easy part: every document found is also recognised (invoice, act, delivery note) and broken into data — details, line items, totals. One request, and instead of a merged scan you get ready records for your accounting system.

fieldinclude: fragments

Every figure links to its page

Each extracted value carries the number of the page it was taken from. A doubtful amount or date takes seconds to verify: open the referenced page and compare with the original — no leafing through the whole document.

The engine reads how a document is built, not just its text

The core of the API is built from scratch: the engine reconstructs a document as structure. Tables, merged cells, row-and-column links, the contents of every field. This is exactly where generic recognizers break.

ВЕДОМОСТЬ МАТЕРИАЛОВНаименованиеКол.Ед.Масса, кгЛист горячекатаный12шт.96,4Швеллер 12П8м74,26м55,6Итого по разделу226,2rowspan 2colspan 3
structure
{
  "rows": 5, "cols": 4,
  "merges": [
    { "r": 2, "c": 0, "rowspan": 2,
      "text": "Channel 12P" },
    { "r": 4, "c": 0, "colspan": 3,
      "text": "Section total" }
  ],
  "cells": 17
}

Tables and merged cells

Merges, headers and boundaries come back as a precise grid, not as a stream of text.

Links and contents

Every cell knows its row, column and value: the data is ready for reconciliation and accounting import.

A closed core

Built in-house under a closed license, not a wrapper around off-the-shelf libraries. Quality does not depend on someone else's releases.

Reads scans and photos, keeps tables intact

A scan, a warehouse photo or a hundred-row table reads as reliably as a clean PDF. Recognised text is not taken on faith: rows and columns keep their structure, totals and details are cross-checked, and doubtful spots are flagged right in the response.

Formats: PDF, DOCX, XLSX, JPG, PNG, WebP, TIFF. Limit: 50 MB.

A bad scan never fails silently: the API scores the source quality and says plainly which document is worth rescanning.

markdown
| Item              |     Amount |
|-------------------|-----------:|
| Rack ST-1200      | 214,800.00 |
| Hydraulic trolley | 187,560.00 |

Personal data never reaches the external LLM

Before every external call the NDA boundary scrubs out company names, tax IDs, people and addresses. The model works on placeholders; real values are restored locally in the response.

your document

Contract party
ООО «Стальпро»
Tax ID (INN)
7714563214
Signatory
A. V. Kozintseva
Address
Moscow, Skladochnaya 3
NDA

what the external LLM sees

Contract party
{ORG_1}
Tax ID (INN)
{INN_1}
Signatory
{PERSON_1}
Address
{ADDR_1}

422 ANONYMIZATION_INCOMPLETE

fail_closed mode

If the scrubber cannot guarantee a clean payload, the request simply does not leave. You get a 422 with category counters, not a leak.

152-ФЗ

An argument for your security team

De-identification happens before any third party sees the data: the compliance requirement is closed by architecture, not by a clause in a contract.

From a drawing set to a ready bill of materials

The API reads a framed sheet with a title block: item numbers, designations, materials and quantities become a BOM table matching your schema. One call instead of retyping into a spreadsheet.

Works on a stack of sheets too: async walks a whole drawing set in a single request.

A 91-page contract: one call

async: true returns a task_id instantly, then you poll as usual. No proxy timeouts on long scans, no manual file slicing.

async polling
POST /v1/process            async: true
  202 { "task_id": "9f3c41", "poll_url": "/v1/process/9f3c41" }

GET /v1/process/9f3c41
  { "status": "processing" }

GET /v1/process/9f3c41
  { "status": "done", "result": { "usage": { "pages": 91 }, … } }

Under the hood: a five-model fallback cascade that accumulates results. If a provider goes down mid-task, the next model picks up from the same spot, and the task survives to the answer.

What gets automated first

Five scenarios teams usually start with, across finance, procurement, warehouse and legal. Treat the figures as benchmarks for a typical scenario, not customer statistics — yours depend on your document flow.

40 min → 2 min

per batch of incoming documents

Primary document entry

finance

Supplier invoices and acts reach the accounting system already parsed: counterparty, company details, line items, totals, VAT. An accountant only reviews what the API flagged as doubtful.

before payment

not at the quarter-end reconciliation

Invoice checked against the contract

financial control

Amounts, company details and line items are compared with the contract terms automatically. An overcharge or an extra line shows up before the payment goes out, not three months later.

1 call

instead of retyping into a spreadsheet

Drawing to purchase specification

procurement

A set of drawings becomes a list of items: designations, materials, quantities. Procurement gets a ready request instead of an engineer reading title blocks line by line.

on delivery day

not at the annual stocktake

Delivery acceptance

warehouse

The delivery note and packing list are checked against the order before signing: short shipment, wrong item and weight mismatch are visible to the storekeeper at once, down to the exact line.

138 pages to minutes

instead of retyping the terms

Contract in the accounting record

legal

The contract with its annexes and amendments is parsed as a whole: parties, term, amount, payment schedule and penalties land in the contract record. Legal reviews the fields an amendment overrode, not a pile of PDFs.

You know the price before the first call

A page is the amount of work: text or sheet format, whichever is larger. An A1 drawing counts as eight pages.

Estimate with the calculator

Try it free: your first 100 pagesAn API key right after sign-up. Pick a plan later, once you know your volume.

Starter

$59/mo

early-access pricing

3,000 pages per month

$0.020 per page

Pro

$399/mo

early-access pricing

25,000 pages per month

$0.016 per page

Business

custom

volume to match your load

On-premise, self-hosted LLM, SLA

Three steps to your first JSON

  1. Get a key

    Sign up in the dashboard. The key works immediately, the first 100 pages are free.

  2. Send a document

    One multipart request: file, prompt and response schema.

    curl -X POST https://api.docinspect.ru/v1/process \
      -H "X-API-Key: $KEY" -F "file=@invoice.pdf" \
      -F "prompt=Extract the invoice fields" \
      -F 'output_schema={"type":"object","properties":{…}}'
  3. Parse the response

    result matches your output_schema. Long documents: async, batches of scans: split.

A document in.Structured data out.

The first call takes one developer an evening. The key is issued right away, the first 100 pages are free.

Get an API key