The Veralens REST API is a small, predictable surface. Every endpoint lives under one base URL, speaks JSON, and returns the same envelope shape whether it succeeds or fails.
Authentication
Programmatic requests authenticate with an API key as a Bearer token. Create keys under Keys in the dashboard; each secret starts with vl_ and is shown once.
Key management endpoints (create, list, rotate, revoke) are part of the dashboard and use your logged-in session — you cannot manage keys with an API key. Everything below under Jobs accepts an API key.
Response envelope
Success responses wrap the payload in data:
Errors carry a stable error_code plus a matching HTTP status:
Branch on the HTTP status and error_code — the codes are stable; treat human-readable text as advisory only.
POST /jobs/create
Create an extraction job. Returns immediately with a job id; the work runs asynchronously.
Body
You must send at least one of schema or target. Provide a schema for strict typed JSON; provide only a target (with an optional global_prompt) for freeform Markdown/plaintext or schemaless JSON.
Response — 201 Created. Returns the full job object (same shape as GET /jobs/:jobId/get below), already in pending. model, target, and the precharge hold (usage.cost) are set immediately; output and settled token usage fill in once the job runs.
Example
GET /jobs/:jobId/get
Fetch a single job by id. Poll this until status is no longer pending.
Response
Job fields
GET /jobs/list
List your jobs, most recent first.
Query parameters
Response
Error codes
Rate limits
Every endpoint is rate limited per route. When you exceed a limit you get 429 with rate_limit_exceeded; retry with exponential backoff.