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.
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.
{ "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"} } }'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.
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.
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.
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.
A file, a prompt and a response schema. Classification, extraction, version diffing and risk analysis are different prompts, not different endpoints.
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.
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.
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 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.
{
"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
}Merges, headers and boundaries come back as a precise grid, not as a stream of text.
Every cell knows its row, column and value: the data is ready for reconciliation and accounting import.
Built in-house under a closed license, not a wrapper around off-the-shelf libraries. Quality does not depend on someone else's releases.
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.
| Item | Amount |
|-------------------|-----------:|
| Rack ST-1200 | 214,800.00 |
| Hydraulic trolley | 187,560.00 |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
what the external LLM sees
422 ANONYMIZATION_INCOMPLETE
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-ФЗ
De-identification happens before any third party sees the data: the compliance requirement is closed by architecture, not by a clause in a contract.
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.
rows: 3 usage: { pages: 8, sheets: 1 }
Works on a stack of sheets too: async walks a whole drawing set in a single request.
async: true returns a task_id instantly, then you poll as usual. No proxy timeouts on long scans, no manual file slicing.
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.
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
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
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
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
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
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.
A page is the amount of work: text or sheet format, whichever is larger. An A1 drawing counts as eight pages.
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
Sign up in the dashboard. The key works immediately, the first 100 pages are free.
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":{…}}'result matches your output_schema. Long documents: async, batches of scans: split.
The first call takes one developer an evening. The key is issued right away, the first 100 pages are free.