The API.
One base URL, bearer auth, multipart uploads. Get your key on the dashboard.
Authentication
Every request needs your secret key as a bearer token. Base URL:
Keys are per-account and carry your monthly page quota. Never ship a key in client-side code — call the API from your server.
POST /v1/extract
Extract the text layer of a digital PDF as JSON, Markdown, or Text. Fast and cheap — no LLM. Scanned PDFs (no text layer) return 422 (OCR is on the roadmap).
Body (multipart/form-data)
| Field | Type | Default | Description |
|---|---|---|---|
file | file | — | The PDF (required, ≤ 20 MB). |
format | string | json | json · markdown · text · xml |
structure | string | structured | JSON shape: structured · paragraphs · words |
Example
Response 200
With structure=paragraphs each page carries a paragraphs array; with words, a words array. format=text/markdown return content as a single string.
POST /v1/bank-statement
Structured extraction for bank statements — line-item transactions plus a reconciliation check (opening + credits − debits = closing). Reads scanned statements too. This is the premium path (Developer plan and up).
Body (multipart/form-data)
| Field | Type | Default | Description |
|---|---|---|---|
file | file | — | The statement PDF (required, ≤ 20 MB). |
Example
Response 200
Formats & structures
| format | content shape |
|---|---|
json | object — pages array, shaped by structure |
markdown | string — pages joined by --- |
text | string — pages joined by blank lines |
xml | string — <document> with one <page> per page |
| structure (json only) | per-page keys |
|---|---|
structured | page, text |
paragraphs | page, paragraphs[] |
words | page, words[] |
Errors
Errors return a JSON body detail with the status below.
| Status | Meaning |
|---|---|
401 | Missing or invalid API key. |
402 | Monthly page quota reached — upgrade your plan. |
413 | File larger than 20 MB. |
422 | Not a PDF, bad format/structure, or a scanned PDF sent to /v1/extract. |
502 | Extraction failed (bank-statement model/parse error). |
Limits & quota
Usage is metered in pages — each request counts its page count against your monthly quota, which resets each billing period. In-browser conversions on the homepage are free and unlimited; the API is what's metered.
| Plan | Pages / month |
|---|---|
| Free | 100 (one-time trial) |
| Developer | 1,000 |
| Scale | 5,000 |
See pricing. Over quota, both endpoints return 402 before any work runs.