VERALENS

Any documentinto clean datain one API call

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.

Start extracting

Built to run every day.

Schema-typed output, values checked before they reach you, and jobs that finish even when a run goes wrong.

Built to abstain, not to guess

Codes come back decoded, identifiers checksum verified and totals exact. A field that is not on the page comes back null.

Trusted output, every time

ISO-native outputs

Dates, currencies, and country codes are normalized to ISO 8601, ISO 4217, and ISO 3166 automatically.

Clean data without post-processing

Jobs that always finish

Extractions are queued, tracked, and retried intelligently until they succeed or fail, no silent drops.

Built for production pipelines

Async-first, serverless-ready

Long-running docs, retries with backoff, webhooks, and usage metering, so your systems stay fast and resilient.

Designed for scale

No training on your documents

Your files are processed for extraction only. We never fine-tune on customer uploads or require template training.

Your data stays yours

Schema or prompt, your call

Provide a JSON Schema for strict typed output, or use natural-language prompts for Markdown, JSON, or plaintext.

One API. Full flexibility

Only pay for what you use

Top up prepaid funds anytime.
No subscriptions and no expiring credits.

Recommended

vera-1.0-high

Highest accuracy for complex layouts, dense scans, and strict JSON schemas.

$1.75/ 1M input tokens
$4.00/ 1M output tokens
  • Best for invoices, receipts & forms
  • Schema-guided JSON extraction
  • Recommended default engine
Top up & start

vera-1.0-low

Lower cost for simpler documents and high-volume batch runs.

$0.50/ 1M input tokens
$2.00/ 1M output tokens
  • Ideal for batch image extraction
  • Same API, lower per-token cost
  • Switch engines per job
Top up & start

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. Tables, stamps, signatures and layout are all things you can ask for, not detail that a flattened text dump threw away. One PDF can carry up to 200 pages and 20 MB, answered as a single document rather than a page at a time.
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: engine_content_blocked and engine_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 before you see it. Totals reconcile, IBANs and tax identifiers pass their checksum, QR codes and barcodes carry the exact payload of the symbol on the page, and the numeric constraints in your schema hold on the value you receive. 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. One job classifies and extracts, 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.