To try the API and run small internal tools.
Paper in.
Fields out.
optii reads Belgian invoices, credit notes, receipts and 29 other document types in French, Dutch, German and English. It gives back text with coordinates, fields with their checks, or a type with a score. On a GPU, in the EU, in under half a second. It keeps nothing.
POST /ocr/extract · X-API-Key · pdf png jpg tiff bmp webp · 20 MB
read_depth = 1 of 3
Same file.
Three depths
of reading.
Every line as the engine read it, where it sits on the page, and how sure it is. A clean PDF’s own text layer is used verbatim and the response says so.
- bbox in page pixels, reading order kept
- confidence per line, 0 to 1
- source: text · ocr · hybrid
read_depth = 2 of 3
The invoice, as fields. Each one checked against Belgian rules.
Supplier, VAT number, IBAN, document number, dates, totals, VAT subtotals, line items, structured communication. If a field is not on the page, it comes back null, never guessed.
- VAT checksum · IBAN mod 97 · +++ communication mod 97
- excl + VAT = incl, or it is flagged
- invoice · credit_note · debit_note · receipt
read_depth = 3 of 3
Which of 32 Belgian documents is this?
An XLM-RoBERTa model trained on the paper Belgian firms actually receive. Top-k probabilities and a plain confident flag. Below the threshold it says unknown instead of guessing.
- accounting · HR · legal · social · tax
- FR, NL, DE and EN, mixed on one page is fine
- route before you extract
validations[]
It checks its own reading.
Belgian numbers carry their own proof. A VAT number, an IBAN and a structured communication each end in a mod-97 check digit. optii runs them, and adds the totals up, before you ever see the JSON.
quality.warnings[]
Bad scans get called out.
A photo of a photo still returns text. It also returns a warning, so your app can ask for a rescan instead of trusting the numbers.
Out of focus
Variance of the Laplacian under 400 on the page. Digits like 3 and 8 start to merge. The read is returned with the flag.
Too small
The page’s long side is under 1500 px. WhatsApp compression does this. The text comes back, with the warning.
Unsure lines
More than 15 % of the lines read under 0.80. Each line still carries its own score, so you know exactly which ones.
processing_time_ms
No OCR runs. The layer is read as is, the fields are extracted and checked. Exact characters, no confidence to worry about.
PP-OCRv6 on an NVIDIA GPU in the EU. Detection, recognition and classification in one pass, one page.
data_handling
We keep nothing.
Literally.
In memory, then gone
The file lives in RAM for the length of the request. Nothing is written to disk. Nothing exists after the response leaves.
Counted, not read
The usage log stores timestamp, key, endpoint, duration and file size. Never the text. Never the file.
EU servers, no US cloud in the path
GPU inference and the usage database both run on European infrastructure.
Keys are SHA-256 hashes
You see the full key once. Revoking is immediate. Per-key rate limits and quotas.
Retries are free
Same Idempotency-Key within 24 h returns the cached result. No second read, no second count. The cache key is a hash of the content, not the content.
dashboard
A key. A quota. A playground.
Sign in with your chut.app account. The dashboard calls the same API your code does: create and revoke keys, watch every call in the logs, drop a file in the playground to read it without writing a line.
overview
+ new key| key | last used | req | |
|---|---|---|---|
| optii_sk_7f3a…c91e ● | 2 min | 412 | revoke |
| optii_sk_02b8…44d0 ○ | 12 oct | 1 938 | revoked |
pricing
Priced like a receipt.
Printed like one too.
For firms and apps that read documents every day.
For platforms and pipelines with their own SLA.
Limits are the live API tiers. Pro is priced on request while we finish billing.
questions
Short answers.
Which documents does it handle?
Does it use the PDF’s own text?
What do I get on a bad scan?
Is anything stored?
Can my chut.app workflow call it?
about
Read in Belgium.
optii started as the reading engine inside chut.app, the AI back office for SMEs. Accountants kept asking for the OCR on its own. So here it is: the same models, the same EU hosting, behind one key.
It is trained on the paper a Belgian firm actually receives, in the languages it arrives in. Find one it reads badly? Send it. That is how it gets better.
Sid, founder · Wevelgem