Upload / OCR
Try the service. Uses the same API as everyone else, so you need an API key.
AI modes send this image to a third-party LLM (OpenRouter). Do not use for documents that must not leave this server.
(result appears here)
API Docs
Base URL: · one endpoint, bearer-key auth.
POST /v1/ocr
Multipart form. Header Authorization: Bearer <key>. Max image 10 MB.
| Field | Required | Meaning |
|---|---|---|
file | yes | image (png, jpg, webp, …) |
engine | no | tesseract (default) or rapidocr |
mode | no | no-ai (default) · ai-direct (vision LLM reads the image) · ai-verify (engine reads first, LLM checks) |
lang | no | Tesseract language codes, e.g. eng, chi_sim+eng (default eng) |
hints | no | JSON string: {"expect":"digits|amount|date|alnum|text","pattern":"AAA9999A","decimals":2}. pattern: A = letter, 9 = digit, other characters literal. Hints fix look-alike characters (0/O, 1/I, 5/S, 8/B) and layout of amounts and dates. |
Response (200)
{
"text": "RM 12,345.67",
"confidence": null, // 0..1, or null when the engine gives none
"engine": "tesseract", // or "llm:<model>" when an AI mode answered
"mode": "no-ai",
"spans": [],
"fallback": null, // "budget" | "no-key" | "llm-error:…" when an AI mode fell back to the plain engine
"cost_usd": 0.0,
"ms": 412
}
Errors: 400 bad image/params · 401 missing or invalid key · 413 image too large.
Example
Privacy and limits
no-aikeeps the image on this server. Images are not stored; they are discarded after the response.ai-directandai-verifysend the image to a third-party LLM. Check this is acceptable for your documents.- AI use has a monthly spend cap. When it is reached the service answers with the plain engine and sets
fallback: "budget". - Accuracy depends on the image. No accuracy figures are promised here; see the benchmark reports for measured numbers.
GET /health
No auth. Returns engine list, whether AI is enabled, and this month's AI spend vs cap.
Status
loading…