Veralens is a document extraction API. Send a PDF, scan or photo with a JSON Schema, and typed fields come back. It reads the page, then computes, decodes, validates and normalizes what it found.
Usage is deducted per extraction based on input and output tokens.
Frequently asked questions
Everything you need to know about extraction, jobs, and billing.
Images (PNG, JPEG, WebP, GIF, HEIC), PDFs, DOCX, spreadsheets, CSV, and raw text. Vector formats such as SVG are rejected, so rasterize before sending. Each document source is capped at 20 MB, and a PDF at 200 pages. Output comes back as JSON, Markdown, or plaintext.
Yes. A PDF is sent as pages and read visually, so tables, stamps, signatures and layout are part of what the engine sees rather than a flattened text dump. One PDF can carry up to 200 pages and 20 MB. DOCX, spreadsheets and CSV are already text, so those are extracted to text before the run.
Creating a job places a hold on your balance, sized from your input plus the average output of recent completed jobs. When the job finishes, the hold settles to the real token count and usage.cost on the job is what you paid. The final number is often lower than the hold, and a failed job is refunded in full.
A job always ends in completed or failed, with a stable error_code you can branch on. Transient failures retry automatically with backoff before the job is given up on, and a failed job refunds its hold in full, so a failure costs nothing. Two codes describe the document rather than a glitch: inference_content_blocked and inference_output_too_long. Retrying those with the same document unchanged will usually fail the same way.
The file you send is encrypted at rest and deleted from storage the moment the job reaches completed or failed. What remains is the job record: output, target, schema, engine, tokens and cost, so you can audit a run later. We do not train on your content and we never ask you to supply training examples.
Everything checkable is checked in code after extraction. Totals are computed rather than read, IBANs and tax identifiers are checksum verified, QR codes and barcodes come from a decoder rather than from reading the pixels, and the numeric constraints in your schema are applied to the result. A value that does not resolve comes back exactly as printed instead of being quietly corrected, and a field that is genuinely not on the page comes back null. Route those nulls to review rather than forcing a guess.
Describe each shape you accept as an anyOf branch with an enum field that identifies it, and every entry comes back as the shape it actually is. Classification and extraction happen in the same pass, which replaces a separate classify then route step. Note that all sources in one job are read together as one document set, so keep unrelated documents in separate jobs.
No. You add funds first, from $5 or the local equivalent in euros and pounds, and each job draws from that balance. There are no subscriptions and no seats. Playground runs in the dashboard are real jobs and are billed the same way as API calls.
Price, and the kind of document each suits. vera-1.0-high is the default at $1.75 per million input tokens and $4.00 per million output, and it is the one for dense scans, complex layouts and strict schemas. vera-1.0-low runs at $0.50 and $2.00 for simpler documents and high volume batches. The API and the schema handling are identical, so set engine per job and switch whenever you want.
You get a string back and then own everything around it: a queue that survives a slow document, retries, webhooks, per job cost accounting, size and page limits, and the checks that keep a plausible wrong value out of your database. Veralens is that pipeline behind one POST, with typed output, a per job cost you can read, and no charge for a run that fails.