VERALENS

Send a document.Get JSON in yourschema, checked.

Veralens reads images, PDFs and office files and returns JSON in your schema.

You pay for the tokens each job uses, from $5.

Built for real workloads

Retries, queues and webhooks, so jobs finish without you watching.

Built to abstain, not to guess

IBANs and tax IDs must pass their checksum. QR codes and barcodes are decoded from the image. Totals are worked out in code. If a field is not on the page, you get null.

Checked values, not guesses

Standard forms on request

Set format on a field and dates, countries, currencies and phones come back in standard form.

Less cleanup in your code

Jobs that always finish

Jobs retry on their own and always end as completed or failed.

Built for production pipelines

Built for long jobs

Long jobs run in a queue. Get a webhook when they finish, or poll.

Webhooks or polling

No training on your documents

Your file is encrypted and deleted when the job ends. You never need to train a template.

Deleted after each job

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

One request, one JSON answer.

Send any file, from a receipt photo to your accountant's PDF, and the fields you want. When the job is done, you get those fields back as JSON.

Request
bash
curl -X POST \
  https://veralens.ai/api/v1/jobs/create \
  -H "Authorization: Bearer $VERALENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sources": [
      {
        "type": "image",
        "data": "data:image/jpeg;base64,..."
      }
    ],
    "schema": {
      "type": "object",
      "properties": {
        "merchant": { "type": "string" },
        "date": {
          "type": "string",
          "format": "date"
        },
        "currency": { "type": "string" },
        "subtotal": { "type": "number" },
        "tax": { "type": "number" },
        "total": { "type": "number" }
      }
    }
  }'
Response
json
{
  "merchant": "GREENLEAF CORNER MARKET",
  "date": "2026-03-14",
  "currency": "EUR",
  "subtotal": 29.74,
  "tax": 1.78,
  "total": 31.52
}
vera-1.0-high · 1,697 tokens · $0.0039

See this receipt and its full output

Pay per token. No subscription.

Add funds from $5. Each job is charged by the tokens it uses, and the cost is shown on the job. No subscription, no minimum. Funds do not expire. A failed job is refunded in full.

vera-1.0-high

Recommended

Use for dense scans, complex layouts and strict schemas.

Invoice (2 pages)
≈ $0.0074
Bank statement
≈ $0.0110
Receipt
≈ $0.0039

$5 covers about 670 invoicesHow we measured

$1.75/ 1M input tokens
$4.00/ 1M output tokens
  • Invoices, receipts and forms
  • JSON that follows your schema
  • Default engine
Add $5, get an API key

vera-1.0-low

For simple documents and high volume.

Invoice (2 pages)
≈ $0.0032
Bank statement
≈ $0.0050
Receipt
≈ $0.0014

$5 covers about 1,570 invoicesHow we measured

$0.50/ 1M input tokens
$2.00/ 1M output tokens
  • Simple documents at high volume
  • Same API, lower price per token
  • Set the engine per job
Add $5, get an API key

Usage is deducted per extraction based on input and output tokens.

More about pricingSee real documents and their cost

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 cost can be higher or 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 models on your content, and we never ask you to supply training examples.
Everything checkable is checked before you see it. Totals are worked out in code, IDs like IBANs must pass their checksum, and codes are decoded from the image. 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 same amount in euros or pounds at checkout. 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.